Note
介紹 solidity 中的 event
Solidity中的事件(event)是EVM上日志的抽象,它具有两个特点:
- 响应:应用程序(ethers.js)可以通过RPC接口订阅和监听这些事件,并在前端做响应。
- 经济:事件是EVM上比较经济的存储数据的方式,每个大概消耗 2,000 gas;相比之下,链上存储一个新变量至少需要 20,000 gas。
事件的声明由 event
关键字开头,接着是事件名称,括号里面写好事件需要记录的变量类型和变量名。
ex:
event Transfer(address indexed from, address indexed to, uint256 value);
Tip
帶有 indexed
關鍵字的變量,會被保存在以太坊虛擬機日誌的topics
中,方便之后检索。
使用 emit
以太坊虚拟机(EVM)用日志 Log 来存储Solidity事件,每条日志记录都包含主题 topics
和数据 data
两部分。
-
Q: 下列关于事件的说法中,错误的是?
A: 鏈上儲存數據成本比儲存事件低 -
Q: 可以使用emit关键字来释放一个事件?
A: emit -
Q: 每个事件可以有无限个带indexed的变量?
A: 錯誤 -
Q: indexed关键字可以修饰任意类型的变量?
A: 錯誤