4

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

 3 years ago
source link: https://www.jinse.com/blockchain/1051564.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

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

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

我们没有在做什么

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

我们没有在解决 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」有两个不同的涵义:

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

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

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

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

被移出关键路径的内容

Binary Trie

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

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

代码默克尔化

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

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

作者 :pipermerriam


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK