首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >事件跟踪和从ethereumj解码

事件跟踪和从ethereumj解码
EN

Ethereum用户
提问于 2016-06-16 05:11:09
回答 3查看 1.1K关注 0票数 2

我在契约中有一个事件,在事件触发时,我可以通过java侦听器看到如下所示

代码语言:javascript
复制
public void onTransactionExecuted(TransactionExecutionSummary summary) {
  List<LogInfo> listLogs= summary.getLogs();// This gives you list of log info
 // now Iterate and print the details
}

在打印loginfo对象时,我得到类似于LogInfo{address=cd5805d60bbf9afe69a394c2bda10f6dae2c39af, topics=[37637aa70af5cd14eda4054cc4323408c237c26de60d49064db916e476c29e2e 67fad3bfa1e0321bd021ca805ce14876e50acac8ca8532eda8cbf924da565160 ], data=000000000000000000000000cd2a3d9f938e13cd947ec05abc7fe734df8dd826}的内容。

我知道这是某种形式的abi编码或序列化,但我想解码我在日志中拥有的信息。

EN

回答 3

Ethereum用户

回答已采纳

发布于 2016-06-20 10:18:18

可能是开发人员意识到了这一点,并启动了问题,这是一个可以解决这个问题的特性。

然而,我确实发现了以下几点。

如果数组(包括字符串和字节)用作索引参数,则它的sha3-散列作为主题存储。

然而,还有哈希测试:如何生成哈希输出,它提到它使用的是Keccak,而不是最终的SHA3。因此,上述主题中的值解释了所记录的内容。

票数 1
EN

Ethereum用户

发布于 2017-02-14 09:30:06

为了解析LogInfo中的信息,您需要契约ABI。一旦有了ABI,就很容易解析:

代码语言:javascript
复制
@Override
public void onTransactionExecuted(TransactionExecutionSummary summary) {
  String abi = "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amount\",\"type\":\"uint128\"}],\"name\":\"Transfer\",\"type\":\"event\"}]\n";
  for (LogInfo logInfo : summary.getLogs()) {
    CallTransaction.Contract contract = new CallTransaction.Contract(abi);
    CallTransaction.Invocation invocation = contract.parseEvent(logInfo);
    System.out.println(invocation);
  }
}

这里使用的测试示例是在译码测试单元测试中

票数 3
EN

Ethereum用户

发布于 2016-06-20 14:42:15

我正致力于这个完全相同的问题,与“输入”字段的Ethereum事务。最接近我已经弄清楚这一点是在加文伍德的黄纸(http://gavwood.com/paper.pdf)下的附录2;递归长度前缀。我认为这是使用的格式,在某些情况下,它确实适用于链上事务的“输入”字段,但我不确定事件。我“看起来”很像。

票数 2
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/6101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档