使用事件记录智能合约中的数据
智能合约remixsolidity事件
中级comp-tutorial-metadata-tip-author 0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE
在solidity中,事件是智能合约可触发的调度信号。 去中心化应用程序或其他任何连接到以太坊 JSON-PRC 应用程序接口的程序,都可以监听这些事件并执行相应操作。 还可以为事件编制索引,便于以后可以搜索事件历史。
事件
在撰写本文时,以太坊区块链上最常见的事件是当有人转移代币时由 ERC20 代币触发的转账事件。
1event Transfer(address indexed from, address indexed to, uint256 value);复制
事件签名在合约代码中声明,可以使用 emit 关键字触发。 例如,转账事件记录谁发送了转账 (from)、发送给谁 (to) 以及转移了多少代币 (value)。
如果我们回到我们的 Counter 智能合约并决定在每次价值变化时记录。 由于这个合约不是为了部署,而是作为基础,通过扩展来构建另一个合约:因此它被称为抽象合约。 在我们的计数器示例中,此合约如下所示:
1pragma solidity 0.5.17;23contract Counter {45 event ValueChanged(uint oldValue, uint256 newValue);67 // Private variable of type unsigned int to keep the number of counts8 uint256 private count = 0;910 // Function that increments our counter11 function increment() public {12 count += 1;13 emit ValueChanged(count - 1, count);14 }1516 // Getter to get the count value17 function getCount() public view returns (uint256) {18 return count;19 }2021}显示全部复制
注意:
第5行:我们声明了事件及其包含的内容、旧值以及新值。
第13行:当我们增加count变量的值时,我们会触发事件。
如果我们现在部署合约并调用increment函数,如果你在名为logs的数组内单击新交易,我们将看到Remix会自动显示它。
日志在调试智能合约时非常有用,另一方面,如果你构建一个不同人使用的应用,并且使分析更容易跟踪和了解你的智能合约的使用情况,那么日志也是非常重要的手段。 交易生成的日志显示在常见区块浏览器中,例如,你还可以使用日志创建链下脚本,以便监听特定事件并在事件发生时采取行动。
n
上次修改时间: @nhsz(opens in a new tab), 2023年8月15日