我在一个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)
但是,我如何在松露控制台中使用这个新合同来进行交互呢?契约的json文件( ABI等)是在松露的build
目录中创建的,但是由于没有迁移契约,所以不能使用以下命令:
MyNewContract.deployed().then(_app => { app = _app })
app.showMeTheMoney()
在松露控制台中,有谁能与通过其他合同部署的合同进行交互呢?
发布于 2018-02-26 11:55:39
您可以手动修改构建目录中的契约文件以包含地址,但是最终它会被覆盖,所以这不是一个好方法。
此外,deployed()
也意味着在单例意义上使用。如果您的合同不是单例,那么您不应该通过deployed()
查询它。
如果您有以下星座:合同A(单例)实例化合同B,那么您可以将对B的引用(S)存储在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()
查询它了。
发布于 2018-03-26 23:21:52
在松露控制台中,有谁能与通过其他合同部署的合同进行交互呢?
若要查看已部署在上的合同列表,此命令工作如下:
truffle(develop)> networks [--clean]
Network: develop (id: 4447)
Migrations: 0xfb88de099e13c3ed21f80a7a1e49f8caecf10df6
MyNewContract: 0xf204a4ef082f5c04bb89f7d5e6568b796096735a
https://ethereum.stackexchange.com/questions/40960
复制相似问题