Truffle

何時使用 MyContract.deployed()?

  • December 29, 2021

我正在瀏覽truffle-contract文件並遇到了這個功能

  • MyContract.deployed()

如文件中所述,此函式創建一個合約抽象(abi)的實例,代表其部署地址的合約。這裡的部署地址是什麼?

它是在乙太坊上部署合約的地址還是在應用程序內部設置的其他地址?

第二件事:如果我的合約已經部署在像 Ropsten 這樣的乙太坊測試網上並且它有一個合約地址,那麼我是否必須執行這個函式MyContract.deployed()

這裡的部署地址是什麼?

如果您的合約尚未部署,則部署的地址尚不可行。

因此,您可以執行以下操作:

let myContract;
before(async function() {
   myContract = await MyContract.new(myArgs);
});

然後部署的地址是:

  • myContract.address如果您使用的是 web3 v0.x
  • myContract._address如果您使用的是 web3 v1.x

目前,Truffle 使用 web3 v0.x(如果我沒記錯的話是 v0.18.4)。

MyContract.deployed()旨在與您之前部署到網路的合約一起使用,很可能使用truffle migrate.

如果在您的遷移腳本中使用 , 部署契約deployer.deploy()truffle migrate將修改您的建構工件(預設在build/目錄下)以包含.networks屬性下的部署資訊。

MyContract.deployed()將使用此資訊,假設合約實際上已部署到 Truffle 目前使用的同一網路。

請注意,您可以使用該標誌與多個網路互動,並使用大多數 Truffle 命令採用--network的標誌在多個網路的工件之間切換。--build-directory

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