我在契约中有一个事件,在事件触发时,我可以通过java侦听器看到如下所示
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编码或序列化,但我想解码我在日志中拥有的信息。
发布于 2016-06-20 10:18:18
可能是开发人员意识到了这一点,并启动了问题,这是一个可以解决这个问题的特性。
然而,我确实发现了以下几点。
如果数组(包括字符串和字节)用作索引参数,则它的sha3-散列作为主题存储。
然而,还有哈希测试:如何生成哈希输出,它提到它使用的是Keccak,而不是最终的SHA3。因此,上述主题中的值解释了所记录的内容。
发布于 2017-02-14 09:30:06
为了解析LogInfo中的信息,您需要契约ABI。一旦有了ABI,就很容易解析:
@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);
}
}这里使用的测试示例是在译码测试单元测试中
发布于 2016-06-20 14:42:15
我正致力于这个完全相同的问题,与“输入”字段的Ethereum事务。最接近我已经弄清楚这一点是在加文伍德的黄纸(http://gavwood.com/paper.pdf)下的附录2;递归长度前缀。我认为这是使用的格式,在某些情况下,它确实适用于链上事务的“输入”字段,但我不确定事件。我“看起来”很像。
https://ethereum.stackexchange.com/questions/6101
复制相似问题