每当我修改合同并再次部署合同时,随着新合同部署到新地址,现有合同中的数据将完全丢失。
例如,我有一份注册合同。当我第一次部署时,我忘记了检索用户名。因此,我不得不修改合同并重新部署它。在这种情况下,我丢失了注册到我的应用程序的用户的所有注册细节。
现在我的问题是:是否有一种方法可以将存储在旧合同中的所有数据检索到我的新合同中?
发布于 2019-12-19 08:33:42
当然,有几种方法可以做到这一点,所有这些方法都有各自的优点和不足:
DELEGATECALL操作码将几乎所有的请求委托给执行契约,因此在代理契约的范围内执行执行操作码,从而使用代理合同的存储。当您需要升级契约逻辑时,您可以部署新版本的实现契约,并告诉代理将请求委托给新地址。只要新旧实现契约都使用代理的存储,并且代理地址没有改变,数据就不会丢失。另一个好处是,从用户的角度看,新合同地址也不会改变。这个模式在开放齐柏林飞艇中有一个实现如果您需要更多关于这些选项的详细信息,请告诉我。
https://ethereum.stackexchange.com/questions/78381
复制相似问题