首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >upgradeable.sol是如何工作的?

upgradeable.sol是如何工作的?
EN

Ethereum用户
提问于 2017-07-18 20:10:32
回答 1查看 345关注 0票数 2

DELEGATECALL升级机制最简单的标准是https://gist.github.com/Arachnid/4ca9da48d51e23e5cfe0f0e14dd6318f

我不完全明白它是如何工作的,尤其是以下几个方面:

  1. “永久”存储将生存升级应该去Dispatcher,而不是实施/升级合同,这是正确的吗?
  2. 可升级契约应该有自己的存储空间,还是应该像库一样没有存储/状态?
  3. 为什么委托契约不能改变它的存储布局?还是只适用于Dispatcher呢?
  4. 还有其他的解决方案,比如委托给一个专门的永久存储契约(https://blog.colony.io/writing-upgradeable-contracts-in-solidity-6743f0eecc88),这些解决方案的优缺点是什么?
EN

回答 1

Ethereum用户

回答已采纳

发布于 2017-07-18 21:39:24

  1. 是。由于delegatecall的语义,当通过dispatcher协议调用可升级的契约时,dispatcher状态将被存储并在dispatcher契约上进行更改。
  2. 不,将使用dispatcher的存储。这并不意味着您不能在可升级的合同上定义变量。这意味着它们将存储在dispatcher存储空间中。
  3. 由于存储被升级合同的下一个版本重用,因此必须保持兼容性。这方面有一些规则:

在升级合同时,必须遵守对允许更改存储变量集的限制。可以添加新变量,但不能删除或替换现有变量。更改变量名是可以接受的。数组中的结构可能不会被修改,但是映射中的结构可以按照上面描述的相同规则进行修改。

  1. 你所指的尼克约翰逊的Upgradable合同是非常通用的。这意味着可以使用许多不同的存储布局。这是一个很高的抽象级别,初学者可能很难使用。当定义用于访问数据存储的显式api时,蚁群方法定义了一个严格的接口。它不那么抽象,也更容易使用,但它限制了您的可能性。
票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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