跳转到主要内容

使用事件记录智能合约数据

智能合约
remix
solidity
事件
中级
jdourlens
2020年4月3日
3 分钟阅读

在 Solidity 中,事件是智能合约可以触发的调度信号。去中心化应用 (dapp) 或任何连接到以太坊 JSON-RPC API 的程序都可以监听这些事件并采取相应的行动。事件也可以被索引,以便以后可以搜索事件历史记录。

事件

在撰写本文时,以太坊区块链上最常见的事件是 ERC-20 代币在有人转账代币时触发的 Transfer 事件。

event Transfer(address indexed from, address indexed to, uint256 value);

事件签名在合约代码内部声明,并可以使用 emit 关键字触发。例如,transfer 事件记录了谁发起了转账(from)、转账给谁(to)以及转账了多少代币(value)。

如果我们回到我们的 Counter 智能合约,并决定在每次值更改时进行记录。由于该合约不打算被部署,而是作为通过继承来构建另一个合约的基础:它被称为抽象合约。在我们的计数器示例中,它看起来像这样:

请注意:

  • 第 5 行:我们声明了我们的事件及其包含的内容,即旧值和新值。

  • 第 13 行:当我们递增 count 变量时,我们触发该事件。

如果我们现在部署该合约并调用 increment 函数,我们会看到,如果你点击名为 logs 的数组中的新交易,Remix 将自动显示它。

Remix screenshot

日志对于调试智能合约非常有用,但如果你构建供不同人使用的应用程序,它们也很重要,并且可以更轻松地进行分析以跟踪和了解智能合约的使用情况。交易生成的日志会显示在流行的区块浏览器中,例如,你还可以使用它们创建链下脚本,以监听特定事件并在事件发生时采取行动。

页面最后更新: 2026年3月3日