原标题:《观点 | 一种状况保质期和无状况性的路线图》

以太坊的状况的规划正迅速增长。当时仅存储状况大概是 35 GB,假如加上默克尔证明便是 100 GB 了;而且现在预计每年都要增长这个数字的一半。此外,状况存储也是以太坊经济模型的一个短板:在这个机制中,用户只需付费一次就能够给一致节点施加永久的担负。为了坚持以太坊的可扩展性和可持续性,咱们需求一些解决计划。

有两种路径,而且都已经存在很长时间了:“弱无状况性” 和 “状况保质期”:

  • 状况保质期:从状况中移除近期(比方,去年)无人访问的状况目标,并要求在复生状况目标时供给见证数据(witness)。能够将每个节点都需求存储的状况数据削减到扁平的约 20 ~ 50 GB。

  • 弱无状况性:仅要求区块提议者存储状况,其他节点都可无状况验证区块。在实践中,需求把状况一致方式(从默克尔树)切换到 “Verkle Tree”,以减缩见证数据的规划。

本文提出了一种多阶段的计划,来一起完成这两种计划。因为,能够证明,这会比按顺序完成这两个(无论什么顺序)容易很多。假如不完成 Verkle 树,状况保质期计划下就需求非常大的见证数据来证明一个旧状况;假如不完成状况保质期,切换到 Verkle 树就需求一个一步到位的切换流程(例如 EIP 2584),这简直跟只完成状况保质期一样杂乱。假如合二为一,一起进行,它们就解决了彼此面对的应战:状况保质期计划包括了每年创立一棵新状况树的机制,因而 Verkle 树能够分阶段逐渐建构,而无需一个一步到位的切换流程,而 Verkle 树也解决了见证数据规划的问题。

链接:“状况保质期” 和 “无状况性” 概念的前史

  • 无状况客户端的概念,于 2017 年始发于 ethresear.ch 论坛:https://ethresear.ch/t/the-stateless-client-concept/172(亦可见 EthHub)

  • 状况租金(状况保质期的前身),始发于 2015 年:https://github.com/ethereum/EIPs/issues/35

  • ReGenesis(Alexey Akhunov 的提议,能够认为是 状况保质期 + 前史过期 的一种方式):https://medium.com/@mandrigin/regenesis-explained-97540f457807 

  • Verkle 树:https://notes.ethereum.org/_N1mutVERDKtqGIEYc-Flw

  • (讲演)束缚见证数据的大小:https://www.youtube.com/watch?v=qQpvkxKso2E

  • 一种状况规划办理理论(2021 年 2 月):https://hackmd.io/@vbuterin/state_size_management

  • 最小化复生抵触的状况束缚计划:https://ethresear.ch/t/resurrection-conflict-minimized-state-bounding-take-2/8739

  • 完成无状况性和状况保质期的路径:https://hackmd.io/@vbuterin/state_expiry_paths

回忆:状况保质期如何作业?

这儿所描绘的是此提案的机制。

核心想法是,每个周期(比方以一年为一个周期)都会有一棵状况树,每逢一个周期开端时,就初始化一棵空状况树,一切的状况更新都写到这颗状况树上。在一个周期内,一切的写入都会发生在最新的状况树上(所以新树和老树可能会存储同样的信息,也可能会发生抵触;那么总是以更新的树为优先)。

保持以太坊可扩展性和可持续性的两种方案:“弱无状态性” 和 “状态保质期”

- 注意:我之前曾把这个约长一年的状况保质期周期称为 “epoch”,现在都称为 “period”,以免与信标链的术语相混杂 -

两个关键原则是:

  • 只能修正最新的那棵树(也即对应于当时周期的树)。一切更老的树都不能再修正;更老的树上的目标只能在更新的树上创立副本,而且这些副本会取代更老的副本。

  • 能够预期全节点(包括区块提议者)只会保存最近的两棵树,所以只有最近的两棵树上的目标才能不需求 witness 就能读取。读取更老的目标就需求供给见证数据了。

“见证数据” 便是一个简略的依据,证明某个值(或者某一组值)存在于某棵树的某个方位上,而且验证的一方只需具有树根即可。举个比如,能够制造 一个 witness 来证明账户 0x124f...89ab 的存储空档 123 处在某时的状况下,包括的值为 50;任何人都只需求这棵状况树的根值就能够验证这个依据。

状况保质期产生了一种混合的状况机制:一致节点需求保存最近被人访问和修正过的状况,但能够运用基于见证音讯的无状况客户端方法来验证更老的状况。也便是说,也能够维护一个 “归档节点”,存储一切前史状况树,或者 一个完全无状况的节点,运用见证数据来验证哪怕是最新的状况。不过,gas 消耗量的结构和默许的网络格式,都要环绕 “节点会存储最近的两棵状况树” 来开发。

路线图

迁移将按阶段来完成:

  • 周期 1 硬分叉:需求一个硬分叉来敞开第一个周期(此前的则都算是第 0 个周期)。分叉之后,就会出现两棵状况树:十六叉的帕特里夏树(已冻住,不可再修改)以及一棵新的 Verkle 树(包括一切新的状况 修改/添加,还有旧状况的副本)

    • EIP 草案:https://notes.ethereum.org/@vbuterin/verkle_tree_eip

  • 地址扩张周期:地址从 20 字节扩充到 32 字节,而新地址的格式包括一个 “地址周期” 的概念(曾用名 “地址空间(address space)”)。这样新合约就能够无需供给见证数据而直接写入新的存储空档。这一步什么时候做都能够,只需求在最终状况保质期转型完成之前就能够了,在周期 1 分叉之前或之后都能够。

    • VB 的计划 :https://ethereum-magicians.org/t/increasing-address-size-from-20-to-32-bytes/5485

    • Ipsilon 团队的计划:https://notes.ethereum.org/@ipsilon/address-space-extension-exploration

  • 周期 2 硬分叉:需求一个硬分叉来敞开周期 2,并安排未来周期的时点。周期 0 的十六叉的帕特里夏树将被一棵 Verkle 树替换,客户端仅存储其状况根。从这时开端,周期 0 的状况将需求见证数据来访问。而且,状况保质期计划也算是完整完成了。

    • EIP 草案:https://notes.ethereum.org/@vbuterin/state_expiry_eip

(完)

原文链接:

https://notes.ethereum.org/@vbuterin/verkle_and_state_expiry_proposal

视野开拓

Two featues stad out fom the summay statistics peseted i table. Fist is the pesistece of the cycle i eal housig pices i both advaced ecoomies ad emegig makets, typically fo fou to six yeas. The secod featue that stads out fom table is that the magitudes of the declies i eal housig pices aoud bakig cises fom peak to tough ae ot appeciably diffeet i emegig ad advaced ecoomie. This compaability is quite supisig give that most macoecoomic time seies exhibit dastically geate volatility i emegig makets; theefoe, it meits futhe attetio. Cetaily the fist esults peseted hee fom compaisos of housig pice booms ad busts aoud the dates of bakig cises appeas to povide stog suppot fo the cotetio that bak...-《这次不一样》

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注