主要观点
以太坊是唯一一个旨在建立可扩展、并将结算和数据可 用性层统一的主要协议。
Rollups 在利用以太坊安全性的同时扩展了计算能力。
所有的道路最终都通向中心化生成区块、去中心化和无需信任的区块验证以及抗审查。
诸如出块者-区块打包者分离和弱无状态等创新,形成了(创建和验证)权力分离,以实现在不牺牲安全性或去中心化情况下的可扩展性。
MEV(矿工攫取的价值) 现在处于核心重要位置 —— 许多设计都是为了减轻其危害和防止其中心化倾向。
Danksharding 结合了多种前沿研究途径,为以太坊以 rollup 为中心的路线图提供所需的可扩展基础层。
我确实期待 Danksharding 在我们的有生之年得以实现。
引言
自从 Vitalik 说今天出生的人有 50-75% 的机会活到 3000 年,而他希望能长生不老,我就对合并的时机持怀疑态度。但管他呢,让我们找点乐子,向前看看以太坊雄心勃勃的路线图吧。
这不是一篇速成文。如果你想对以太坊雄心勃勃的路线图有一个广泛而细微的了解,请给我一个小时的时间,我将为你节省几个月的工作量。
以太坊的研究有很多值得关注的地方,但所有的一切最终都会编织成一个总目标 —— 不牺牲去中心化验证的可扩展计算。
尽管在区块链中字母"C "(译者注:“中心化”单词的首字母)是可怕的,但 Vitalik 仍在其著名的《Endgame》一文中承认,需要一些中心化来进行扩展。我们只是需要通过去中心化和无需信任的验证来控制这种中心化的权力,没有任何妥协可言。
特定的行为主体将为 L1 和基于 L1 的东西构建区块。以太坊通过简单的去中心化验证保持了令人难以置信的安全性,而 rollups 则从 L1 继承其安全性。以太坊同时提供了结算和数据可用性,以允许 rollup 扩展。这篇文章中的所有研究最终都是为了优化结算和数据可用性这两个角色,同时使得完全验证一条区块链比以往更容易。
第一部分:通往 Danksharding 之路
希望你听说过以太坊已经转向以 rollup 为中心的路线图,它不再有执行分片,而是将为需要大量数据的 rollup 进行优化。这将通过以太坊计划的数据分片或 Celestia 计划的大区块来实现。
共识层不解释分片数据,它只有一个任务,即确保数据可用性(Data Availability)。
接下来我将假设你熟悉一些基本概念,如 rollup、欺诈证明、零知识证明,以及假设你明白为什么数据可用性这么重要。
第160次以太坊ACDE会议:确定纳入EIP-4844、6780、6475、1153:4月29日消息,根据Christine Kim对第160次以太坊执行层核心开发者会议(ACDE)进行的总结,本次会议主要讨论在下次坎昆(Cancun)升级中,需要纳入哪些代码修改。
除了此次升级的主角EIP-4844(降低L2手续费) 外,开发者还同意将以下EIPs纳入升级:
·EIP-6780(修改SELFDESTRUCT操作码的功能,主要是为未来应用Verkle树做准备);
·EIP-6475(为可选值引入新的简单序列化类型,以提供更佳的可读性和紧凑的序列化);
·EIP-1153(引入瞬态存储操作码)。
另外,还有部分EIPs提案尚未被正式接受纳入升级(EIP-6913、6493、4788、2537、5656)以及部分被确定不考虑纳入本次升级(Big EOF和EVMMAX)。
在对围绕坎昆EIPs进行讨论后,下一次会议议程将是关于EIP-4844的进展。
此前消息,以太坊核心开发人员会议中表示,计划对区块链的共识层进行代码修改,为下一次坎昆升级(Cancun-Deneb)做准备,预计将于今年晚些时候进行。
以太坊的Cancun-Deneb升级中预期的最重大变化将是EIP-4844,也称为“ proto-danksharding ”。 EIP-4844旨在通过以太坊节点实现链下数据的临时存储和检索,以满足区块链应用程序的数据和存储需求。如果成功激活,EIP-4844有望降低第2层rollup解决方案(包括Optimism和Arbitrum)的交易成本。[2023/4/30 14:35:10]
最初的数据分片设计 (分片1.0)—— 独立的出块者
该部分描述的设计已经不复存在,但仍是有价值的内容。为了简单起见,将其称为 "分片1.0"。
64 个分片区块中的每一个都有各自独立的出块者和委员会,它们在验证者集中被轮换分配到每个分片区块,他们各自验证自己的分片数据是可用的,所以最初这依赖于每个分片验证者集中的诚实多数完整地下载数据,并不是现在使用的数据可用性抽样。
最初的设计带来了不必要的复杂性、更糟糕的用户体验和攻击方法,且在分片之间重排(轮换)验证者是非常麻烦的。
如果不引入非常紧密的同步假设,就很难保证投票将在单个时间槽内完成。信标区块(Beacon Block)的出块者需要收集所有独立委员会的投票,而这可能会有延迟。
有别于分片 1.0,Danksharding 则完全不同。验证者进行数据可用性抽样以确认所有的数据都是可用的(不再有单独的分片委员会)—— 一个专用的创建者用信标区块创建一个大区块,并将所有分片数据一起确认。因此,出块者-区块打包者分离(PBS:Proposer-builder Separation)是 Danksharding 保持去中心化的必要条件(一起构建大区块会占用大量资源)。
以太坊信标链验证者数量突破47万,总质押量超1590万枚ETH:11月19日消息,据以太坊官方网站最新数据显示,以太坊信标链验证者总数量已突破 47 万,截止目前为 470,045 个。此外,以太坊总质押量达到 15,924,942 枚 ETH。按照当前 ETH 价格计算,质押 ETH 总价值约为 193 亿美元。[2022/11/19 13:23:32]
数据可用性采样
Rollups 会发布大量的数据,但我们不希望它给节点带来下载所有数据的负担。高资源需求会损害去中心化。
然而,数据可用性采样允许节点(甚至轻客户端)在无需要下载所有这些数据的情况下,轻松、安全地验证它们都是可用的。
朴素的解决方案:从区块中检查出一堆随机的数据块 。如果这些块都没有什么问题,就可以签出。但是,如果你错过了将你所有的 ETH 交给 Sifu 的那笔交易呢?如此资金就不再是安全的了。
聪明的解决方案:先对数据进行纠删编码,使用 Reed-Solomon 代码扩展数据,即数据被插值为多项式,然后在其它的一些位置求值。这很拗口,所以让我们来解读一下。
首先上一堂简单的数学课:
多项式是任何有限数量的
形式的项的求和表达式,其阶是最高的指数,例如
。是一个三阶的多项式。你可以基于任意包含 d +1 个坐标的多项式来重构任意的 d 阶多项式。
举个具体的例子:我们有四个数据块(
),这些数据块可以被映射到多项式 f(X) 在给定点的值上,例如 f(0) =
,现在你找到了贯穿这些值的最小阶多项式,也就是说基于这四个块我们可以得到三阶多项式。然后,我们可以通过再增加位于同一个多项式上的另外四个值(
以太坊未确认交易为181,048笔:金色财经消息,据OKLink数据显示,以太坊未确认交易181,048笔,当前全网算力为579.16TH/s,全网难度为7.74P,当前持币地址为60,887,274个,同比增加116,868个,24h链上交易量为1,897,028.22ETH,当前平均出块时间为13s。[2021/8/17 22:19:56]
)来扩展该数据。
多项式的关键属性是我们可以通过任意四个点重构它,但不局限于我们最初使用的四个数据块。
现在让我们回到数据可用性抽样 —— 我们只需要确定被纠删编码的数据有任意的 50%(4/8)是可用的,如此即可重构整个区块。
正因如此,攻击者必须隐藏超过 50% 的区块才能成功地数据可用性抽样节点,使其认为数据是可用的,但实际上并不是。
在多次成功的随机采样之后,数据可用性 <50% 的概率是非常小的。如果我们成功采样被纠删编码的数据 30 次,可用性<50% 的概率是
KZG 承诺
现在我们已经做了一堆数据可用性随机采样,且这些数据都是可用的。但还有一个问题 —— 数据是否被正确的纠删编码?不然有可能区块生成者在扩展区块时只是添加了 50% 的无用数据,那我们的采样就是毫无意义的。在这种情况下,我们无法重构数据。
通常,我们只是通过使用 Merkle 根来承诺大量的数据,这对于证明在一个集合内包含一些数据来说是非常高效的。
但我们还需要知道的是,所有的原始数据和扩展数据都位于同一个低阶多项式上,而 Merkle 根不能证明这一点。所以如果使用 Merkle 根方案,就还需要欺诈证明,以防出现错误的验证。
开发人员正从两个方向来处理这个问题:
Celestia 走的是欺诈证明路线。该路线需要有人观察,如果区块被错误地纠删编码,这些人会提交一个欺诈证明来提醒大家。这需要标准的诚实少数假设和同步假设(即,除了有人给我发送欺诈证明,还需要假设我是连接到网络的,并将在一个有限的时间内收到这个欺诈证明)。
以太坊 和 Polygon Avail 正在走一条新路线 —— KZG 承诺(也叫做 Kate 承诺),它移除了欺诈证明安全性对诚实少数和同步假设的需要。
当然也存在其它的解决方案,但它们并没有被积极的使用。例如,可以使用零知识证明,但目前在计算上零知识证明是不切实际的,然而它有望在未来几年内取得极大的改善,所以以太坊很可能会在未来转向 STARKs,因为 KZG 承诺不具备抗量子计算攻击的能力。
BM评论以太坊抢先交易机器人事件:这就是以太坊不适合DeFi的原因:Paradigm研究合伙人Dan Robinson和Georgios Konstantopoulos发布文章《以太坊是黑暗森林》。根据分析,有多个机器人在扫描以太坊Mempool,寻找从其他用户获利的方法。有人询问Dan是否能收回意外发送到配对合约的Uniswap流动性代币(价值约12000美元)。他最初的想法是这些代币将被永远锁定,但后来意识到,如果这些代币仍在那里,任何人都可以去恢复。任何人调用Uniswap核心合约上的函数时,该合约会测量自己的流动性代币余额并将其烧掉,将提取的代币提供给调用者指定的地址。
他们实施营救行动时遭遇抢先交易机器人:get交易确实被纳入,但是出现UniswapV2: INSUFFICIENT_LIQUIDITY_BURNED错误,意味着流动性代币没了。结果是其get交易进入Mempool后几秒钟内,就有人执行调用并扫荡走资金。
EOS创始人BM评论称,这就是为何以太坊不适合DeFi。EOS上不存在文章所描述的问题,因为它速度太快,无法抢先交易,而且生产者是已知的,并且可以承担责任。以太坊上发生的事情太可怕了。(Cryptoticker)[2020/8/30]
回到 KZG 承诺,它们是一种多项式承诺方案。
承诺方案只是一种可证明承诺某些值的加密方式。最好的比喻是把一封信放在一个上了锁的盒子里,然后把它递给别人。这封信一旦放进去就不会发生改变,但可以用钥匙打开并证明确实有这样的一封信。你对这封信作出承诺,而钥匙就是证明。
在我们的案例中,我们将所有的原始数据和扩展数据映射到一个 X,Y 网格上,然后找到贯穿它们的最小阶多项式(这个过程被称为 Lagrange 插值)。该多项式即是证明者要承诺的:
以下是主要要点:
我们有一个 "多项式"?f(X)
证明者对该多项式做出 "承诺"?C(f)?
这依赖于具有可信设置的椭圆曲线密码学
对于这个多项式的任意 "值"?y = f(z),证明者可以计算出一个 "证明"?π(f,z)
给出承诺 C(f),证明 π(f,z),任意位置 z,以及多项式在 z 处的值 y,验证者可以证实的确 f(z)=y
也就是说,证明者将这些零散的信息交给任意验证者,该验证者可以证实某个点的值(代表源数据)正确地位于被承诺的多项式上
这就证明了原始数据被正确地扩展了,因为所有的值都位于同一个多项式上
注意,验证者不需要多项式 f(X)
动态 | 以太坊开发者提议于 1 月 6 日通过硬分叉移除难度炸弹:在以太坊开发者会议中,有人提议在区块高度 920 万左右进行硬分叉以移除难度炸弹,预计发生在 1 月 6 日前后。根据开发者在讨论组中的数据来看,以太坊的区块生成时间在移除难度炸弹之前将一直保持增长,到 1 月 6 日左右可能会达到 25 至 30 秒时间,根据 Etherscan 显示,以太坊历史上也就在 2017 年 10 月前后出现过长时间 30 秒的出块时间。另外,以太坊的斯坦布尔升级计划于 12 月 7 日进行,早于此次提案的硬分叉一个月时间。[2019/12/2]
重要属性 —— 有 O(1) 的承诺大小,O(1)的证明大小 ,以及O(1)的验证时间 。即使对证明者来说,承诺和证明生成也只是 O(d) 的(其中 d 是多项式的阶)。
也就是说,即使 n(X 中值的数量)增加(即数据集随着分片 Blob 的增大而增大),承诺和证明的大小也保持不变,验证需要的工作量也是恒定的
承诺 C(f) 和证明 π(f,z) 都只是配对友好曲线(BL12-381)上的一个椭圆曲线元素。在这种情况下,它们各自只有 48 字节(真的很小)
因此,证明者承诺的大量原始和扩展数据(表示为多项式上的许多值)仍然只有 48 字节,而证明也将只有 48 字节
总而言之,是高度可扩展
KZG 根(一个多项式承诺)将类似于 Merkle 根(一个向量承诺):
原始数据是多项式 f(X) 在 f(0) 到 f(3) 位置的值,然后我们通过在 f(4) 到 f(7) 位置计算出多项式的值以扩展它。所有的点 f(0) 到 f(7) 都保证是在同一个多项式上。
总之,数据可用性抽样允许我们检查被纠删编码的数据是可用的。KZG 承诺向我们证明了原始数据被正确地扩展,并承诺所有多项式上的数据。
好了,今天的代数就讲到这里。
KZG 承诺 vs. 欺诈证明
我们已经了解了 KZG 的工作原理,现在来比较一下这两种方法。
KZG 的缺点是它不是抗量子的,且需要一个可信设置。这些并不令人担忧,因为 STARKs 提供了一个抗量子的替代方案,而可信设置(是开放参与的)只需要一个诚实的参与者。
KZG 相较欺诈证明场景的优势是其延迟更低(GASPER 无论如何不会有快速最终确定性),而且它在没有引入欺诈证明中固有的同步假设和诚实少数假设的情况下,确保了可以适当的进行纠删编码。
然而,考虑到以太坊仍然会在区块重构中再次引入这些假设,所以实际上并没有消除这些假设带来的影响。数据可用性层,总是需要为区块最初可用但随后因节点需要相互通信而将区块重新构建起来的情况进行规划。这种重构需要两个假设:
有足够多的(轻或全)节点对数据进行采样,以至于它们共同拥有足够多的数据可以拼凑起来。这是一个相当弱的、不可避免的诚实少数假设,所以不是什么大问题。?
重新引入同步假设,使节点能在一定时间内进行通信,以便将这些数据重新组合起来。
以太坊验证者在原始的 Danksharding方案中(Proto)需要完整地下载分片二进制数据块(Blob: binary large object),而在 Danksharding 中它们只会进行数据可用性抽样(下载指定的行和列),Celestia 则要求验证者下载整个区块。
需要注意的是,在任何一种情况下重构都需要同步假设。如果区块仅部分可用,则全节点必须与其它节点进行通信以将区块拼凑出来。
如果 Celestia 想从要求验证者下载全部的数据转变为只执行数据可用性抽样(尽管这种转变目前还没有计划好),那么 KZG 的延迟优势就会显现出来。然后他们也需要实现 KZG 承诺,因为等待欺诈证明意味着将显著增加区块间隔,并且意味着验证者投票给编码错误区块的危险性将特别高。
为深入探讨 KZG 承诺的工作原理,我推荐下以下阅读内容:(见文尾链接)
(相对容易理解的)椭圆曲线密码学入门
探索椭圆曲线配对—— Vitalik?
KZG 多项式承诺—— Dankrad?
可信设置是如何工作的——Vitalik?
协议内出块者-区块打包者分离
出块者-区块打包者分离 (PBS: Proposer-Builder Separation)
今天的共识节点(矿工)和合并后的共识节点(验证者)担任两个角色:他们构建区块,然后将区块提交给将验证区块的共识节点。矿工在前一个区块上构建以进行 "投票",合并之后,验证者将直接投票决定区块是否有效。
PBS 将这个过程拆分,它明确地创建了一个新的协议内区块打包者角色。特定的区块打包者把区块放在一起,并投标出块者(验证者)选择他们的区块。这对抗了 MEV 的中心化力量。
回顾 Vitalik 的《Endgame》—— 所有的道路都通向基于无需信任和去中心化验证的中心化区块生成。PBS 对此进行了编码。我们需要一个诚实的区块打包者来为网络的活性和抗审查服务(这两点都是为了保持一个有效的市场),验证者集需要诚实多数假设。PBS 使出块者的角色尽可能简单,以支持验证者的去中心化。
区块打包者获得优先的费用小费,并且可以提取任何 MEV。在一个有效的市场中,有竞争力的区块打包者会出价到他们能从区块中提取的全部价值(其中会减去他们的摊销成本,如强大的硬件等)。所有的这些价值都会渗透到去中心化的验证者集 —— 这正是我们想要的。
确切的 PBS 实现仍在讨论中,但双槽 PBS 可能看起来像这样:
区块打包者对区块头和他的出价一起进行承诺
信标区块出块者选择获胜的区块头和投标,并将无条件得到中标费,即使区块打包者未能生成区块体。
证人委员会确认获胜的区块头
区块打包者披露获胜的区块体
不同的认证人委员会选出获胜的区块体(如果中标的区块打包者不出示区块体,则投票证明该区块体不存在)
使用标准 RANDAO 机制从验证人集中选出出块者,然后使用一个可以确保在区块头被委员会确认之前不会披露完整区块体的承诺-披露方案。
承诺-披露方案效率更高(发送数百个完整的区块体可能会超出 p2p 层的带宽),且还可以防止 MEV 盗取。如果区块打包者提交它们的完整区块,则另一个区块打包者可以观察到并找出策略与之合并,进而迅速发布一个更好的区块。此外复杂的出块者可以检查并复制使用的 MEV 策略,而无需补偿对区块打包者。如果这种 MEV 盗取行为成为一种均衡,那么它将激励区块打包者和出块者合并。这就是为什么我们要用承诺-披露方案来避免这种情况。
在出块者选择了获胜的区块头后,委员会对其进行确认,并将其固定在在分岔选择规则中。然后获胜的区块打包者会公布它们获胜了的完整的 "区块打包者区块" 体。如若公布即及时,下一届委员会将会对该 "区块打包者区块" 体进行认证;如若公布不及时,区块打包者仍需向出块者支付全额标价(并失去了所有的 MEV 和费用)。这种无条件的支付不再需要出块者信任区块打包者。
延时是这种 "双槽" 设计的缺点。合并后的区块将有一个固定的 12 秒,所以如果我们在这里不想引入任何新的假设,那么我就需要一个 24 秒的完整区块时间(两个 12 秒的插槽)。每槽 8 秒(16 秒区块时间)似乎是一个安全的妥协,不过研究正在进行中。
抗审查清单(crList)
不幸的是,PBS 增强了区块打包者审查交易的能力。也许区块打包者只是不喜欢你,所以他们忽略你的交易;也许他们的工作能力很强,以至于其它打包者都放弃工作了;也可能他们会对区块漫天要价,只是因为真的很不喜欢你。
抗审查清单对以上这些权力进行检查。具体的实现方式仍然是一个开放的设计空间,不过 "混合 PBS "似乎是最受欢迎的,即出块者指定一个它们在存储池中看到的所有符合条件的交易列表,区块打包者将强制包含它们(除非区块已满):
出块者发布一个抗审查清单和包含所有符合条件的交易的抗审查清单摘要
区块打包者创建一个被提议了的区块体,然后提交投标,其中包括抗审查清单摘要的哈希,以证明他们已看到该提议区块体
出块者接受获胜区块打包者的出价和区块头(此时出块者还没有看到区块体)
区块打包者发布他们的区块和一个可以证明他们已经包含了抗审查清单中所有交易或区块已经满了的证明,否则该区块不会被分岔选择规则接受
认证者检查所发布的区块体的有效性
这里仍然有一些重要的问题需要理清楚,例如基于这种情况的主流经济策略是出块者提交一个空名单,这样一来,只要谁出价最高谁就能获胜,即使是审查创建者也能赢得竞标。有一些想法可以解决这个问题和其它一些问题,但在这里只是强调设计并不是一成不变的。
二维 KZG 方案
我们已经知道了 KZG 承诺是如何让我们承诺数据并证明它是被正确地扩展的,然而我简化了以太坊实际要做的事情:一个区块将使用许多 KZG 承诺,因为无法在一个单一的 KZG 承诺中承诺所有数据。
我们已经有专用的区块打包者,那么为什么不能直接让它们创建一个巨大的 KZG 承诺呢?因为这需要一个强大的超级节点来进行重构。我们可以接受初始构建阶段的超级节点需求,但我们需要避免重构时的假设。我们需要更低的资源实体处理重构,而将这些重构拆分成许多 KZG 承诺是使之可行的。重构甚至可能是相当常见的,或者说在该给定数据量的设计中,重构就是该设计中的基本情况假设。
为了使重构更容易,每个区块将包括编码到 m 个 KZG 承诺中的 m 个分片 blob 。虽然这样做会导致大量的采样,即你会在每个分片 blob 上执行数据可用性采样,以知道它都是可用的(在 m*k 样本中,k 是每个 blob 的样本数)。
但以太坊将使用二维 KZG 方案,即再次使用 Reed-Solomon 编码将 m 个承诺扩展到 2m 个承诺:
我们通过在和0-255同样的多项式之上再添加额外的KZG承诺(这里是256-511)来使其成为一个二维方案。现在我们只需在上面的表格上中执行数据可用性抽样,以确保所有跨分片数据可用。
二维抽样要求 ≥75% 的数据是可用的(不是之前的 50%),这意味着需要更多的固定抽样。在前文中有提到,在一个简单的一维方案中需要 30 个数据可用性抽样的样本,但在二维方案中将需要 75 个样本才能确保重构一个可用区块的概率相同。
分片 1.0(有一个一维KZG 承诺方案)只需要 30 个样本,但如果你想检查所有 1920 个样本的全部数据可用性,你需要对 64 个分片进行采样,每个样本是 512 B,所以这就需要。
(512 B x 64 个分片 x 30 个样本) / 16 秒 = 60 KB/s 带宽
在现实中,验证者是被轮换的,不会逐一检查所有的分片。现在,与二维 KZG 承诺方案相结合的区块使检查全部数据可用性变得轻而易举,只需要一个统一区块的 75 个采样样本:
(512 B x 1 个区块 x 75 个样本) / 16 秒 = 2.5 KB/s 宽带
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。