我有一个智能合约部署到 Sepolia 网络。其中一种方法发出 3 个事件。请看一下 https://sepolia.etherscan.io/tx/0x31f77360db4cd51f5db7954d143d0fb514b96d71fa409c17b3412f78c11ee6a3#eventlog 作为示例。
有 3 个日志,其中 2 个是
Transfer
但最后一个没有任何名称,如下图所示。
前两个
Transfer
事件是从@openzeppelin/contracts/token/ERC20/ERC20.sol
代码发出的,而最后一个是由这个合约发出的,代码是:
event SectorCreated(address owner, int x, int y, uint256 width, uint256 height, uint256 price);
...
emit SectorCreated(msg.sender, x, y, width, height, price);
我不确定现在显示的
SectorCreated
事件是什么。 Transfer
和 SectorCreated
事件有什么不同?
Etherscan 使用自己的数据库和事件发出合约的 ABI 相结合,将签名哈希(
topics[0]
,例如值0xbfa038b0...
)解码为人类可读的格式(例如SectorCreated
)。
Transfer
事件可能在他们自己的数据库中(因为它是标准化的ERC-20事件),但SectorCreated
不是。
在本例中,发出事件的合约是 0xc9986cf63eee2d04117300e1963083ccbb2ea301。它的源代码/ABI 未在 Etherscan 上验证,因此该站点不知道如何解码合约发出的事件。
解决方案很简单——在 Etherscan 上验证合约源代码。我只是不确定它是否追溯适用于已发送的交易或仅适用于验证后的新交易。