0

我编写了一个简单的合约来测试事件,如下面的代码:

pragma solidity ^0.6.12;

contract EventTest {
    address public router;
    event RouterUpdated(address indexed newAddress);
    
    function setRouter(address newAddress) public {
        router = newAddress;
        emit RouterUpdated(newAddress);
    }
}

为什么没有出现交易事件函数名? 检查结果

4

1 回答 1

0

keccak256它以事件签名的散列形式存储在区块链上。

keccak256("RouterUpdated(address)") == 0x7aed1d3e8155a07ccf395e44ea3109a0e2d6c9b29bbbe9f142d9790596f4dc80

它没有被翻译成原件,RouterUpdated仅仅是因为 Etherscan 没有将其翻译成人类可读的形式。

由于散列是单向函数,因此这种转换通常使用字典完成,其中键是散列,值是输入。

他们在 UI 的某些部分将函数签名转换为函数名称,但出于某种原因,他们选择不将事件签名转换为事件名称。

于 2021-06-14T16:18:37.413 回答