Solidity Event 日志存储机制
- 基本原则:
- 事件日志会被存储在触发该事件的合约地址下
- 事件日志与合约地址是强绑定的关系
- 日志会永久存储在区块链上,但与状态存储(storage)分开
- 跨合约调用场景(A调用B):
- 如果合约B触发了事件,日志会存储在B的地址下
- 如果合约A触发了事件,日志会存储在A的地址下
- 调用关系不影响事件的存储位置
- 日志查询特点:
- 按合约地址查询:只能看到该地址触发的事件
- 按交易哈希查询:可以看到该交易中所有合约触发的所有事件
- 事件日志的存储位置与调用链无关,只与触发事件的合约地址有关
- 实际应用举例:
- 重要结论:
- 事件日志是与合约地址绑定的,而不是与调用者绑定
- 即使是通过代理调用,事件也会记录在实际触发事件的合约地址下
- 要完整追踪一个交易的所有事件,应该查询交易哈希而不是单个合约地址
- 最佳实践建议:
- 在开发时,如果需要追踪完整的调用链,应该:
- 使用交易哈希查询所有相关事件
- 在关键合约中记录足够的事件信息
- 在事件中包含足够的索引参数以便后续查询
- 事件日志的清晰性和可追溯性
- 合约行为的透明度
- 交易执行过程的完整记录

浙公网安备 33010602011771号