Events
事件/發射命名約定
當我在 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
希望有幫助!