Events

事件/發射命名約定

  • October 21, 2020

當我在 Rinkeby 上部署完全相同的合約時,除了事件名稱之外,Rinkeby 的行為有所不同。當事件的名稱是 OwnerSet 時,我可以在https://rinkeby.etherscan.io/上看到它。但是,當名稱為 OwnerSit 時,我看不到事件的名稱。請參閱下面的圖片和程式碼。

為什麼行為上的差異?

謝謝

所有者集

車主坐

// SPDX-License-Identifier: MIT
pragma solidity 0.7.4;

contract Owner {

   address public owner;
   
   // Time this contract was created
   uint256 public createTime;
   
   // event for EVM logging
   event OwnerSet(address indexed oldOwner, address indexed newOwner);
   
   // modifier to check if caller is owner
   modifier isOwner() {
       
       require(msg.sender == owner, "Caller is not owner.");
       _;
   }
   
   constructor() {
       
       owner = msg.sender;
       createTime = block.timestamp;
       emit OwnerSet(address(0), owner);
   }
}

這可能不是關於 Rinkeby,而是關於 Etherscan,這也是我認為 goodvibration 在對您的問題的評論中所暗示的。如果您採用 keccak256 雜湊OwnerSit(address,address)(稱為事件簽名),您應該得到0x3411...[topic0]在螢幕截圖中看到的。這應該告訴您契約(或至少是事件)已正確部署到 Rinkeby。

那麼為什麼 Etherscan 上沒有顯示事件名稱呢?為了讓 Etherscan 知道第一個螢幕截圖中顯示的資訊,需要將其送出給 Etherscan。這是稱為契約驗證的過程(如提到的 goodvibration)。如果您在此過程中需要一些幫助,這裡有一個連結可以引導您完成:https ://dave-appleton.medium.com/verifying-your-contract-on-etherscan-75a2afbf5b42

希望有幫助!

引用自:https://ethereum.stackexchange.com/questions/89548