一文纵览无状态以太坊路线图新变化

关键路径:通过区块见证实现无状态验证者,通过状态保质期来抑制状态增长。

原文标题:《通告 | 一份新的无状态以太坊路线图》

自上一版无状态以太坊的全面 「路线图」 发布以来已经过去了一段时间,现在很多东西都发生了改变。似乎又到了需要「全都写下来」的时候了。

我们没有在做什么

我们没有在解决无状态挖矿的问题。

我们没有在解决 DSA (动态状态访问)问题,也不准备出于执行的目的为事务附加见证数据(witness)。

关键路径

很难确定我们的目标到底是什么。但是我认为,只要我们着眼于需求,自然会出现一个目标梯度。

通过区块见证实现无状态验证者

我们 希望 / 需要 验证者无需保存完整的状态就能验证区块。一种提议是在协议中要求为区块附加区块见证,以便客户端使用区块见证数据来验证执行区块得到的状态根。

为此,我们需要:

A:大大缩小见证(就当前的十六进制帕特里夏树而言,见证数据大小最高可达 100 MB)

B:让验证者可以连同区块一起获得可靠的见证

我们使用 Verkle Trie 来解决需求 A ,将证明开支降至恒定大小(从理论上来说,根据当前 1250 万的 gas 上限来估算,证明大小的上限约为 800k,平均约为 200k)。另请参见 「 为以太坊状态应用 verkle trie 的提议 」。还值得一提的是,统一 verkle trie 需要修改 SELFDESTRUCT 操作码的行为,或完全删除该操作码。

我们通过见证消息成为协议运行的一部分(很可能是将其作为区块头中的访问列表)来解决需求 B,以便收到该证明的人确认它是对应区块的正确证明。关于生成并通过 gossip 广播见证的责任归属尚未确定。

延伸阅读:《为什么无状态性对于 ETH 2.0 来说如此重要?》

通过状态保质期(State Expiry)来抑制状态增长

区块提议者(或矿工)依然需要生成区块。我们不建议解决无状态区块挖矿的问题,因为这会将我们的目标变成减轻日益增长的状态维护负担。

我们的目标是对总体状态规模施以经济限制。我们计划通过「状态保质期」来实现该目标。

详情请参阅:《Resurrection-conflict-minimized state bounding, take 2 - #17 by vbuterin。》

大致上讲,所谓的状态保质期,就是让状态在一段时间(大约 12 个月)后「失去活性」。失活状态不再由协议管理。任何与失活状态的交互都需要附带一个证明,让失活状态重新恢复活性。该方案不会将任何复杂的「租赁」 机制引入 EVM,但它实际上还是强制实现了「状态租赁」。其结果就是为总体状态规模设置了严格的上限。

次关键路径

通过「门户客户端」实现无状态客户端架构

延伸阅读:《Complete revamp of the 「Stateless Ethereum」roadmap - #2 by dankrad》

当前的 DevP2P 以太坊协议不能很好地支持无状态客户端。即使为支持无状态客户端而修改协议,这也并非易事。也就是说,仅依靠「关键路径」,我们就可以构建出适用于 Eth1+Eth2 合并基础设施的客户端,但是这些客户端对于大多数为了使用 JSON-RPC API 而使用客户端人来说没什么用。

另一项正在开展的计划是构建支持广泛部署超轻量级 「门户客户端」所必需的网络基础设施。所谓的 「门户」 ,就是指客户端可以查看网络和相关数据,但是不必通过任何有意义的方式参与协议。

「门户客户端」将参与专为满足以下需求而设计的专用型点对点网络:

1. 按需检索任意状态。

State Network DHT - Development Update #2 - #5 by pipermerriam

2. 按需检索任意区块链历史。

Alexandria - HackMD (已经过时,但是从概念上讲具有代表性)

3. 参与交易 gossip 广播,但是无需访问状态。

Scalable Transaction Gossip - #3 by pipermerriam

4. 参与区块 gossip 广播,但是无需满足 DevP2P 以太坊协议的隐形要求。

任何想要吸引 JSON-RPC API 用户的 「无状态客户端」都会参与这类网络。我们希望现有客户端会利用这类网络来让自己变得更加轻量级。

这不是实现 Eth1 + Eth2 合并这一主要目标的关键路径,但它有助于将无状态客户端扩展至除验证者以外的用例。

Regenesis (或许不会清理状态)

过去,「Regenesis」有两个不同的涵义:

使用一个新的创世块来重新启动区块链,并就创世状态达成共识。

让状态「失去活性」,必须提供证明来让状态「恢复活性」。

活性 / 失活机制现已归类为 「状态有效期」方案。

使用新的创世块来重启区块链有很多好处。其中,最主要的一点是,将所有客户端从历史分叉规则所带来的隐形需求中解放出来,让客户端变得更加简单。这也可以帮助节点缩短获得完整状态副本所需的同步时间。

被移出关键路径的内容

Binary Trie

原本是用来减少见证大小的主要机制,现已被 Verkle Trie 替代。

参考阅读:《EIP-3102: Binary trie structure》

代码默克尔化

原本是用来减少见证大小的次要机制,现已被 Verkle Trie 替代。

参考阅读:《EIP-2926: Chunk-Based Code Merkleization》

作者 :pipermerriam

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。