跳转至主要内容

帮助更新此页面

🌏

本页面有新版本,但现在只有英文版。请帮助我们翻译最新版本。

翻译页面
查看英文

没有错误!🐛

此页面未翻译,因此特意以英文显示。

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

智能合约remixsolidity事件
中级
✍️jdourlens
📚EthereumDev
📆2020年4月3日
⏱️3 分钟阅读

提示作者 0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE

在 solidity 中,事件是智能合约可触发的调度信号。 去中心化应用程序或其他任何连接到以太坊 JSON-PRC 应用程序接口的程序,都可以监听这些事件并执行相应操作。 还可以为事件编制索引,便于以后可以搜索事件历史。

事件

在撰写本文时,以太坊区块链上最常见的事件是当有人转移代币时由 ERC20 代币触发的转账事件。

1event Transfer(address indexed from, address indexed to, uint256 value);
2
📋 复制

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

如果我们回到我们的 Counter 智能合约并决定在每次价值变化时记录。 由于这个合约不是为了部署,而是作为基础,通过扩展来构建另一个合约:因此它被称为抽象合约。 在我们的计数器示例中,此合约如下所示:

1pragma solidity 0.5.17;
2
3contract Counter {
4
5 event ValueChanged(uint oldValue, uint256 newValue);
6
7 // Private variable of type unsigned int to keep the number of counts
8 uint256 private count = 0;
9
10 // Function that increments our counter
11 function increment() public {
12 count += 1;
13 emit ValueChanged(count - 1, count);
14 }
15
16 // Getter to get the count value
17 function getCount() public view returns (uint256) {
18 return count;
19 }
20
21}
22
显示全部
📋 复制

注意:

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

  • 第 13 行:当我们增加 count 变量的值时,我们会触发事件。

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

Remix截屏

日志在调试智能合约时非常有用,另一方面,如果您构建一个不同人使用的应用,并且使分析更容易跟踪和了解您的智能合约的使用情况,那么日志也是非常重要的手段。 交易生成的日志显示在常见区块浏览器中,例如,您还可以使用日志创建链下脚本,以便监听特定事件并在事件发生时采取行动。

上次编辑: , Invalid DateTime
编辑页面

本页面对您有帮助吗?

网站最后更新: 2023年1月31日

使用以太坊

  • 查找钱包
  • 获取 ETH
  • 去中心化应用 (dapps)
  • 第二层
  • 运行一个节点
  • 稳定币
  • 质押以太币

生态系统

  • 社区中心
  • 以太坊基金会
  • 以太坊基金会博客
  • 生态系统支持方案
  • 以太坊漏洞悬赏计划
  • 生态系统资助计划
  • 以太坊品牌资产
  • Devcon