本文环境:
区块链版本:以太坊POA联盟链
节点版本: geth 1.9.19
nodejs版本:v10.14.0
操作系统:windows 64
参考文档:https://learnblockchain.cn/docs/etherscan/EventLogs.html
https://learnblockchain.cn/2018/12/19/8be8047936d2
目录
1.事件与日志
1.1 什么是事件
事件是以太坊提供的一种链内链外沟通的机制。通过触发事件,智能合约可以通知链外组件某个交易完成了什么事儿。
下面是一个 ERC20 合约里常见的 Transfer 事件定义,通过 event 关键字表明这是一个事件定义声明。
event Transfer(address indexed from, address indexed to, uint256 value);
在 transfer 方法的实现中,我们会像下面代码里展示的这样通过 emit 关键字触发事件的发生。
function transfer(address _to, uint256 _value) public returns (bool) {
...
emit Transfer(msg.sender, _to, _value);
return true;
}
1.2 什么是日志
在以太坊的语境里,日志代表对事件的存储。
下面是从 ropsten 测试网上读取的交易回执,在里面可以看到 logs 数据项,这个就是我们所说的日志,合约执行时每触发一次事件,在交易回执里的 logs 数据项数组里就会多一个日志条目出来。
> eth.getTransactionReceipt("0xe03fac
本文详细介绍了以太坊事件日志的相关概念,包括事件与日志的定义、日志的作用、web3j对websockets的支持。重点阐述了eth_getLogs接口的使用,包括介绍、示例、参数变化及其限制,并通过代码实例展示了如何通过web3.eth.getPastLogs获取历史日志。文章旨在帮助开发者理解和利用事件日志进行以太坊智能合约的监控与分析。
订阅专栏 解锁全文





