Contract-Development

了解合約的地址(當它們部署兩次時)

  • August 20, 2020

我只是有一個關於契約地址的快速問題。

如果我想簽訂合約轉移代幣,我如何獲得我想要的代幣的正確地址?

對於範例:

function transfer() external {
       address a  = address(MyToken_ERC20());
       MyToken_ERC20 token = MyToken_ERC20(a);
       token.transfer(msg.sender, 100);
   }

如果我兩次部署“MyToken_ERC20”,就會有兩個令牌地址,對嗎?如果是的話……我怎樣才能確保我得到了正確的地址,只有通過將地址硬編碼到我的新契約中?

  • 如果我兩次部署“MyToken_ERC20”,就會有兩個令牌地址,對嗎?

是的。每次部署合約時,都會生成一個新地址,並獲得一個新的合約,該合約的儲存空間與之前的不同。例如,如果您部署兩次相同的 erc20 合約,您將獲得兩個不同的代幣。

  • 我怎樣才能確保我得到了正確的地址,只有通過將地址硬編碼到我的新契約中?

不可能對合約的地址進行硬編碼,因為它是以確定的方式生成的(參見乙太坊合約的地址是如何計算的?)。

有很多方法可以獲取新部署合約的正確地址。如果您使用 Truffle,該地址會在部署時在日誌中顯示。對於自定義腳本,您可以使用此 web3 事件:( .on('receipt', function(receipt) { console.log(receipt.contractAddress) // contains the new contract address })參見https://web3js.readthedocs.io/en/v1.2.7/web3-eth-contract.html#deploy)。另一種方法是簡單地檢查您的交易記錄,尋找負責部署的交易(例如在 Etherscan 上)。

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