干货 | 过期状态复活方法比较
摘要: 如何复活已经被遗忘的状态?
感谢 @adietrichs 对本文的审阅。
状态保质期=是目前解决状态增长问题的推荐方案。
在本文中,我们将状态保质期视为一种会定期让完整状态树失效的机制。本文将讨论如何存储之前的周期(period),因为我们的关注点就是如何复活已经被遗忘的状态 —— 无论 n=0
还是 n=1
。
以下总结了一些机制提案:
清空
顾名思义,“清空” 就是什么都不剩:过了保质期的状态会立马失效,如果用户需要使用已失效状态中的部分数据,必须提供对应的见证数据(witness)。请注意,若要读取或写入还未在有效状态中初始化的部分,用户 必须 提供证明:要么是一个除外证明(exclusion proof)来表明这部分数据在之前任意时刻都没有初始化,要么是一个具体时间点的证明,然后再提供一个除外证明来表明这部分数据在这个时间点之后没有改变过。
利
-
非常简单
-
除外证明的大小会随时段数量呈线性增长,让初始化状态数据的成本变得异常高 -
逃避了地址冲突问题
带周期标记的地址(PWA)
地址空间扩展(ASE)
-
Vitalik 的文章 -
Ipsilon 的文章
-
新的状态无需证明即可初始化。 -
可扩展以保存其它元数据。 -
解决地址冲突问题。
-
需要对 EVM 进行大量修改。 -
需要创建两种不同的 EVM 环境,分为传统模式和扩展模式。 -
转换映射将无限增长(与传统环境中使用的长地址数量呈线性关系),而且无法用过期机制来抛弃似乎是可以有过期机制的,只不过(抛弃数据后)要承担一些地址冲突的风险。 -
用户体验不佳,因为用户可以将资产存储在三种类型的地址上(短地址、长地址、压缩地址)。 -
并非所有 Solidity 编译的合约的掩码地址都有 160 位,因此一些合约的地址可能会存在高阶脏位(dirty upper bit)。
免扩展的 PWA
-
Vitalik 的文章
-
新的状态无需证明即可初始化。 -
对 EVM 的修改相对较少。 -
不需要转换表,用户只需要考虑一种地址。 -
不会破坏现有工具(不过它们显示的可能是异或地址(xor'd address)而非原像?)
-
发生地址冲突的概率较高,不再有反事实合约。 -
不是一个很有吸引力的解决方案,可能会让地址扩展变得越来越难。
周期元数据
状态树元数据
-
如果是新合约,无需证明即可初始化新的存储项。 -
非常简单。 -
可扩展以保存其它元数据。 -
不会因为外部映射而导致状态无限增长。 -
不会破环现有工具。
-
逃避了地址冲突问题。 -
创建新账户的成本很高,需要除外证明来表明该账户自周期 0 以来就不存在。
外部时段注册表
-
新的状态无需证明即可初始化。 -
可扩展以保存其它元数据。 -
不需要转换表,用户只需要考虑一种地址。 -
不会破坏现有工具。
-
新的状态树结构。 -
无限增长(与使用中的地址数量呈线性关系)。 -
逃避了地址冲突问题。
(完)
(文内有许多超链接,可点击左下 ”阅读原文“ 从 EthFans 网站上获取)
原文链接:
https://ethereum-magicians.org/t/types-of-resurrection-metadata-in-state-expiry/6607
作者: matt
链得得仅提供相关信息展示,不构成任何投资建议
评论(0)
Oh! no
您是否确认要删除该条评论吗?