【问题标题】:How to get emitted events corresponding to sent transaction如何获取与已发送事务对应的已发出事件
【发布时间】:2020-11-03 11:22:41
【问题描述】:

我想编写保存哈希值的智能合约并返回该哈希的标识符以便稍后检查保存的哈希。

我的合同是这样的:

pragma solidity >=0.4.25 <0.7.0;
pragma experimental ABIEncoderV2;

contract SaveHash {
    event HashSaved(uint id);
    Hash[] hashes;
    function save(Hash memory hash) public {
        // some process
        emit HashSaved(hashes.length - 1);
    }
}

但是,我不明白如何知道合约发出的事件对应于哪个交易。

我如何知道事件是由哪个事务创建的?

【问题讨论】:

    标签: solidity web3


    【解决方案1】:

    事件存储在事务(也称为主题)的logs 部分。事件是 ABI 编码的。如果您知道合约数据,您可以将交易日志部分的原始十六进制数据与事件匹配。

    要逆序获取事件的交易,可以查询以太坊节点列表all the past events(web3.js 示例)。交易哈希在返回值内。然后您可以调用web3.eth.getTransactionReceipt()获取此交易哈希以获取完整的交易详情。

    【讨论】:

      猜你喜欢
      • 2015-06-09
      • 2012-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-07
      • 1970-01-01
      相关资源
      最近更新 更多