Solidity
我可以檢測我的 Solidity 合約是在 testnet/ganache 還是 mainnet 上執行?
如果智能合約在主網或測試網上執行,是否可以從可靠的智能合約中檢測出來?或者如果它在甘納許上執行?
也許通過獲取網路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); }