事件是智能合约发出的信号。智能合约的前端UI,例如,DApps、web.js,或者任何与Ethereum JSON-RPC API连接的东西,都可以侦听这些事件。事件可以被索引,以便以后可以搜索事件记录。
事件在区块链中的存储
区块链是一个区块链表,这些块的内容基本上是交易记录。每个交易都有一个附加的交易日志,事件结果存放在交易日志里。合约发出的事件,可以使用合约地址访问。
定义事件
1.event
要定义事件,可以使用event
关键字(在用法上类似于function
关键字)。然后可以在函数中使用emit
关键字触发事件。按照惯例,事件名称以大写字母开头,以区别于函数。
// 声明一个事件
event Deposit(address indexed _from, bytes32 indexed _id, uint _value);
事件是EVM上比较经济的存储数据的方式,每个大概消耗2,000 gas;相比之下,链上存储一个新变量至少需要20,000 gas。
2.indexed
indexed标记的变量可以理解为检索事件的索引“键”,在以太坊上单独作为一个topic进行存储和索引,程序可以轻