Truffle

如何在沒有遷移的情況下部署的松露控制台中獲取已部署的合約實例?

  • March 26, 2018

我有一個與松露一起部署到 testrpc 本地測試網的契約。該合約具有部署新合約的功能。

這個新合約我可以在 testrpc 控制台中查看類似這樣的地址:

 Transaction: 0x85a7f17406536dd9618c6647d7d0595a2cee7e7e065ffc08a99e58aa5473ab71
 Contract created: 0x1104c5adf4476aec333ee687c725eacc8d417a7c
 Gas usage: 2642382
 Block Number: 7
 Block Time: Mon Feb 26 2018 19:27:25 GMT+0900 (JST)

但是如何在 truffle 控制台中使用這個新合約進行互動呢?合約的 json 文件(ABI 等)是在 truffle 的build目錄中創建的,但是由於合約沒有遷移,我不能使用這個命令:

MyNewContract.deployed().then(_app => { app = _app })
app.showMeTheMoney()

有誰可以在松露控制台中與通過其他契約部署的契約進行互動?

您可以手動修改建構目錄中的合約文件以包含地址,但它最終會被覆蓋,因此這不是一個好方法。

此外deployed(),它意味著在單例的意義上使用。如果您的契約不是單例,則不應通過deployed().

如果您有以下星座:合約 A(單例)實例化合約 B,那麼您可以將 B 的引用儲存在 A 中並從 JavaScript 中查詢。

例子

contract A {
   B[] public arrayOfBs;
   function create() returns (B) {
       B b = new B();
       arrayOfBs.push(b);
       return b;
   }
}

deployer.deploy(A);
...
A.deployed()
   .then(a => {return a.arrayOfBs(idx)})
   .then(bAddr => {return B.at(b)})
   .then(b => {b.showMeTheMoney()})

如果 B 應該是單例,那麼您需要更改遷移腳本並像這樣部署它。

deployer.deploy(A); 
deployer.deploy(B);

然後你就可以通過B.deployed().

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