当前位置:主页 > 列表页 > 正文

干货 | 过期状态复活方法比较

2021-07-19 22:23 | 出处: EthFans


感谢 @adietrichs 对本文的审阅。


状态保质期(中文译本)是目前解决状态增长问题(中文译本)的推荐方案。


在本文中,我们将状态保质期视为一种会定期让完整状态树失效的机制。本文将讨论如何存储之前的周期(period),因为我们的关注点就是如何复活已经被遗忘的状态 —— 无论 n=0 还是 n=1


以下总结了一些机制提案:


清空


顾名思义,“清空” 就是什么都不剩:过了保质期的状态会立马失效,如果用户需要使用已失效状态中的部分数据,必须提供对应的见证数据(witness)。请注意,若要读取或写入还未在有效状态中初始化的部分,用户 必须 提供证明:要么是一个除外证明(exclusion proof)来表明这部分数据在之前任意时刻都没有初始化,要么是一个具体时间点的证明,然后再提供一个除外证明来表明这部分数据在这个时间点之后没有改变过。



带周期标记的地址(PWA)


清空元数据的主要问题在于,初始化新的状态元素会产生很高的成本。通过让地址带上周期标记,以太坊协议可以创建一种机制来避免在初始化新的状态数据时产生地址冲突。鉴别器会设定账户最少能够存活到哪个时段。目前有两种方法可以实现 PWA:


地址空间扩展(ASE)

太长不看:同时允许传统的 20 个字节的地址和 32 个字节的 ASE 前缀地址存在。在以太坊虚拟机中创建一个环境变量来修改涉及地址的操作码的行为,具体视相关地址是传统地址还是 ASE 地址而定。

(点击此处,查看 Ipsilon 的完整分析。)


免扩展的 PWA

太长不看:找到一个未使用过的 4 个字节的前缀,并禁止在旧规则下使用该前缀创建新的合约/地址。旧合约在传统模式下执行,只可根据旧规则创建新的地址。新类型的合约在 PWA 模式下执行,只可创建新的合约(其中,开头 4 个字节是预先选好的前缀,第 5 - 6 个字节代表当前时段,第 7- 20 个字节照例代表地址。)


周期元数据


状态树元数据

这个想法应该还没有被正式定义(就算有也只是在 @adietrichs 的脑中),但它的大体思路是在状态树中的账户对象处增加一个新的字段来表示创建时间。这样可以解决因除外证明而导致新的存储项初始化成本过高的问题(尤其是在假设合约是为了在每个周期部署新的子合约而编写的情况下),但是不会改善为创建新账户而创建新账户的问题。


外部时段注册表

这个想法也没有被正式定义,大体思路是引入一个新的注册表树来存储状态保质期的元数据。这个注册表不会过期,并且会存储合约的创建时段。另外,它还可以存储其它信息,如存储项的总数量。只要有效存储量等于合约的总存储量,合约时段就可以升级成当前时段。类似方案也可以应用于 EWA 提案,但是需要修改状态树。



原文链接:

https://ethereum-magicians.org/t/types-of-resurrection-meta>

作者: matt

翻译&校对: 闵敏 & 阿剑
作者郑重申明:截至发文时,作者与文中提及项目存在利益关系,特此告知。利益关系包括但不限于下述情况:本人为项目团队成员、本人是项目团队成员的直系亲属或配偶、参与投资该项目、持有该项目发行的股份或通证、参与做空或做多该项目、收取回报进行有偿撰文等。
相关文章