美文网首页
ETH(实现Etherscan的eventlog)

ETH(实现Etherscan的eventlog)

作者: 坠叶飘香 | 来源:发表于2018-09-27 12:56 被阅读0次

    例如:
    https://etherscan.io/tx/0xc9ed903d7e5295e973b0c7b58d98a6c2ff06b0b8edef721f6d702a8bf7c4864e#eventlog

    eventlog

    1.获取一笔交易的logs

    public void getTransactionReceipt(View view) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    String hash = "0xc9ed903d7e5295e973b0c7b58d98a6c2ff06b0b8edef721f6d702a8bf7c4864e";
    
                    try {
                        EthGetTransactionReceipt ethGetTransactionReceipt = mWeb3j.ethGetTransactionReceipt(hash).sendAsync().get();
                        TransactionReceipt receipt = ethGetTransactionReceipt.getTransactionReceipt();
                        String raw = ethGetTransactionReceipt.getRawResponse();
                        List<org.web3j.protocol.core.methods.response.Log> list = receipt.getLogs();
                        for(org.web3j.protocol.core.methods.response.Log log : list){
                            Log.e("test", "MainActivity getTransactionReceipt log = " + log);
                        }
                    } catch (ExecutionException e) {
                        e.printStackTrace();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }).start();
        }
    
    其中一个log输出
    {
        removed=false, 
        logIndex='0x1a',  //26
        transactionIndex='0x32', 
        transactionHash='0xc9ed903d7e5295e973b0c7b58d98a6c2ff06b0b8edef721f6d702a8bf7c4864e', 
        blockHash='0xcbc4ec88129a9a851f4067ef37f079275ae7765a0e7b2c17a33b4c5009df2b77', 
        blockNumber='0x619c16', 
        address='0x0e0989b1f9b8a38983c2ba8053269ca62ec9b195', 
        data='0x000000000000000000000000000000000000000000000000000003ce683d7122', 
        type='null', 
        topics=[0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef, 
                0x0000000000000000000000001adeed31039138b6197b7da8fe8acbc1885c936a, 
                        0x000000000000000000000000f20b9e713a33f61fa38792d2afaf1cd30339126a]
    }
    

    2.解析abi,通过第一步的topics[0]获取event的name

    代码:https://github.com/plaichat1986/Ett_Demo/blob/master/src/com/laurel/eth/abi/Test.java
    event.name
    private void handleEventEntry(Abi.Entry entry, String signagure) {
        if(entry.type == Abi.Entry.Type.event) {
            List<Abi.Entry.Param> paramList = entry.inputs;
            for(Abi.Entry.Param param : paramList) {
                System.out.println("param.name = " + param.name);
            }
            System.out.println("entry.formatSignature = " + entry.formatSignature()); //对应topics[0]
            System.out.println("test entry.name = " + entry.name + ", signagure = " + signagure);
            System.out.println("          ");
        }
    }
    

    3.topics[0]的解释

    event的Keccak-256哈希值


    fingerprintSignature

    相关文章

      网友评论

          本文标题:ETH(实现Etherscan的eventlog)

          本文链接:https://www.haomeiwen.com/subject/oaheoftx.html