第一部分:通往Danksharding之路,内容详见——以太坊漫游指南及以太坊漫游指南
第二部分-历史和状态管理
在此快速回顾一些基础知识:
历史——链上发生过的一切。历史不需要快速访问,你可以把它放在一个硬盘上。从长远来看,历史是N个诚实假设中的1个。
状态——所有当前账户余额、智能合约等的快照。完整的节点都需要掌握状态以验证交易。状态对RAM来说太大了,而硬盘驱动又太慢,高吞吐量区块链的状态不断膨胀,其增长速度远远超过了我们可以在日常笔记本电脑上保存的数据量。如果日常用户不能维护这些状态,他们就不能完全验证,就与去中心化背道而驰。
简而言之,状态非常大,所以如果你让节点持有状态,那么就会使运行一个节点变得很困难,如果运行一个节点太难,我们普通人就不会去做,所以我们需要确保这不会发生。
CalldataGas成本降低与总Calldata限制
Proto-danksharding是一个很好的迈向Danksharding的过度,它满足了许多最终需求。在合理的时间范围内实现Proto-danksharding可以提前Danksharding到来的时间线。
一个更容易实现的应急解决方案是EIP-4488。它虽然不那么优雅,但解决了Gas费用方面的紧急问题。遗憾的是,EIP-4488没有实现通往Danksharding所需的中间步骤,所有不可避免的更改在将来仍然需要进行。如果觉得Proto-danksharding比我们希望的要慢一些,那么可以通过EIP-4488来快速解决拥堵问题,然后6个月后再使用Proto-danksharding。
EIP-4488有两个主要组件:
将calldata的成本从每字节16gas降到每字节3gas
每个区块添加1MB的calldata限制,以及每个交易额外增加300字节
增加限制是为了防止最坏的情况发生——一个区块中的calldata会达到18MB,远远超出了以太坊的承受能力。虽然EIP-4488增加了以太坊的平均数据容量,但由于它的calldata限制,以太坊突发数据容量实际上会略有下降。
归因于EIP-4488的calldata和Proto-danksharding一个月后可被删除的数据blob,使得EIP-4488的持续负载比Proto-danksharding高得多。使用EIP-4488时,历史数据增长将显著加快,将成为运行节点的瓶颈。即使EIP-4444与EIP-4488同步实现,也是在一年后才删除执行有效负载历史,所以相较之下,显然Proto-danksharding较低的持续负载更可取。
在执行客户端中约束历史数据
EIP-4444允许客户端选择本地删除超过一年的历史数据,它强制客户端停止在p2p层提供这种删除过的历史数据。删除历史数据允许客户端减少用户的磁盘存储需求。
以太坊L2协议Optimism的交易量超过Arbitrum:金色财经报道,基于以太坊的L2协议Optimism和Arbitrum在交易活动方面存在显着差异。自12月中旬以来,Optimism在交易数量方面的表现优于Arbitrum。(TheBlock)[2023/1/18 11:17:51]
删除历史数据本就非常重要,但如果实现了EIP-4488,那么这将是强制性的,因为EIP-4488实现将显著增加历史数据。无论怎样,希望这能在相对较短的时间内完成。某种形式的历史数据过期最终会被需要,所以现在是处理它的好时机。
链的全同步需要历史,但是验证新的区块不需要。因此,一旦客户端同步到链的顶端,历史数据只有在JSON-RPC上明确请求或对等端试图同步链的时候才会被检索。随着EIP-4444的实现,我们需要为这些找到替代解决方案。
客户端将无法像现在一样使用devp2p进行"全同步"——他们从一个将被视为创世区块的弱主观性检查点进行"检查点同步"。
请注意,弱主观性内生于转向PoS的过程中,不是一个新增的假设。我们需要使用有效的弱主观性检查点来进行同步以防止远程攻击的可能,这里的假设是,客户不会从一个无效的或旧的弱主观性检查点同步。这个检查点必须存在于我们开始删除历史数据的时期内,否则p2p层将无法提供所需的数据。
随着越来越多的客户端采用轻量级同步策略,网络的带宽使用也将减少。
恢复历史数据
EIP-4444在一年后删除历史数据,Proto-danksharding删除blob的速度更快,大约一个月后删除。我们肯定需要这些,因为我们不能要求节点存储所有这些数据的同时还保持去中心化:
EIP-4488——长期运行可能包括每个插槽~1MB,每年增加~2.5TB存储空间
Proto-danksharding——目标是每个插槽~1MB,每年增加~2.5TB存储空间
Danksharding——目标是每个插槽~16MB,每年增加~40TB存储空间
但这些被删除了的历史数据去哪里了呢?我们不是仍然需要它们吗?是的我们仍然需要。但请注意,丢失历史数据只会对个别应用程序造成风险,不会对协议造成风险,所以以太坊核心协议的工作就不应该是永久地维护所有这些达成共识的数据。
那么,谁来存储这些数据呢?这里有一些潜在的贡献者:
个人和机构志愿者
区块探索者,API供应商和其它数据服务商
第三方索引协议可以创建激励性的市场,客户为历史数据和Merkle证明向服务器付费
门户网络客户端可以随机存储部分链历史,而门户网络会自动将数据请求定向到节点上
例如BitTorrent,每天自动生成并分发一个包含区块blob数据的7GB文件。
特定于应用程序的协议,如rollup,可以要求它们的节点存储与其应用程序相关的历史部分
长期数据存储问题是一个相对容易解决的问题,因为正如前文所讨论的,它是N个中选1个的信任假设,我们距离它成为区块链可扩展性的终极限制还有很多年。
弱无状态
现在我们已经很好地掌握了管理历史的方法,但是处理状态呢?这实际上是目前提高以太坊TPS的主要瓶颈。
全节点使用前状态根来执行一个区块中的所有交易,并检查后状态根是否与区块中提供的交易相符。为了知道这些交易是否有效,他们目前需要掌握状态,即验证是有状态的。
进入无状态即无需用已掌握的状态来做一些作用。以太坊正努力实现"弱无状态",意味着验证区块不需要状态,但构建区块时需要。验证成为了一个纯函数——给我一个完全隔离的区块,我就可以告诉你它是否有效。基本上是这样的:
Index Coop 将推出通涵盖比特币、以太坊和 DPI 的 BED 指数:据官方消息,加密货币指数协议IndexCoop通过推出由Bankless提出的BED指数的提案。BED指数旨在跟踪加密货币的排名前3名的可投资资产,由33.3%比特币、33.3%以太坊、33.3%DeFi(DPI)组成,将于每个月的第一个星期五进行再平衡。该指数的费用为0.25%,其中0.125%将归属Bankless,0.125%归属IndexCoop。[2021/6/15 23:37:03]
基于PBS,区块打包者仍然需要状态,这是可以接受的——无论如何它们是更中心化的高资源实体。专注于去中心化验证者,弱无状态为区块打包者带来了略多一点的工作,而使验证者的工则作少很多,这是一个很好的权衡。
你将通过验证来实现这种神奇的无状态执行,区块打包者将在每个区块中包含正确状态访问的证明。验证一个区块实际上不需要完整的状态,而只需要该区块中正在被读取的或受区块中交易影响的状态。区块打包者将在一个给定的区块中包含受交易影响的状态片段,并通过验证人来证明他们正确地访问了这些状态。
举个例子:Alice想给Bob发送1个ETH。为了验证包含这个交易的区块,我需要知道:
交易之前——Alice有1个ETH
Alice的公钥——由此得知签名是正确的?
Alice的随机数——由此得知交易是以正确的顺序发送的
执行交易后——Bob多了1个ETH,Alice少了1个ETH
在弱无状态的世界中,区块打包者将上述见证数据和其相应的准确性证明添加到区块中。验证者收到区块,执行它,并决定它是否有效。就是这样!
以下是从验证者角度得出的一些结论:
保持状态的巨大的SSD需求消失了——这是如今扩展面临的关键瓶颈
带宽需求会增加一些,因为现在仍然需要下载见证数据和证明。这是Merkle-Patricia树的一个小瓶颈,但不是Verkletries的瓶颈。
你仍然执行交易以完全验证。无状态并不是当前扩展以太坊的瓶颈。
由于状态膨胀不再是一个紧迫的问题,弱无状态也允许以太坊放宽对其执行吞吐量的自我限制,所以将gas限制提高3倍是合理的。
在这一点上,大多数用户执行将在L2上进行,但更高的L1吞吐量也会对他们有利。Rollups依靠以太坊进行数据可用性和结算。随着以太坊扩展其数据可用性层,发布证明的摊销成本可能会占据rollups成本的更大份额。
VerkleTries
我们掩盖了这些见证的工作原理。以太坊目前使用Merkle-Patricia树来表示状态,但所需的Merkle证明对这些证人来说太大了,是切实不可行的。
以太坊将转向Verkletries来存储状态,Verkle证明的效率要高得多,所以它们可以作为可行的见证来实现弱无状态。
首先回顾一下Merkle树是什么:每笔交易开始时都会进行哈希计算——位于底部的哈希被称为"叶子",所有的哈希都可被称为"节点",每一个哈希都是是其下面两个"子"节点的哈希。最终产生的哈希即"Merkle根"。
Kraken将于今日21:30开启以太坊2.0质押服务:据官方公告,Kraken宣布将于今日21:30开启以太坊2.0质押服务,年收益为5%到17%。[2020/12/4 14:02:10]
这是一个用于证明包含交易的数据结构,但无需下载整个树。例如,你只需要Merkle证明中的H12、H3和H5678就可以验证交易H4被包含。我们有来自区块头的H12345678,所以一个轻客户端可以向一个全节点索取这些哈希,然后根据树中的路由将这些值一起进行哈希计算。如果结果是H12345678,那么我们就成功证明了H4在树中。
不过树越深,到底部的路由就越长,因此你需要更多的项来证明。所以浅而宽的树更有助于高效证明。
问题是,如果通过在每个节点下添加更多的子节点来扩宽Merkle树将是非常低效的,因为需要把所有兄弟哈希放在一起,以沿着树向上移动,因此需要为Merkle证明接收更多的兄弟哈希。这会使证明变得非常大。
这里就是高效向量承诺的用武之地。请注意,Merkle树中使用的哈希实际上是仅能有效承诺两个元素的向量承诺,而我们想要的是无需所有兄弟哈希来进行验证的、可以使树变宽并减少其深度向量承诺,这也就是我们如何获得高效的证明大小的方法,即减少需要提供的信息量。
Verkletrie类似于Merkle树,但是它使用高效向量承诺而不是简单的哈希来承诺其子代。因此,基本上每个节点可以拥有许多子节点,但无需所有子节点都验证证明。无论宽度如何,这都是一个恒定大小的证明。
实际上,前文提到的KZG承诺也可以作为向量承诺使用,且以太坊开发者最初本就计划在这里使用KZG承诺,只是他们后来转向了用以履行类似角色的Pedersen承诺。这些承诺将基于一个椭圆曲线,并将承诺256个值。
那么,为什么不建立一个深且尽可能宽的树呢?这对现在拥有紧凑证明的验证者来说是件好事。但是这里有一个需要实际考虑的权衡,即证明者需要能够计算该证明,但树越宽计算就越难。因此,这些Verkletries将位于两个极端之间,宽度为256个值。
状态逾期
弱无状态性消除了验证者的状态膨胀约束,但状态并不会神奇地消失。交易的成本是有限的,但它们通过增加状态给网络带来了永久的税收。状态增长仍然是对网络的一种永久性拖累,需要采取一些措施来解决根本问题。
长期不活跃的状态甚至会从区块创建者需要携带的东西中被砍掉,而活跃的用户不会注意到这些事情,也就不需要无用的状态,它们可以被删除。
如果你需要恢复逾期的状态,你只需要出示一个证明以激活它,这又回到了N选1存储假设,即只要有人仍然拥有完整的历史,你就可以从他们那里得到你需要的东西。
弱无状态将削弱基础层对状态逾期的迫切需求,从长远来看,特别是随着L1吞吐量的增加,这是好事情。对于高吞吐量的rollups,这将是一个更有用的工具,因为L2状态将以更高指数级速率增长甚至成为高性能创建者的拖累。
第三部分:MEV
PBS对于安全实现Danksharding来说非常必要,但它最初的设计其实是为了对抗MEV的中心化力量,毕竟如今在以太坊研究中反复出现的一个趋势即MEV是目前加密货币经济学的前沿和中心。
声音 | 江卓尔:分片提升容量难度大时间长 故而Vitalik提出使用BCH或者ETC作为以太坊数据层:7月25日消息,莱比特矿池CEO江卓尔表示,分布式系统(去中心化系统)有一个不可能三角,称为分布式系统CAP定理,指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。Vitalik提出用分片方法提升容量,但分片方法的难点是一致性,也就是CAP中的C,Consistency(一致性),这个是一个要挑战不可能三角的开发,所以开发难度很大,时间长,所以Vitalik才提出使用BCH或者ETC作为以太坊数据层的短期方案,来解决ETH的燃眉之急。[2019/7/25]
在设计区块链时考虑到MEV,对于维护安全和去中心化都至关重要。协议层的基本方法是:
尽可能减轻有害的MEV
将剩余部分民主化。
其中,剩余部分必须能很容易地被捕获并在验证者中传播,否则,由于无法与复杂的搜索者竞争而使验证者集中心化。另外,合并后,MEV将进一步占领验证者奖励中更高的份额,所以验证者中心化地问题不容忽视的。
当前的MEV供应链
当前的事件顺序看起来是这样的:
矿池在这里扮演了区块打包者的角色。MEV检索器通过Flashbots将捆绑的交易转交到矿池。矿池运营商聚合一个完整的区块,并沿着区块头传递给各个矿工。矿工通过PoW在分叉选择规则中赋予其权重来证明这一点。
Flashbots的出现是为了防止将为审查和其它不利外部因素打开大门的跨堆栈垂直整合。当Flashbots开始时,矿池已经开始与交易公司达成独家交易来提取MEV。相反,Flashbots为他们提供了一种聚合MEV竞价和避免垂直整合的简单方法。
合并之后矿池就会消失。家用验证者通常不似拥有一堆量化分析师的对冲基金那样擅长捕捉MEV,如果不加以约束,在普通人无法与之竞争的情况下,这将中心化验证者集的力量。但如果结构合理,该协议可以将MEV收入重新定向给日常验证者的质押收益。所以我们希望有途径可以让家用验证者合理地运营,这需要找能够承担特定的构建角色的人。
MEV-Boost
不幸的是,协议内的PBS在合并时根本无法做好准备。Flashbots再次提供了一个过度解决方案:MEV-Boost。
合并后的验证者将默认为直接接收公共存储池中的交易到它们的执行客户端。他们可以将这些交易打包提交给共识客户端然后广播到网络。(文章第四部分将介绍以太坊的共识和执行客户端是如何一起工作的)。
动态 | 以太坊未确认交易83758笔:据Etherscan.io数据显示,当前以太坊未确认交易为83758笔,网络依旧严重拥堵。[2018/12/15]
但是父母辈和常见的验证者并不知道如何提取我们讨论的MEV,Flashbots为此提供了替代方案,即MEV-boost将嵌入你的共识客户端,允许你外包特定的区块构建。重要的是,此时你仍可以选择使用自己的执行客户端作为后备。
MEV检索器将继续发挥它们今天已有的作用,运行特定的策略,并竞标他们需要纳入的捆绑。然后,区块打包者将他们看到的所有捆绑以及任何私人订单流汇总到最佳完整区块中,他们通过运行在MEV-Boost上的中继器者把区块头传递给验证者。Flashbots将运行中继者和区块打包者,并计划随着时间的推移逐渐去中心化,但为其它区块打包者开放白名单可能会慢很多。
MEV-Boost要求验证者信任中继者——共识客户端收到区块头并对其签名,然后才显示区块体。中继者的目的是向出块者证明体区块体是存在且有效的,如此验证者就不必直接信任区块打包者。
当协议内PBS准备就绪,它就会编码MEV-Boost在这期间提供的内容。PBS提供了同样的权力分离,它使得的区块打包者更容易去中心化,以及出块者无需要信任任何人。
委员会驱动的MEV均匀分配
PBS为另一个很酷的想法提供了支持——委员会驱动的MEV均匀分配。
我们看到提取MEV的能力是中心化验证者集的一种力量,但对分发也是如此。从一个区块到另一个区块的MEV奖励的高可变性,激励着许多验证者来均匀分配你的回报。
默认的做法是区块打包者将全额付款给实际的区块出块者,MEVsmoothing将把这笔付款分配给许多验证者。一个验证委员会将检查被提议的区块,并认证该区块是否为出价最高的区块。如果一切顺利,将继续生成区块,且奖励将分配给委员会和出块者。
这也解决了带外行贿问题,即出块者可能会被激励提交一个次优区块,然后直接接受带外贿赂,以向隐藏它们收到的带外贿款。而这种认证可以使出块者受到约束。
协议内PBS是实现MEV均匀分配的先决条件。你需要对区块打包者市场和提交的标书有所了解。虽然这里有几个开放待解决的研究问题,但这依然是一个令人兴奋的提议,因为它对确保验证者去中心化来说至关重要。
单槽最终确定性
快速的最终确定性是非常棒的,等待~15分钟对于用户体验或跨链通信来说都是次优选择。更重要的是,快速最终确定性是一个MEV重组问题。
合并后的以太坊将会提供比今天更强大的确认——成千上万的验证者认证每个区块,以及矿工可在同一区块高度竞争和挖矿但无需投票。如此使得链重组几乎不可能实现,但仍然不是真正的最终确定性。如果最后一个区块有一些有报酬丰厚的MEV,你可能会引诱验证者尝试链重组,并将其窃为己有。
单槽最终确定性消除了这种威胁,逆转一个已完成最终确定性的区块需要至少三分之一的验证者,且他们的质押会立即被削减。
在这里我们不过多地讨论潜在的机制。只需要知道,在以太坊的路线图中,单槽最终确定性在很久以后才会被考虑进来,以及它是一个非常开放的设计空间。
在今天的共识协议中,以太坊只需要1/32的验证者来认证每个槽。在单槽中用BLS签名聚合将这种投票扩展到全部的验证者集需要做更多的工作——把数十万次投票压缩到一个验证中:
Vitalik在文后链接中详解了一些有趣的解决方案。
单一秘密领袖选举
单一秘密领袖选举试图修补我们在合并后将面临的另一个MEV攻击矢量。
信标链验证者名单和即将发布的领导者选举名单都是公开的,很容易对他们进行去匿名化处理以及映射他们的IP地址。
更成熟的验证者可以使用一些技巧来更好地隐藏自己,但是小型验证者特别容易受到信息泄露和DDOS的影响,这很容易被MEV所利用。
假设你是第n个区块的出块者,我是第n+1个区块的出块者,如果我知道你的IP地址,我可以很便宜地向你发动能致使你超时从而无法生产区块的DDOS攻击,如此我便可以获得我们俩的槽的MEV,使我的回报加倍。EIP-1559的弹性块大小加剧了这个问题,由于EIP-1559每个块的最大gas是目标规格的两倍,所以我可以把本应该是两个块的交易塞到属于我的、是原来两倍大的单个块中。
简而言之,家用验证者可能会放弃的验证,因为家用验证者容易受到攻击,可能会验证失败。SSLE使得除了出块者之外没有人知道什么时候该轮到他们来阻止这种攻击。这在合并时还无法实现,但希望在合并后不久可以实现。
第四部分-合并:工作原理
我认为并希望合并即将到来。
合并是无法忽视的,没有人会对其置若罔闻,我觉得我也有可以做一些简单的发声:
合并后的客户端
如今,你运行的是一个处理所有交易的单片单体客户端。具体来说,全节点做这两件事:
执行:执行区块中的每个交易,以确保有效性。采取前状态根,执行一切,并检查产生的后状态根是否正确。
共识:验证你处在完成了最多工作的、最重的链上,即中本聪共识。
它们是不可分割的,因为全节点不仅遵循最重的链,而且遵循最重的有效链。这就是为什么他们是全节点而不是轻节点。即使在51%的攻击下,全节点也不会接受无效的交易。
信标链目前不运行执行,只运行共识以提供给PoS一个测试运行环境。最终,决定一个终端总难度的时刻将是以太坊执行区块合并到信标链区块中形成一条链的时刻:
然而,全节点本质上将运行两个独立的可以互操作的客户端:
执行客户端:当前的Eth1.0客户端继续处理执行。他们处理区块,维护内存池,管理和同步状态,撕掉PoW的基本特质。
共识客户端:当前的信标链客户端继续处理PoS共识。他们跟踪链头,广播和认证区块,并接收验证者的奖励。
客户端收到信标链区块,执行客户端运行交易,如果一切顺利共识客户端将遵循该链。所有的客户端都是可互操作的,你将能够混合或匹配你所选择的执行客户端和共识客户端。一个新的用于客户端之间通信的引擎API将被引入:
或者:
合并后的共识
如今的中本共聪共识很简单:矿工创建新的区块,并将其添加到观察到的最重的有效链上。
合并后的以太坊转向GASPER——结合CasperFFG和LMDGHOST来达成共识。这里简而言之是一个侧重于活性但不侧重于安全性的共识。
区别在于,支持安全的共识算法在无法获得必要的票数时就会停止。支持活性的链无论如何都会继续建立一个乐观的账本,但如果没有足够的票数,它们就无法获得最终确定性。今天的比特币和以太坊只是假设在足够多的区块之后不会发生重构,永远不会获得最终确定性。
然而,以太坊也会在票数足够的情况下通过检查点来阶段性的实现最终确定性。每32个ETH实例就是一个独立的验证者,目前已经有超过38万个信标链验证者。周期由32个槽组成,所有验证者被分离开来,以在给定的周期内对一个槽进行认证。紧接着,分岔选择规则LMDGhost根据这些证明来确定链现在的头。每个槽都会增加一个新的区块,所以周期是6.4分钟。通常在两个周期后,就会获得必要的票数以实现最终确定性。
结论
所有的道路都通向中心化区块生成、去中心化无信任的区块验证和抗审查。以太坊的路线图已经瞄准了这一愿景。
以太坊的目标是成为统一的数据可用和结算层——在最大限度地去中心化和安全的基础上实现可扩展计算
我希望你对以太坊的研究是如何交织在一起的有了更清晰的认识,它有如此多非常简短的、正在开发的组件,它们各自都有一个非常大情景需要你去理解。
从根本上说,这一切都回到了那个独一无二的愿景。以太坊为我们提供了一条令人信服的通往大规模可扩展的道路,与此同时也珍视我们在这个领域非常关心的那些价值。
扩展阅读
APrimeronEllipticCurveCryptography
https://blog.cloudflare.com/a-relatively-easy-to-understand-primer-on-elliptic-curve-cryptography/
ExploringEllipticCurvePairings——Vitalik
https://vitalik.ca/general/2017/01/14/exploring_ecp.html
KZGpolynomialcommitments——Dankrad
https://dankradfeist.de/ethereum/2020/06/16/kate-polynomial-commitments.html
Howdotrustedsetupswork?——Vitalik
https://vitalik.ca/general/2022/03/14/trusteDankshardingetup.html
单槽最终确定性解决方案详解——Vitalik
https://notes.ethereum.org/@vbuterin/single_slot_finality
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。