首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >部署契约是否意味着它将覆盖最后一个实例?

部署契约是否意味着它将覆盖最后一个实例?
EN

Ethereum用户
提问于 2016-06-02 18:43:00
回答 3查看 2.3K关注 0票数 7

我肯定错过了一些关于部署合同的东西,但可以肯定的是:

我使用的是Truffle,部署合同是否意味着它将覆盖最后一个实例?因为我每次部署它都会看到它得到一个新地址。但是同时,在webUI中调用合同总是只属于一个特定的合同。

这取决于我是哪个用户吗?我必须是部署它的人,还是至少可以访问它?如果是这样的话,您如何才能最好地定义对契约的访问呢?

EN

回答 3

Ethereum用户

回答已采纳

发布于 2016-06-02 21:34:03

不,一旦合同被部署,它就不能被覆盖。

您的web UI将需要更新与任何您想要与之交互的契约的地址。

任何人都可以援引合同。如果发送方不应该访问合同,契约函数可以检查msg.sender并立即返回(或throw)。修饰符可以帮助隔离这个逻辑:

代码语言:javascript
复制
modifier onlyowner {
    if (isOwner(msg.sender))
        _
}

然后,可以用该修饰符标记函数,例如:

function foo() onlyowner returns (bytes32 r)

有关示例,请参阅钱包合同,以及如何定义isOwner

票数 6
EN

Ethereum用户

发布于 2016-06-02 21:47:27

已部署的契约只有一个地址,其内容不能修改。如果您第二次部署相同的契约,则它有另一个地址。

想象一下这种情况:您的合同为使用它的每个用户提供了一个令牌。第一个已部署合同的用户和第二个已部署合同的用户将有不同的令牌。这两个令牌不兼容。

因此,如果您部署了一个契约,并考虑在将来进行更改,则需要准备一个迁移过程。别忘了合同可以用合同!而且许多合同都有杀死功能,使它们无法实现。

您应该为ethereum/Dapp寻找设计模式,比如DOUG/Name注册表。http://fr.slideshare.net/mids106/dapp-design-patterns

票数 4
EN

Ethereum用户

发布于 2017-09-18 14:53:43

重新运行迁移将将其重新部署到新地址的区块链中。它还将覆盖/build/contracts/中的ABI。我在另一个测试网络上尝试我的合同时不小心做了这件事,所以要小心。

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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