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