Search code examples
ethereumblockchainsoliditysmartcontracts

Why doesn't event name shown in sepolia.etherscan?


I have a smart contract deployed to Sepolia network. One of the method emits 3 events. Please take a look at https://sepolia.etherscan.io/tx/0x31f77360db4cd51f5db7954d143d0fb514b96d71fa409c17b3412f78c11ee6a3#eventlog as an example.

There are 3 logs and 2 of them are Transfer but the last one doesn't have any name as shown in below screenshot.

enter image description here

The first two Transfer events are emitted from @openzeppelin/contracts/token/ERC20/ERC20.sol code while the last one was emitted by this contract, the code is:

  event SectorCreated(address owner, int x, int y, uint256 width, uint256 height, uint256 price);

...

  emit SectorCreated(msg.sender, x, y, width, height, price);

I am not sure what the SectorCreated event is now shown. What is the different between the Transfer and SectorCreated events?


Solution

  • Etherscan uses combination of its own database and ABI of the event emitting contract to decode the signature hash (topics[0], e.g. value 0xbfa038b0...) into human-readable format (e.g. SectorCreated).

    The Transfer event is likely in their own database (because it's standardized ERC-20 event), but SectorCreated is not.

    In this case, the contract that emitted the event is 0xc9986cf63eee2d04117300e1963083ccbb2ea301. Its source code / ABI is not verified on Etherscan, so the site doesn't know how to decode events that the contract emits.

    Solution is simple - verify the contract source code on Etherscan. I'm just not sure if it applies retroactively to already sent transactions or only new ones after the verification.