问问题
3268 次
1 回答
11
在这里找到了很好的答案。
来自Ethereum Stack Exchange站点中的axic :
合约代码是不可变的,存储是可变的,但你不能执行放入存储的代码,至少现在是这样。
合约错误修正
至于错误修复,常见的模式是让代理或查找合同成为通往真实合同的网关,如果发生更改或错误修复,它们将被替换。更换它也意味着丢失旧的存储内容。
保持存储
如果你想在保留存储的同时升级代码,你可以考虑分离存储和逻辑。有一个专用的存储合约,它接受来自可信地址的写调用(例如逻辑合约)。所有重要的存储都应该与这个相关联。
自毁后访问存储
到今天为止,即使在 selfdestruct 的情况下也没有实现真正的修剪,但这肯定会在未来出现。有几个 EIP 在讨论这个问题。
即使实现了修剪,也不应该立即发生,您应该能够从最后一个状态读取存储。还计划让存档节点无限期地保持状态——仅通过判断区块链的增长情况,不确定这是否可行。
在同一地址重新部署
简而言之:实际上这是不可能的。合约地址是根据发送者和随机数计算得出的。随机数是连续的,不能有任何间隙,也不能有重复。
理论上,可以使用不同的 nonce 和地址组合得到相同的哈希,但可能性很小。
于 2016-03-29T11:36:40.253 回答