主页 > imtoken下载安装 > 以太坊扩容的终极方案——Danksharding与MEV设计(二)
以太坊扩容的终极方案——Danksharding与MEV设计(二)
概述
与 Sharding1.0 相比,我们看到 Danksharding (DS) 有了很大的进步,而 Proto-danksharding 是一个中间解决方案。 与完整的 Danksharding 相比,Proto-dankshardinf (PDS) 的功能特性有所减少。 同时,PDS中的节点仍然需要下载所有的数据,所以不需要进行数据采样,不是真正的分片方案(分片方案中,所有节点不需要下载所有数据以供验证)。 如果 PDS 将一个块中存储的数据量增加一个数量级,那么 DS 会在此基础上再增加一个数量级。
产品数据表 (EIP-4884)
PDS是实施DS过程中必要的前向兼容过渡方案,致力于在上海硬分叉期间提供一个数量级的扩容方案。 Rollups 将数据上传到以太坊 L1,以太坊可以理解为 Rollups 的一个轻节点,Rollups 使用 L1 调用数据(calldata)永久存储在链上。 对于数据采样,Rollups 只需要保证数据在一定时间内可见,这样其他人就有足够的时间下载。 因此,EIP-4844引入了一种不同于调用数据的交易格式,一种带有数据分片进行存储的交易。 数据分片可以承载125KB的数据,同等数据量比调用数据便宜很多。 这些数据碎片通常会在一个月后删除,从而减少存储需求。 而这一个月的时间,足以让验证者完成数据采样中的安全假设。
目前以太坊的区块带宽为90KB(其中调用数据占10KB),PDS机制下的碎片化数据将在一个月后清零,因此区块带宽得到了极大的提升。 目标值为1MB,最大值为2MB(EIP1559机制下区块大小灵活,最大值为目标值的2倍)。 1MB是怎么计算的? 数据分片的字段元素为4096个,每个字段元素为32字节(bytes)。 PD中的每个区块最多有16个区块碎片,而DS中的数量是256(我们在上一篇文章中介绍过)。 因此,PDS中最大数据可见带宽=4096*32*16=2MB,目标值为2/2=1MB。 DS中最大数据可见带宽=4096*32*256=32MB,目标值为32/16=16MB。 所以如果 PDS 将一个块中存储的数据量增加一个数量级,那么 DS 会在此基础上再增加一个数量级。 PDS需要节点下载所有数据,所以本质上是不分片的,而DS是将数据分片分发给不同的验证节点。
更新这些新的数据格式不会对执行端提出额外的要求,EVM 只看附在这些数据片段上的承诺。 在EIP4844中,执行层也向前兼容DS中的执行层,所以在从PDS到DS的升级过程中,我们只需要改变共识层即可。 PDS中的所有数据都需要下载,所以不需要对信标链的区块体进行数据样本采样和编码处理,数据内容以“sidecar”的形式传输到不同的区块。
另外,我们使用KZG承诺来验证数据是否正确纠删码,KZG本身是48字节。 EIP4844 使用其散列版本的 32 字节格式(0x01 字节 + KZG 中 SHA256 散列的最后 31 个字节)。 这主要是为了 EVM 兼容性(32 字节)和后来将 KZG 转换为其他技术(32 字节)。
多维EIP1559
在Sharding1.0中,由于分片数据是单独确认的,数据市场相对去中心化,DS中已经解决了这个问题。 所有数据分片都有自己的利率市场,包括浮动 gas 成本和限制。 比如某段时间内以太坊上有NFT售卖活动,只会影响rollups的交易结算手续费,Rollups的数据费用不会发生变化(这里我觉得应该是上传的费用L1数据、存储和带宽等Cost,L1上的Rollups交易结算费用是独立的概念)。
在以太坊DS设计中,我们看到数据分片的费用是根据EIP1559调整的浮动费率。 在这个市场中,计算和数据可见的拍卖同时进行,大大提高了资源定价的效率。 前面我们提到过,其实Rollups本身就采用了一些方法对数据进行压缩,降低了带宽存储成本,也大大降低了上传成本。 例如,与 Optimistic rollups 相比,Zk-rollups 具有更高的压缩效率,因此成本会大大降低; 同时,我们下面也会介绍,当以太坊扩展其数据可见性协议(DA)时,发行证明的摊销销售成本将在整体成本中占据较大份额(尤其是ZK-rollups),因此这部分成本不受 L1 上经济活动的影响。 当然,该领域的一些有趣的设计方向值得期待,比如将目前的燃料和碎片定价机制从线性 EIP1559 改为指数 EIP1559,并优化相应的数值。
成本和状态管理
历史数据通常存储在硬盘上,因为一般的历史数据不需要快速获取。 存储是基于 1/N 诚实假设,只要有一个诚实的组织存储相应的数据,就可以获得数据。
状态一般是指账户余额、智能合约等,全节点需要状态信息来验证相应的交易。 而使用RAM存储,虽然数据传输速度快,但是成本高,而对于硬盘存储,数据传输速度很慢,所以我们通常使用中间方案SSD(闪存),速度更快,可以存储一定量的数据。 通常,对于一个高吞吐量的区块链,它的状态增长是惊人的,所以如果个人用户无法承载这些数据,那么网络的去中心化实现就非常困难,这就是著名的 State Bloat 问题,这就是为什么以太坊要限制自己,比如通过区块大小、gas limit 等来限制状态增长,但这给可扩展性带来了瓶颈。
呼叫数据成本降低计划 (EIP-4488)
与PDS相比,我们有一个更快的应急方案EIP-4488。 不过他和最终的DS方案还是有一些出入的,所以在过渡到DS的过程中还是会有比较大的变化。 与PDS相比,EIP-4488的实现会非常快,只需改动几行代码。 EIP-4488有两个主要部分
1) 调用数据的成本从 16 fuel/byte 下降到 3 fuel/byte
2)每个区块增加1MB的限制,每笔交易增加300bytes(总限制为1.4MB)
EIP-4488的实施会增加以太坊的平均数据容量,最坏情况下的数据容量会下降。 这主要是因为区块有 1MB 的限制。 如果没有限制,调用数据的成本就会下降。 单个区块的容量将达到18MB,大大超过了以太坊现在可以处理的90KB的容量。
当然,与PDS相比,EIP4488还是有一定的不足。 EIP-4488 仍然使用调用数据,而不是 PDS 下新的数据交易结构。 同时,数据碎片将在一个月后删除。 在EIP-4488下,历史数据仍然会快速增长(更高的平均数据容量),所以我们需要同样的删除机制来减缓历史数据的增长,即EIP4444(但删除机制要到1年后才会启动) .
将历史数据绑定到执行客户端 - EIP-4444
EIP4444允许客户端对超过1年的历史数据进行剪枝,包括区块头、区块体、回执等,因此客户端也会在P2P层停止对这些数据的相应服务,降低用户对硬盘存储的需求. 同时,在EIP4488实施后,这个方案显得尤为重要,通过清除过期历史数据来限制历史数据的增长。 当然,这个方案的具体实施时间还没有确定。
同样,历史数据通常只需要全量同步,不需要验证,所以我们会引入一种轻量级的同步策略,可以减少网络带宽的占用。 同时,只有通过JSON-RPC显式提交请求,或者用户提交同步请求时,才会恢复历史数据。 所以在EIP-4444下,我们需要更好的解决方案。 **
**
在这里,客户端将无法像现在这样使用 devp2p 进行“完全同步”——他们将“检查点同步”作为创世块的弱主观检查点。 我们需要弱主观检查点同步主要是考虑远程攻击的可能性。 这里的假设是客户端不会从一个无效或者过期的弱主观检查点开始同步,这个检查点必须在我们开始构建历史数据的时间段内(一年以内),否则P2P层将无法提供所需数据。
恢复历史数据
当然,这些数据构造出来后(EIP-4444 1年后,PDS 1个月后),这些数据去哪了? 需要减少以太坊的工作量。 存储历史数据的任务不应该由以太坊主链来承担。 历史数据的缺失会影响一些应用,但不会影响以太坊链。 因此,我们希望借助一些第三方,比如志愿者,比如一些区块浏览器(Etherscan.io)、数据索引协议The Graph、RPC服务网络Portal Network、特定应用(Rollups)等,来实现历史数据存储。
弱无状态
上文提到,以太坊的State Bloat问题主要是由于以太坊自身对状态增长的限制,对TPS和可扩展性造成影响。 状态限制主要是由于验证者的能力和资源限制。
全节点需要状态信息才能验证相应的数据。 因此,以太坊考虑使用“弱无状态”,即验证节点在验证区块时不再需要状态信息,因此对于验证者来说,只要给他一个完整且独立的区块,他就可以进行验证。 对于 PBS 下的区块创建者来说,在创建区块时需要状态信息,这成功地将验证节点的部分工作转移给中心化的、高资源消耗的区块创建者。 因此,节点在验证一个区块时,不需要整个状态信息,而只需要受交易影响的状态信息,创建者需要将受影响的状态信息和准确性证明添加到区块中。 因此,在整个过程中,创建者将见证数据信息和准确性证明添加到区块后,验证者接收区块以太坊历史数据,执行,验证。
因此,对于验证者而言,无需通过SSD存储大量的状态数据,这也是以太坊可扩展性瓶颈的关键所在; 同时需要下载一些见证数据和证明,增加了带宽需求; 虽然验证者仍然需要执行交易,但目前对可扩展性没有影响。 对于以太坊协议,State bloat 得到了缓解,block limit/gas limit 提高了 3 倍。 所以当数据可见层(DA)扩展时,我们发现提交证明的成本在所有 Rollups(尤其是 ZK-rollups)的成本中所占比例更大。
维克尔树
以太坊目前使用 Merkle 树来表示状态,但是 Merkle 证明对于上面的弱无状态实现来说太大了。 所以以太坊选择了一种更有效的证明方式,沃克树。
上文提到,默克尔树是数据可见性的有效证明。 它可用于证明包含某些交易而无需下载所有数据。 当然,它必须与欺诈证明一起使用。 例如,当你从区块头信息中得到Merkle根H₁₂₃₄₅₆₇₈时,轻节点需要在Merkle证明中输入H₁₂、H₃、H₅₆₇₈,以证明H₄包含在内,从而得到这些哈希值从完整节点开始,并沿着树结构将它们散列在一起。 所以如果得到的数据确实是Merkle根H₁₂₃₄₅₆₇₈,那么我们就证明了交易包含H₄。
理想的树形也应该更浅更宽。 而一棵更深更窄的树,当你沿着树散列时,你需要很多散列值。 但是对于更浅更宽的树,还需要在每个节点中添加更多的子节点,使其更宽。 但是你需要接收这些子节点的哈希,然后将它们哈希在一起,最终得到根数据。 这样的默克证明非常庞大。 所以我们采用更高效的vector promise。 无需获取所有这些子哈希的验证本质上通过减少需要获取的信息来实现有效的证明大小。 Volcor 树类似于 Merkle 树,但它通过向量证明而不是简单的哈希来提交子节点。 虽然每个节点都有很多孩子,但我不需要所有孩子来验证证明。 它是固定大小的样张,与宽度无关。
事实上,KZG 承诺也可以用于矢量承诺。 以太坊最初打算采用它们,他们目前采用类似的方案,Pedersen 承诺会解决这个问题。 这个承诺会基于椭圆曲线,可以承诺256个值(Merkle树下的哈希本质上是向量承诺,但只能承诺2个值)。
最后要提的一点是,因为实际的考虑,证明者需要计算证明,如果树太宽,难度会更大,所以虽然深度为1的树,但尽可能宽的树是极对验证者来说很困难。 紧凑的有效证明,但我们不这样做。
状态过期
虽然弱无状态在一定程度上缓解了State Bloat的局限性,但状态仍然存在。 状态增长问题依然严重。 所以我们引入了状态过期机制,一段时间(1-2年)的不活跃状态会从区块创建者那里移除。 和历史数据类似,如果你需要复活这些过期的状态,你可以出示这些证据,重新激活他。 这个长期也是基于 1/N 诚实假设。 只要有人拥有所有数据,你就可以从他们那里得到。 当然,弱无状态在一定程度上削弱了对状态过期的即时需求,但从长远来看,状态过期对于许多高吞吐量的L2来说是一个更有用的工具,尤其是当状态的数量级增长拖累高位时表现。 当
MEV设计
之前我们发过一篇MEV专题,有兴趣的朋友可以看看。 这里我们主要关注以太坊社区探索的一些解决方案,主要包括降低MEV的危害(single-slot confirmation, single-secret leader election),民主化MEV(推广MEV,MEV平滑,PBS)。 合并后,我们将保证MEV的价值合理、方便地分配给不同的验证者,保证不会出现验证节点中心化的问题(遇到智能搜索者,验证节点会聚在一起与之竞争,这就是为什么我们在POW,Oligopolgy oligopolistic market)看到几大矿池的合作。 合并后,验证者的 Staking 奖励将减弱(逐年下降,低于通胀),MEV 将成为他们最重要的收入来源。
在 POW 中,MEV 搜索者将不同的交易捆绑在一起,提交出价,通过 Flashbots 提交给矿池。 矿池运营商聚合整个区块并将区块头交给矿工。 矿工使用 POW 根据分叉选择规则对其进行验证和分配权重。 合并之后,矿池的作用就会消失,很多既得利益者会失望。 所以最近以太坊的暴跌,很大一部分也是来自矿工的抛售。 MEV 值将以更公平的方式分配给不同的验证节点。 矿池的角色将由更具体的创建者来填补。 与一些矿工和对冲基金相比,很多验证节点不知道如何获取MEV值,所以会存在验证节点中心化的问题,延伸到验证节点和搜索者之间的合作或竞争,所以我们需要引入一些设计,保证MEV能够公平的分配给优质节点。
推广MEV
由于在合并的时候协议内的PBS机制还没有,Flashbot提出了一个过渡方案来推动MEV(MEV Boost),或者你可以理解为协议外的PBS机制(Out of protocol Proposer Builder Separation ).
验证节点的执行端会默认接收内存池中的交易,然后打包发送给共识端,广播到网络中。 但是对于大多数验证节点来说,他们不知道如何获取 MEV 值。 所以Flashbot提供了一个方便MEV的解决方案。 推动MEV将嵌入共识端,将出块过程外包,同时仍享有执行端的使用权。
MEV搜索者负责发现各种套利机会,套利、三明治攻击、强平等,并通过竞价提交交易。 创建者聚合所有交易包,以及一些私有交易,将它们放入块中,然后通过中继节点(促进 MEV)将块头传递给验证器。 Flashbot通过推广MEV起到了中继节点的作用,而造物主也打算更加去中心化(在POW中,造物者的作用,矿工池,寡头垄断了整个市场,所以合并之后,通过各种设计,去避免这些问题,上面提到的审查交易清单是解决方案之一。
同时,在推进 MEV 的设计中,验证节点需要信任中继节点,共识节点需要获得区块头。 签名后,将显示区块体。 中继节点负责向提议者表明区块体是有效的。 所以验证者不需要直接信任创建者。 因此,设计除了明确不同角色之间的分工,还希望解决创建者的中心化和提议者对创建者的信任问题。
社区驱动的 MEV 平滑
PBS 机制还催生了另一个有趣的方向,社区驱动的 MEV 平滑。 这和我们之前介绍的Osmosis的共同提案本质上是一样的。 获得 MEV 能力将使验证节点更加中心化,MEV 的分发也将更加中心化。 每个区块 MEV 奖励的高度可变性将允许许多验证者随着时间的推移平滑你的奖励(这在 POW 矿池中看到)。
默认设置是块提议者只从创建者那里收到钱。 MEV 平滑将这些费用分配给更多的验证节点。 验证者委员会参与审查提议的区块并验证它是出价最高的区块。 如果没有问题,区块通过,收益将分配给验证节点委员会和验证节点。
这也解决了带外贿赂的另一个问题。 这些提议者经常收到激励性贿赂以提交非团体最高出价区块,并且费用对利益相关者隐藏。 POW 也存在这个问题,矿池和对冲基金通过私下交易来获取价值。 在 POS 中,creator 和 proposer 是两个角色(Builder 和 Proposer,而在 POW 中,creator 和 proposer 是矿池)。 在OSMOSIS的设计中以太坊历史数据,我们还引入了联合提案(Joint Proposal),每个验证者都可以在自己的投票中添加交易,下一个提议者可以将这些交易添加到区块中,当然会有重叠交易,但还是可以添加的,至少需要添加一个来自另一个验证器的交易。 这可以防止区块提议者垄断并允许所有验证者参与。 这里我们将区块生产者和验证者分开,我们希望在 POS 中实现更多这样的功能划分。 目前我们看到了小规模的分类,比如矿工作为矿池(POW),比如矿工作为验证节点(ETH2.0),还有矿工通过Flashbot将不同的交易加入bundle等等,我们是希望未来能实现更多的分工服务。
单时隙确认
确认时间非常重要。 如果不能快速确认,会造成很多问题,比如UX,比如跨链通信,比如MEV的Reorg问题。 以太坊合并后,大量的验证节点参与了每个区块的验证,而在POW中,矿工在没有验证的情况下,在同一高度参与竞争。 这将使重组问题变得不可能。 但这并不是真正意义上的确认。 如果最后一个区块有MEV值,那么就可以引诱节点重组链,为自己的利益而战。 所以单槽确认解决了这个问题。 如果最后一个区块需要回滚,至少需要1/3的验证节点参与,其质押仓位也会被削减。 当然,这个设计在以太坊的路线图中还比较遥远,还是一个开放的设计领域。
在目前的以太坊设计中,每个时隙需要1/32的节点集参与认证,(38000*1/32=12000)。 而如果我们想将这些验证扩展到具有 BLS 签名集的整个节点集,并在单个时间段内完成,那么我们需要将大量选票压缩到单个验证中。
单独的秘密领导人选举 (SSLE)
信标链的节点列表和leader选举列表是公开的,所以如果有人要给你去匿名化,匹配对应的IP地址,那就有问题了。 对于一些智能验证节点来说,他们有自己匿名的方式,但是对于一些小的验证节点,他们会遇到DDOS,这个问题很容易出现。 比如你是第N个区块的异议者,那么第N+1个区块的提议者在知道你的IP地址后可以非常便宜的DDOS,所以你不能出块,它获得了两个时隙奖励的MEV。 在EIP-1559机制下,这个问题更加明显。 EIP-1559采用弹性区块大小设计,最大区块是目标区块的两倍,因此两个区块的交易可以放在一个区块中。 块,块长度加倍。 SSLE保证全网只有提议者知道轮到自己出块,避免了这种攻击。
合并以太坊
客户变更
目前在单片链上,我们只需要通过Go Ethereum、Nethermind等运行一个客户端,全节点主要负责交易的执行验证,以及POW的共识,保证跟随着最高高度(POW)和最大累计计算量(中本聪共识),他们不会接受任何无效交易。 目前信标链只运行共识层,没有执行层。 最终难度将在当前以太坊执行区块合并到信标链区块时确定。
届时会有两个独立的客户端,执行客户端负责执行,比如处理块,维护内存池,管理同步状态等。 共识客户端将处理POS共识,负责跟踪区块头,完成验证并获得相关收益等。客户端获得信标链区块,执行客户端负责运行交易,共识客户端跟随链来完成认证。 您可以混合使用这两个可互操作的客户端,新的 API 引擎设计将负责客户端之间的通信。
共识改变
在 POW 中的中本聪共识中,矿工创建新区块并将其添加到有效的最重链中。 之后,以太坊将转移到Gasper,通过Casper FFG(确认工具)和LMD GHOST(分叉选择规则)达成共识。 而这是一条比以前更有利于安全的链,有利于线上活力的链。 有利于安全设计的共识机制,例如 Tendermint,会在无法获得足够选票时停止生成区块(Terra 就是一个例子)。 支持活跃度的链将继续创建优化的账本,但如果没有足够的选票,最终确认将无法实现。 但是以太坊通过定期检查点来实现确认。 每 32 个以太坊是一个验证者节点,信标链上有 38,000 个节点。 每个时隙有32个时隙,每个时隙有12000个验证节点负责认证。 分叉选择规则将根据这些验证确定当前链的负责人。 每个区块每个时隙加一个,12秒,那么每个周期,32个时隙就是6.4分钟(12*32/60=6.4)。 而确认通常发生在投票后的两个时隙(即64个时隙,最多95个时隙)。
总结
至此,我们整理出了以太坊扩容的终极方案。 有许多前沿技术和开放的设计问题。 我们觉得很有价值,所以分享给大家。 我们也继续看好合并后的以太坊的核心价值。 虽然与Celesita的拆分执行、Polkadot状态分片等现有方案相比,它仍然会在单独的执行状态下运行,但其核心设计理念和history/status等数据的处理方式,以及货币溢价的考虑或经济安全,都值得整个行业学习。
参考
[以太坊漫游指南]()
Arweave信息
TS()
镜像CD()
镜像强迫症()