7

如何更新部署在以太坊区块链中的Truffle dapp的智能合约?

4

1 回答 1

11

在这里找到了很好的答案。

来自Ethereum Stack Exchange站点中的axic :

合约代码是不可变的,存储是可变的,但你不能执行放入存储的代码,至少现在是这样。

合约错误修正

至于错误修复,常见的模式是让代理或查找合同成为通往真实合同的网关,如果发生更改或错误修复,它们将被替换。更换它也意味着丢失旧的存储内容。

保持存储

如果你想在保留存储的同时升级代码,你可以考虑分离存储和逻辑。有一个专用的存储合约,它接受来自可信地址的写调用(例如逻辑合约)。所有重要的存储都应该与这个相关联。

自毁后访问存储

到今天为止,即使在 selfdestruct 的情况下也没有实现真正的修剪,但这肯定会在未来出现。有几个 EIP 在讨论这个问题。

即使实现了修剪,也不应该立即发生,您应该能够从最后一个状态读取存储。还计划让存档节点无限期地保持状态——仅通过判断区块链的增长情况,不确定这是否可行。

在同一地址重新部署

简而言之:实际上这是不可能的。合约地址是根据发送者和随机数计算得出的。随机数是连续的,不能有任何间隙,也不能有重复。

理论上,可以使用不同的 nonce 和地址组合得到相同的哈希,但可能性很小。

于 2016-03-29T11:36:40.253 回答