Skip to main content

9.Events

Solidity中的Events是日志的抽象,具有两个特点:

  • 响应: 应用程序可以通过RPC接口订阅和监听这些时间,并且在前端做出响应
  • 经济: 事件是EVM上比较经济的存储数据的方式,每个大概消耗2000 Gas,相比之下,存储一个新的变量要20000 gas。
contract ExampleContract {

// We will explain the significance of the indexed parameter later.
event ExampleEvent(address indexed sender, uint256 someValue);

function exampleFunction(uint256 someValue) public {
emit ExampleEvent(sender, someValue);
}
}

同时以太坊没有提供获取智能合约所有交易的机制,但它确实提供了从智能合约获取所有事件的机制,所以能让我们更快的检索。

Some Tips

  1. Events不可以在View函数中使用
    • 原用很简单,Events在改变状态,通过存储日志来改变区块链的状态,但是View是不可以改变状态的
  2. 一个Events可以有多少参数
    • 一个Events中索引参数不能超过三个。匿名事件可以有四个索引参数,没有参数也是可以的
  3. Events可以通过接口和父合约继承

Refer

https://www.rareskills.io/post/ethereum-events