首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在未经迁移的情况下在松露控制台中获得已部署的契约实例?

如何在未经迁移的情况下在松露控制台中获得已部署的契约实例?
EN

Ethereum用户
提问于 2018-02-26 11:45:10
回答 2查看 4.6K关注 0票数 2

我在一个testrpc本地测试网中部署了一份带有松露的合同。本合同具有部署新合同的功能。

这个新合同我可以检查testrpc控制台中的地址,类似于以下内容:

代码语言:javascript
运行
复制
  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目录中创建的,但是由于没有迁移契约,所以不能使用以下命令:

代码语言:javascript
运行
复制
MyNewContract.deployed().then(_app => { app = _app })
app.showMeTheMoney()

在松露控制台中,有谁能与通过其他合同部署的合同进行交互呢?

EN

回答 2

Ethereum用户

回答已采纳

发布于 2018-02-26 11:55:39

您可以手动修改构建目录中的契约文件以包含地址,但是最终它会被覆盖,所以这不是一个好方法。

此外,deployed()也意味着在单例意义上使用。如果您的合同不是单例,那么您不应该通过deployed()查询它。

如果您有以下星座:合同A(单例)实例化合同B,那么您可以将对B的引用(S)存储在A中,并从JavaScript查询它。

示例

代码语言: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应该是一个单例,那么您需要更改迁移脚本并像这样部署它。

代码语言:javascript
运行
复制
deployer.deploy(A); 
deployer.deploy(B);

然后您就可以通过B.deployed()查询它了。

票数 1
EN

Ethereum用户

发布于 2018-03-26 23:21:52

在松露控制台中,有谁能与通过其他合同部署的合同进行交互呢?

若要查看已部署在上的合同列表,此命令工作如下:

代码语言:javascript
运行
复制
truffle(develop)> networks [--clean]

Network: develop (id: 4447)
  Migrations: 0xfb88de099e13c3ed21f80a7a1e49f8caecf10df6
  MyNewContract: 0xf204a4ef082f5c04bb89f7d5e6568b796096735a
票数 4
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/40960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档