关键要点
-
以太坊是唯一建立可扩展的统一结算和数据可用层的主要协议;
-
Rollups 在利用以太坊安全性的同时扩展计算;
-
所有道路都通向中心化的区块生产、去中心化&无须信任的区块验证和抗审查的终局;
-
诸如区块提议者-构建者分离 (PBS) 和弱无状态性 (weak statelessness) 等创新开启了这种权力 (构建和验证) 的分离,以在不牺牲安全性或去中心化的情况下实现可扩展性;
-
MEV 现在处于核心重要位置,以太坊计划了许多设计来减轻 MEV 的危害,防止 MEV 的中心化化倾向;
-
Danksharding 结合了多个前沿研究途径,从而为以太坊以 Rollup 为中心的路线图提供可扩展的基础层;
-
我预计 danksharding 将在我们有生之年实现。
引言
自从以太坊联合创始人 Vitalik Buterin 表示今天出生的人有 50% -75% 的几率能活到 3000 年,他希望能长生不老,我就一直对合并的时间持怀疑态度。但无论如何,让我们看看展望一下以太坊雄心勃勃的路线图吧。
这不是一篇速成文章。如果你想对以太坊雄心勃勃的路线图有一个广泛而细致的理解——请给我一个小时的时间,我将为你节省几个月的工作。
以太坊的研究有很多值得关注的地方,但所有的一切最终都编织成一个总体目标——在不牺牲去中心化验证的情况下扩展计算。
通过简单的去中心化验证,以太坊维持者非常高的安全性,而 Rollups 继承了以太坊 L1 的安全性。以太坊还提供结算和数据可用性,允许 Rollups 实现扩容。这里的所有研究最终都是为了优化这两个角色,同时使得验证这条链变得比以往任何时候都更容易。
以下是一些缩略语,这些术语会在本文中出现 N 次:
-
DA – 数据可用性 (Data Availability)
-
DAS – 数据可用性抽样 (Data Availability Sampling)
-
PBS – 提议者-构建者分离 (Proposer-builder Separation)
-
PDS – Proto-danksharding
-
DS – Danksharding
-
PoW – 工作量证明 (Proof of Work)
-
PoS – 权益证明 (Proof of Stake)
第 I 部分:通往 Danksharding 之路
希望你现在已经知晓了以太坊已经转向了以 Rollup 为中心的路线图。以太坊将不会再有执行分片 (execution shards),而是将针对需要大量数据的 Rollups 进行优化。这是通过数据分片 (data sharding) 来实现的。
以太坊共识层不会解释分片数据,它的任务是确保数据是可用的。
在文本中,我将假设你熟悉一些基本概念,比如 Rollups、欺诈证明和 ZK 证明,以及 DA (数据可用性) 的重要性。
1)最初的数据分片设计:单独的分片区块提议者
这个小节描述的设计已经废弃了,但它对于我们了解背景信息是有价值的。为了简单起见,我将这种设计称为“分片1.0”。
以太坊 64 个分片的每个分片区块都有单独的区块提议者和委员会,他们通过随机的方式从验证者集中选出来被分配至各个分片链中。他们分别验证自己所在的分片的数据的可用性。起初这不会是 DAS (数据可用性抽样),而是依赖于每个分片的诚实大多数验证者来完全下载该数据。
这种设计带来了不必要的复杂性、更糟糕的用户体验和攻击向量。在分片之间洗牌 (打乱) 验证者是很棘手的。
如果不引入非常紧密的同步假设,就很难保证投票将在单个 slot 内完成。信标区块的提议者需要收集所有独立委员会的投票,而这可能会有延迟。
Danksharding (简称 DS) 则完全不同。验证者执行 DAS (数据可用性抽样) 以确认所有数据都是可用的 (不会再有单独的分片委员会)。专门的区块构建者 (builder) 会负责创建一个大区块,该区块会对信标区块和所有的分片数据一起进行确认。因此,Proto-danksharding (简称 PDS) 对于 DS 保持去中心化是很有必要的 (因为构建这样的大区块是资源密集型的)。
2)数据可用性抽样 (DAS)
Rollups 会发布大量的数据,但是我们不希望给节点带来下载所有这些数据的负担,因为这将意味着需要很高的资源,从而损害网络节点的去中心化。
相反,DAS 允许节点 (甚至轻客户端) 能够在无须下载所有这些数据的情况下,轻松、安全地验证这些数据的可用性。
-
简单的解决方案:只是检查每个区块的一些随机数据块。如果检查合格,节点就对该区块进行签名。但如果节点没有检查到那笔有关你将 ETH 发送给 Sifu 的交易,那么资金就不再安全了。
-
聪明的解决方案:首先对数据进行纠删码。使用 Reed-Solomon 代码扩展该数据。这意味着数据被插值为一个多项式,然后我们在许多额外的地方对该多项式进行求值。这很难懂,所以让我们来分析一下。
对那些忘记数学课的人来说,这是一堂快速的课。(我保证这不会是非常可怕的数学——我不得不看一些 Khan Academy 的视频来写这些部分,但我现在都弄懂了)。
多项式 (Polynomial) 是对任何有限数量的单项式进行求和的表达式。多项式的“次数”(degree) 是指多项式中次数最高的单项式的次数。例如,2ab+b-1 是一个由 2ab、b 和 -1 这三个单项式组成的多项式 ,我们把这三个单项式叫做该多项式的“项”,因此这个多项式就是一个“三项式”;且由于 2ab 这个单项式的次数最高 (次数为 2),故这个三项式是“二次三项式”。你可以从位于该多项式上的任何 d+1 坐标重建任何 d 次多项式。
现在举一个具体的例子。下面我们有四个数据组块(d0 到 d3)。这些数据组块可以映射到给定点的多项式 f (X) 的求值。例如,f (0) = d0。现在你找到了贯穿这些求值的最小次数多项式。由于这是四个组块,我们可以找到三次多项式。然后,我们可以扩展此数据以添加四个沿同一多项式的求值(e0 到 e3)。
记住多项式的关键属性:我们可以从任意四个点重构它,而不仅仅是最初的四个数据块。
回到我们的 DAS。现在我们只需要确保任意 50% (4/8) 纠删码数据是可用的。由此,我们可以重构整个区块。
因此,攻击者必须隐藏区块的 >50% 数据,才能成功地欺骗 DAS 节点,以使节点认为数据是可用的 (但实际上是不可用的)。
在许多成功的随机抽样之后,<50% 的数据是可用的概率非常小。如果我们成功地对纠删码数据采样 30 次,那么 <50% 可用的概率是 2-30。
3)KZG 承诺
好的,所以我们做了一堆随机样本,它们都是可用的。但我们还有另一个问题——数据擦除编码是否正确?否则,可能区块生产者在扩展区块时只是添加了 50% 的垃圾,而我们对废话进行了采样。在这种情况下,我们实际上将无法重建数据。
通常我们只是通过使用 Merkle 根来提交大量数据。这对于证明集合中包含某些数据是有效的。
但是,我们还需要知道所有原始数据和扩展数据都位于同一个低次多项式上。Merkle 根并不能证明这一点。所以如果你使用这个方案,你还需要欺诈证明,以防万一做错了。
好的,所以我们做了一堆随机样本,它们都是可用的。但我们还有另一个问题 —— 数据擦除编码是否正确?否则,可能区块生产者在扩展区块时只是添加了 50% 的垃圾,而我们对废话进行了采样。在这种情况下,我们实际上将无法重建数据。
通常我们只是通过使用 Merkle 根来提交大量数据。这对于证明集合中包含某些数据是有效的。
但是,我们还需要知道所有原始数据和扩展数据都位于同一个低次多项式上。Merkle 根并不能证明这一点。所以如果你使用这个方案,你还需要欺诈证明,以防万一做错了。
回到 KZG 承诺 —— 这是一种多项式承诺方案。
承诺方案只是一种可证明承诺某些值的加密方式。最好的比喻是把一封信放在一个锁着的盒子里,然后交给别人。这封信一旦进去就无法更改,但可以用钥匙打开并证明。你提交的新就是承诺,钥匙就是证明。
在我们的例子中,我们将所有原始数据和扩展数据映射到 X,Y 网格上,然后找到穿过它们的最小次数多项式(这个过程称为拉格朗日插值)。这个多项式就是证明者将承诺的:
以下是关键点:
-
我们有一个「多项式」f(X)
-
证明者对多项式做出「承诺」C (f)
-
这依赖于具有可信设置的椭圆曲线密码学。有关其工作原理的更多详细信息,请参阅 Bartek 的一个很棒的帖子
-
对于该多项式的任何「评估」y = f(z),证明者可以计算「证明」π(f,z)
-
给定承诺 C(f)、证明 π(f,z)、任何位置 z 以及多项式在 z 处的评估 y,验证者可以确认确实 f (z) = y
-
解释:证明者将这些片段提供给任何验证者,然后验证者可以确认某个点的评估(其中评估代表基础数据)正确地位于承诺的多项式上
-
这证明原始数据被正确扩展,因为所有评估都位于相同的多项式上
-
请注意,验证者不需要多项式 f (X)
-
重要属性 - 这具有 O(1) 承诺大小、O(1) 证明大小和 O(1) 验证时间。即使对于证明者,承诺和证明生成也仅在 O(d) 上进行扩展,其中 d 是多项式的次数
-
解释:即使 n(X 中的值的数量)增加(即,随着数据集随着更大的分片 blob 而增加)- 承诺和证明保持不变的大小,并且验证需要持续的努力
-
承诺 C(f) 和证明 π(f,z) 都只是配对友好曲线上的一个椭圆曲线元素(这将使用 BL12-381)。在这种情况下,它们每个只有 48 个字节(非常小)
-
因此,证明者提交大量原始数据和扩展数据(表示多项式的多次评估)仍然只有 48 个字节,证明也只有 48 个字节
-
TLDR–这是高度可扩展的
然后,KZG 根(多项式承诺)类似于 Merkle 根(这是一个向量承诺):
原始数据是在 f (0) 到 f(3) 位置处计算的多项式 f (X),然后我们通过计算 f (4) 到 f(7) 处的多项式来扩展它。所有点 f(0) 到 f(7) 都保证在同一个多项式上。
底线:DAS 允许我们检查纠删码数据是否可用。KZG 的承诺向我们证明了原始数据得到了适当的扩展并承诺了所有这些。
干得好,这就是今天的代数知识。
4) KZG 承诺与欺诈证明
既然我们了解了 KZG 的工作原理,请退后一步比较这两种方法。
KZG 的缺点 —— 它不是后量子安全的,它需要一个可信的设置。这些并不令人担忧。STARK 提供了一种后量子替代方案,而可信设置(开放参与)只需要一个诚实的参与者。
KZG 的优势 - 比欺诈证明设置的延迟更低(尽管如前所述,GASPER 无论如何都不会具有快速确定性),并且它确保了正确的擦除编码,而不会引入欺诈证明中固有的同步和诚实的少数假设。
然而,考虑到以太坊仍然会重新引入这些假设来进行区块重建,所以你实际上并没有删除它们。DA 层总是需要为最初提供块的场景进行规划,但随后节点需要相互通信以将其重新组合在一起。这种重建需要两个假设:
-
您有足够的节点(轻节点或全节点)对数据进行采样,这样它们就足以将它们重新组合在一起。这是一个相当弱且不可避免的诚实少数假设,因此不是一个大问题。
-
重新引入同步假设 —— 节点需要能够在一段时间内进行通信才能将其重新组合在一起。
以太坊验证器在 PDS 中完全下载分片 blob,并且使用 DS,他们将只执行 DAS(下载分配的行和列)。Celestia 将要求验证者下载整个区块。
请注意,无论哪种情况,我们都需要同步假设来进行重建。如果该区块仅部分可用,则完整节点必须与其他节点通信以将其重新组合在一起。
如果 Celestia 想要从要求验证者下载全部数据转变为只执行 DAS(尽管目前尚未计划这种转变),那么 KZG 的延迟优势就会显现出来。然后,他们还需要实施 KZG 承诺 —— 等待欺诈证明将意味着显着增加区块间隔,并且验证者投票支持错误编码区块的风险会非常高。
我推荐以下内容以更深入地探索 KZG 承诺的工作方式:
-
椭圆曲线密码学(相对容易理解)入门
-
探索椭圆曲线配对–Vitalik
-
KZG 多项式承诺–Dankrad
-
受信任的设置如何工作?–Vitalik
5) 协议内提议者 - 构建者分离
今天的共识节点(矿工)和合并后的(验证者)扮演两个角色。他们构建实际的区块,然后将其提议给其他验证它的共识节点。矿工通过在前一个区块的基础上进行「投票」,在合并之后,验证者将直接对区块的有效或无效进行投票。
PBS 将它们分开 —— 它明确地创建了一个新的协议内构建者角色。专业的构建者将把区块放在一起并竞标提议者(验证者)来选择他们的区块。这与 MEV 的中心化力量作斗争。
回想一下 Vitalik 的《终局之战》一文 —— 所有道路都通向中心化区块生产,具有去信任和去中心化的验证。PBS 对此进行了编纂。我们需要一个诚实的构建者来为网络提供服务以提高活跃度和抗审查能力(需要两个来实现有效的市场),但验证者集需要诚实的多数。PBS 使提议者角色尽可能简单地支持验证者去中心化。
构建者收到优先费用小费以及他们可以提取的任何 MEV。在一个有效的市场中,有竞争力的构建者将竞标到他们可以从区块中提取的全部价值(减去他们的摊销成本,如强大的硬件等)。所有价值都渗透到去中心化的验证器集 —— 正是我们想要的。
确切的 PBS 实现仍在讨论中,但 two-slot PBS 可能如下所示:
-
构建者使用他们的出价承诺区块头
-
信标区块提议者选择获胜的区块头和出价。即使构建者未能生产出 body,投标人也将无条件获得中标
-
证明人委员会确认获胜标头
-
构建者公布获胜的 body
-
独立的证明人委员会选举获胜的机构(如果获胜的构建者不同意,则投票决定它缺席)
提议者是使用标准 RANDAO 机制从验证者集中选择的。然后我们使用承诺 - 显示(commit-reveal)方案,在委员会确认区块头之前,不会显示完整的区块 body。
commit-reveal 更有效(发送大约数百个完整的区块 body 可能会压倒 p2 p 层的带宽),并且它还可以防止 MEV 窃取。如果构建者要提交他们的完整区块,另一个构建者可以看到它,找出那个策略,合并它,并快速发布一个更好的区块。此外,成熟的提议者可以检测使用的 MEV 策略并复制它,而无需补偿构建者。如果这种 MEV 窃取成为平衡,它将激励合并构建者和提议者,因此我们使用 commit-reveal 来避免这种情况。
在提议者选出获胜区块头后,委员会确认并固定在分叉选择规则中。然后,获胜的建造者发布他们获胜的完整「构建者区块」body。如果及时发布,下届委员会将作证。如果他们未能及时发布,他们仍然向提议者支付全部出价(并失去所有 MEV 和费用)。这种无条件的支付消除了提议者信任构建者的需要。
这种「双时隙(two-slot)」设计的缺点是延迟。合并后的区块将是固定的 12 秒,所以如果我们不想引入任何新的假设,这里我们需要 24 秒来获得完整的区块时间(两个 12 秒的时隙)。每个时隙 8 秒(16 秒的出块时间)似乎是一个安全的折衷方案,尽管研究正在进行中。
6) 抗审查名单 (crList)
不幸的是,PBS 赋予了构建者更高的审查交易能力。也许构建者只是不喜欢你,所以他们忽略了你的交易。也许他们的工作非常出色,以至于所有其他构建者都放弃了,或者他们只是因为他们真的不喜欢你而对区块出价过高。
crLists 对这种能力进行了检查。确切的实现又是一个开放的设计空间,但「混合 PBS」似乎是最受欢迎的。提议者指定他们在内存池中看到的所有合格交易的列表,构建者将被强制包含它们(除非区块已满):
-
提议者发布一个 crList 和 crList 摘要,其中包括所有符合条件的交易
-
构建者创建一个提议的区块 body,然后提交一个竞标,其中包括 crList 摘要的哈希,证明他们已经看到它
-
提议者接受中标构建者的出价和区块头(他们还没有看到 body)
-
构建者发布他们的区块并包含他们已包含来自 crList 的所有交易或该区块已满的证明。否则分叉选择规则不会接受该块
-
证明者检查已发布的 body 的有效性
这里仍有重要问题需要解决。例如,这里的主导经济策略是让提议者提交一个空列表。只要出价最高,即使是审查构建者也能赢得拍卖。有一些想法可以解决这个问题和其他问题,但只是强调这里的设计并不是一成不变的。
7) 二维 KZG 方案
我们看到了 KZG 承诺如何让我们承诺数据并证明它被正确扩展。但是,我简化了以太坊的实际操作。它不会在单个 KZG 承诺中承诺所有数据 —— 单个区块将使用许多 KZG 承诺。
我们已经有一个专门的构建者,那么为什么不让他们创造一个巨大的 KZG 承诺呢?问题是这需要一个强大的超级节点来重建。我们可以接受初始构建的超级节点要求,但我们需要避免这里的重建假设。我们需要资源较少的实体来处理重建,并将其拆分为许多 KZG 承诺使这变得可行。考虑到手头的数据量,重建甚至可能相当普遍,或者是本设计中的基本情况假设。
为了使重建更容易,每个区块将包含在 m 个 KZG 承诺中编码的 m 个分片 blob。天真地这样做会导致大量的采样 —— 你会在每个分片 blob 上执行 DAS 以知道它都是可用的(m*k 个样本,其中 k 是每个 blob 的样本数)。
相反,以太坊将使用 2 D KZG 方案。我们再次使用 Reed-Solomon 代码将 m 承诺扩展到 2 m 承诺:
我们通过扩展与 0-255 位于相同多项式上的额外 KZG 承诺(此处为 256-511)使其成为 2 D 方案。现在我们只需对上表进行 DAS,以确保所有分片的数据可用性。
≥75% 的数据可用的 2 D 采样要求(与之前的 50% 相比)意味着我们做的固定样本数量要多一些。在我提到简单一维方案中 DAS 的 30 个样本之前,但这将需要 75 个样本来确保重建可用区块的相同概率几率。
分片 1.0(具有一维 KZG 承诺方案)只需要 30 个样本,但如果您想检查 1920 个样本的完整 DA,则需要对 64 个分片进行采样。每个样本为 512 B,因此这需要:
(512 B x 64 分片 x 30 个样本)/16 秒 = 60 KB/s 带宽
实际上,验证者只是在没有单独检查所有分片的情况下被洗牌。
现在,使用 2 D KZG 承诺方案的组合区块使得检查完整 DA 变得微不足道。它只需要单个统一区块的 75 个样本:
(512 B x 1 块 x 75 个样本)/16 秒 = 2.5 KB/s 带宽
8) Danksharding
PBS 最初的设计目的是削弱 MEV 在验证器集上的集中力。然而,Dankrad 最近利用了这种设计,意识到它解锁了一个更好的分片结构 ——DS。
DS 利用专门的构建者来创建信标链执行区块和分片的更紧密集成。我们现在有一个构建者一起创建整个区块,一个提议者和一个委员会。如果没有 PBS,DS 将是不可行的 —— 常规验证者无法处理充满 Rollup 数据 blob 的区块的巨大带宽:
分片 1.0 包括 64 个独立的委员会和提议者,因此每个分片都可能单独不可用。这里更紧密的集成使我们能够一次性确保 DA。数据仍然在幕后「分片」,但从实际的角度来看,danksharding 开始感觉更像是大区块,这很棒。
9) Danksharding–诚实的多数验证
验证者证明数据可用如下:
这依赖于诚实的大多数验证者 —— 作为一个单独的验证者,我的列和行可用并不足以让我在统计上确信整个区块可用。这取决于诚实的大多数人说它是。去中心化验证很重要。
请注意,这与我们之前讨论的 75 个随机样本不同。私人随机抽样是资源匮乏的个人能够轻松检查可用性的方式(例如,我可以运行 DAS 轻节点并知道该区块可用)。但是,验证者将继续使用行和列方法来检查可用性和引导区块重建。
10) Danksharding -- 重构
只要单个行或列的 50% 可用,那么采样验证器就可以轻松地对其进行完全重建。当他们重建行 / 列中丢失的任何区块时,他们将这些区块重新分配到正交线。这有助于其他验证器根据需要从相交的行和列中重建任何丢失的区块。
这里重建可用区块的安全假设是:
-
足够多的节点来执行样本请求,以便它们共同拥有足够的数据来重建区块
-
广播各自区块的节点之间的同步假设
那么,多少节点就足够了?粗略估计大约有 64,000 个个体实例(到目前为止,目前已超过 380,000 个)。这也是一个非常悲观的计算,它假设由同一验证器运行的节点中没有交叉(这与节点被限制为 32 个 ETH 实例的情况相去甚远)。
如果您对超过 2 行和列进行采样,则由于交叉,您可以集体检索它们的几率会增加。这开始以二次方的方式扩展 —— 如果验证者运行 10 或 100 个验证者,则 64,000 个可能会减少几个数量级。
如果在线验证器的数量开始变得异常低,可以设置 DS 以自动减少分片数据 blob 计数。因此,安全假设将降低到安全水平。
11) Danksharding–私人随机抽样的恶意多数安全
我们看到 DS 验证依赖于诚实的多数来证明区块。作为个人,我无法通过仅下载几行和几列来向自己证明一个区块可用。但是,私人随机抽样可以在不信任任何人的情况下给我这种保证。如前所述,这是节点查验这 75 个随机样本的地方。
DS 最初不会包含私有随机抽样,因为这在网络方面是一个非常难以解决的问题(PSA:也许他们实际上可以在这里使用你的帮助!)。
请注意,「私有」很重要,因为如果攻击者对您进行了去匿名化,他们就能够欺骗少量的采样节点。他们可以只返回您请求的确切区块并保留其余部分。因此,您不会仅从自己的抽样中知道所有数据都是可用的。
12) Danksharding–关键要点
除了是一个甜美的名字,DS 也非常令人兴奋。它最终实现了以太坊统一结算和 DA 层的愿景。Beacon 区块和分片的这种紧密耦合本质上是假装没有被分片。
事实上,让我们定义为什么它甚至被认为是「分片」。「分片」的唯一残余就是验证者不负责下载所有数据。而已。
所以如果你现在质疑这是否真的仍然是分片,你并没有疯。这种区别就是为什么 PDS(我们将很快介绍)不被视为「分片」的原因(即使它的名称中有「分片」,是的,我知道这很令人困惑)。PDS 要求每个验证者完全下载所有分片 blob,以证明它们的可用性。然后 DS 引入了抽样,因此各个验证者只下载其中的一部分。
幸运的是,最小分片意味着比分片 1.0 更简单的设计(交付速度如此之快,对吧?)。简化来讲,包括:
-
与分片 1.0 规范相比,DS 规范中的代码可能少了数百行(客户端少了数千行)
-
没有分片委员会基础设施,委员会只需要在主链上投票
-
没有跟踪单独的分片 blob 确认,现在它们都在主链中得到确认,或者它们没有
这样做的一个很好的结果是数据的合并收费市场。由不同的提议者制作的具有不同区块的分片 1.0 会分散这一点。
分片委员会的取消也加强了反贿赂。DS 验证人每个 epoch 对整个区块进行一次投票,因此数据立即得到整个验证人集的 1/32 的确认(每个 epoch 32 个 slot)。分片 1.0 验证者也在每个 epoch 投票一次,但每个分片都有自己的委员会被改组。因此,每个分片仅由验证器集的 1/2048 确认(1/32 分为 64 个分片)。
如前所述,与 2D KZG 承诺方案的组合区块也使 DAS 更加高效。分片 1.0 需要 60 KB/s 的带宽来检查所有分片的完整 DA。DS 只需要 2.5 KB/s。
DS 还存在另一个令人兴奋的可能性 ——ZK-rollups 和 L1 以太坊执行之间的同步调用。来自分片 blob 的事务可以立即确认并写入 L1,因为一切都在同一个信标链区块中生成。由于单独的分片确认,分片 1.0 将消除这种可能性。这允许一个令人兴奋的设计空间,这对于共享流动性(例如 dAMM)之类的东西可能非常有价值。
模块化基础层可以优雅地扩展 —— 更多的去中心化会带来更多的扩展。这与我们今天看到的根本不同。向 DA 层添加更多节点可以让您安全地增加数据吞吐量(即,有更多的空间让 rollup 存在于顶部)。
区块链的可扩展性仍然存在限制,但我们可以将数量级提高到比我们今天看到的任何东西都要高。安全且可扩展的基础层允许执行在它们之上激增。随着时间的推移,数据存储和带宽的改进也将允许更高的数据吞吐量。
超越此处设想的 DA 吞吐量肯定是有可能的,但很难说这个最大值最终会在哪里。没有明确的红线,而是一些假设会开始让人感到不舒服的区域:
-
数据存储 —— 这与 DA 与数据可检索性有关。共识层的作用不是无限期地保证数据的可检索性。它的作用是让它在足够长的时间内可用,以便任何关心下载它的人都可以,满足我们的安全假设。然后它会被转储到任何地方 —— 这很舒服,因为历史是 N 信任假设中的 1,而且我们实际上并没有在宏伟的计划中谈论那么多数据。随着吞吐量增加几个数量级,这可能会在几年后进入令人不安的领域。
-
验证者 ——DAS 需要足够多的节点来共同重建区块。否则,攻击者可能会等待,只响应他们收到的查询。如果提供的这些查询不足以重建区块,那么攻击者可以保留其余的,我们就不走运了。为了安全地增加吞吐量,我们需要添加更多的 DAS 节点或增加它们的数据带宽需求。这不是这里讨论的吞吐量的问题。但是,如果吞吐量比这种设计进一步增加几个数量级,这可能会让人感到不舒服。
请注意,构建者不是瓶颈。您需要为 32 MB 的数据快速生成 KZG 证明,因此需要 GPU 或相当强大的 CPU 以及至少 2.5 GBit/s 的带宽。无论如何,这是一个专门的角色,对他们来说这是一个可以忽略不计的业务成本。
13) Proto-danksharding (EIP-4844)
DS 很棒,但我们必须要有耐心。PDS 旨在帮助我们渡过难关 —— 它在加快的时间线(针对上海硬分叉)上对 DS 实施必要的前向兼容步骤,以在此期间提供数量级的扩展。但是,它实际上还没有实现数据分片(即验证者需要单独下载所有数据)。
今天的 Rollups 使用 L1「calldata」进行存储,它永远存在于链上。然而,Rollup 只需要一段合理的时间段内的 DA,这样任何有兴趣的人都有足够的时间下载它。
EIP-4844 引入了新的支持 blob 的事务格式,Rollup 将用于未来的数据存储。Blob 携带大量数据(~125 KB),它们比类似数量的 calldata 便宜得多。然后在一个月后从节点中删除数据 blob,这会降低存储需求。这是足够的时间来满足我们的 DA 安全假设。
当前的以太坊区块通常平均约为 90 KB(调用数据约为其中的 10 KB)。PDS 为 blob 解锁了更多的 DA 带宽(目标~1 MB 和最大~2 MB),因为它们会在一个月后被修剪。它们不会成为节点上的永久拖累。
一个 blob 是一个由 4096 个字段元素组成的向量,每个字段元素为 32 个字节。PDS 允许每个区块最多 16 个,而 DS 将增加到 256 个。
PDS DA 带宽 = 4096 x 32 x 16 = 每区块 2 MiB,目标为 1 MiB
DS DA 带宽 = 4096 x 32 x 256 = 每区块 32 MiB,目标为 16 MiB
每一步都有数量级的扩展。PDS 仍然需要共识节点来完全下载数据,所以比较保守。DS 在验证器之间分配存储和传播数据的负载。
以下是 EIP-4844 在通往 DS 的道路上引入的一些好东西:
-
携带数据 blob 的事务格式
-
KZG 对 blob 的承诺
-
DS 所需的所有执行层逻辑
-
DS 所需的所有执行 / 共识交叉验证逻辑
-
BeaconBlock 验证和 DAS blob 之间的层分离
-
DS 所需的大部分 BeaconBlock 逻辑
-
blob 的自调整独立 gas 价格(具有指数定价规则的多维 EIP-1559)
风险提示:本站所提供的资讯不代表任何投资暗示。投资有风险,入市须谨慎。