我肯定错过了一些关于部署合同的东西,但可以肯定的是:
我使用的是Truffle,部署合同是否意味着它将覆盖最后一个实例?因为我每次部署它都会看到它得到一个新地址。但是同时,在webUI中调用合同总是只属于一个特定的合同。
这取决于我是哪个用户吗?我必须是部署它的人,还是至少可以访问它?如果是这样的话,您如何才能最好地定义对契约的访问呢?
发布于 2016-06-02 21:34:03
不,一旦合同被部署,它就不能被覆盖。
您的web UI将需要更新与任何您想要与之交互的契约的地址。
任何人都可以援引合同。如果发送方不应该访问合同,契约函数可以检查msg.sender并立即返回(或throw)。修饰符可以帮助隔离这个逻辑:
modifier onlyowner {
if (isOwner(msg.sender))
_
}然后,可以用该修饰符标记函数,例如:
function foo() onlyowner returns (bytes32 r)
有关示例,请参阅钱包合同,以及如何定义isOwner。
发布于 2016-06-02 21:47:27
已部署的契约只有一个地址,其内容不能修改。如果您第二次部署相同的契约,则它有另一个地址。
想象一下这种情况:您的合同为使用它的每个用户提供了一个令牌。第一个已部署合同的用户和第二个已部署合同的用户将有不同的令牌。这两个令牌不兼容。
因此,如果您部署了一个契约,并考虑在将来进行更改,则需要准备一个迁移过程。别忘了合同可以用合同!而且许多合同都有杀死功能,使它们无法实现。
您应该为ethereum/Dapp寻找设计模式,比如DOUG/Name注册表。http://fr.slideshare.net/mids106/dapp-design-patterns。
发布于 2017-09-18 14:53:43
重新运行迁移将将其重新部署到新地址的区块链中。它还将覆盖/build/contracts/中的ABI。我在另一个测试网络上尝试我的合同时不小心做了这件事,所以要小心。
https://ethereum.stackexchange.com/questions/4566
复制相似问题