Solidity

我可以檢測我的 Solidity 合約是在 testnet/ganache 還是 mainnet 上執行?

  • April 15, 2021

如果智能合約在主網或測試網上執行,是否可以從可靠的智能合約中檢測出來?或者如果它在甘納許上執行?

也許通過獲取網路ID?但我不確定智能合約本身是否可行。

您可以使用CHAINID操作碼獲取目前鏈 ID。AFAIK,Solidity 對此沒有內置功能,但您可以使用內聯彙編來獲取 Solidity 合約中的鏈 ID,例如:

function getChainId() private view returns (uint256 chainId) {
 assembly {
   chainId := chainid()
 }
}

然後您可以檢查主網的鏈 ID 是否為 1,或者您正在使用的測試網的另一個值。確保將 Ganache 配置為不使用鏈 ID 1。

如果您在 truffle 中執行智能合約,您將擁有一個遷移文件和一個配置文件。配置文件將具有您配置的不同網路。在您自己創建的第二個遷移文件中,您可以記錄目前正在使用的網路。像這樣的東西

module.exports=function(deployer,network){ console.log(network); deployer.deploy(your_conract); }

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