注:原文作者是Paradigm基金研讨者Georgios Konstantopoulos。
以太坊生态体系所面对的最大应战之一,是在严格的资源约束(例如CPU、带宽、内存以及磁盘空间)下具有低推迟和高吞吐量。
而一个体系的去中心化程度,取决于网络中最弱节点验证体系规则的才能。咱们以为,能够在低资源硬件上运转的高功能协议才是“可扩展”的。
在本文中,咱们将深入探讨现代“Layer 2处理计划”的原理,其相应的安全模型以及它们怎么处理以太坊的可扩展性问题。
这篇文章的方针读者是有好奇心的个人,他们有爱好了解更多有关先进的以太坊扩容技能,以及有动机构建和架构此类体系的人群。
区块链资源需求
有三个要素会影响在去中心化网络(例如比特币和以太坊)中运转节点的资源需求:
-
带宽:下载和播送任何区块链相关数据的本钱;
-
核算:在脚本或智能合约中运转核算的本钱;
-
存储:为索引意图存储买卖数据的本钱,以及为继续处理新买卖区块而存储“状况”的本钱。
而功能则是经过两种办法衡量:
-
吞吐量:体系每秒可处理的买卖数;
-
推迟:处理买卖所需的时刻;
比特币和以太坊等新兴加密网络的抱负特性是去中心化。可是,是什么让网络变得去中心化呢?
-
低信赖:这一属功能够让任何人验证比特币的总量不会2100万BTC,或许也不会有伪造的比特币。运转节点软件的个人,独立核算最新状况并验证流程中是否遵循了一切规则;
-
低本钱:假如节点软件的操作本钱很高,则个人将依赖受信赖的第三方来验证状况。高本钱意味着高信赖度要求,而这是咱们首要要避免的。
另一个需求的特性是便是可扩展性:能够将吞吐量和推迟超线性地扩展到运转体系的本钱。这一界说很好,但没有包括“信赖”。因而,咱们指定了“去中心化可扩展性”:即在不显着添加体系信赖假定的状况下,完成可扩展性。
放大来看,以太坊的runtime环境是以太坊虚拟机(EVM)。经过EVM运转的买卖以不同的本钱履行各种操作(例如,存储操作的本钱高于添加操作的本钱)。买卖中的核算单位称为“gas”,体系参数化为每个区块最多处理1250万 Gas,其间均匀每12.5秒生成一个买卖区块。因而,以太坊的推迟时刻约为12.5秒,吞吐量为每秒100万 gas。
你或许会遇到这样一个问题:每秒100万gas,你能够用来做什么?
-
每秒约47笔简略的转账买卖,这些买卖每笔花费21000 gas,它们是最简略的买卖类型,比如将ETH从地址A转到地址B;
-
每秒约16笔 ERC20代币转账,与ETH买卖相比,这些买卖涉及更多的存储操作,因而每次会花费大约60000 gas;
-
以此类推;
请留意,跟着买卖履行复杂度的添加,体系的吞吐量会下降到十分低的值。还有改善的空间!
处理计划1:运用中介
咱们能够利用一个可信赖的第三方来促进咱们的一切买卖。这样,咱们就能够得到十分高的吞吐量以及或许的二级推迟,这太棒了!这不会改动任何体系范围的参数,但咱们会挑选进入一个由第三方单方面设置的信赖模型。他们或许会挑选查看咱们,乃至扣押咱们的资产,而这是不可取的。
处理计划2:让区块变大,缩短区块间隔时刻
咱们能够经过缩短两个区块之间的时刻来削减推迟,而且能够经过添加区块gas约束来添加吞吐量。但这种变化将使节点运营的本钱变高,然后阻挠个人运转节点(例如EOS、Solana、Ripple等便是运用的这种办法)。
咱们能够发现,处理计划1中添加了信赖要求,而处理计划2则是添加了本钱。这使得这两种计划,都无法成为可扩展性的好挑选。
从第一性原理重新认识达观汇总(Optimistic Rollup)
在这部分内容中,咱们假定读者了解了哈希和merkle树的概念。
依据咱们现在学到的常识,让咱们模仿一些苏格拉底式的对话,意图是发现一个协议,它能够进步以太坊的有用吞吐量,而不会添加用户和节点运营者的负担。
问、所以…咱们想在不改动信赖和本钱假定的状况下扩展以太坊。咱们该怎么办?
答: 咱们期望下降现有操作对体系本钱的要求(请参阅上面的三种资源类型)。为了理解要完成它并不是一件易事,咱们首要需求了解以太坊的体系结构:
以太坊中的每个节点,当时都存储并履行用户提交给它的每个业务。在履行期间,买卖会经过EVM运转,而且与EVM的状况(例如存储,余额等)进行交互,这是十分贵重的。常见的智能合约优化技能的重点,是最大程度地削减与状况的交互次数,可是它们仅仅供给了较小的常量要素改善。
问:你是说有一种买卖办法能够不影响状况,然后下降资源本钱吗?
答:在极限状况下,咱们能够将一切履行转移到链外,并在链上保存一些数据。咱们能够经过引入一个称为序列器(sequencer)的第三方来做到这一点。它们担任在本地存储和履行用户提交的业务。为了坚持体系的活泼性,序列器需求定期提交他们接收业务的merkle根和以太坊上产生的状况根。这是朝着正确方向迈出的一步,由于关于O(N)链外买卖,咱们只存储O(1)以太坊状况数据。
问:所以咱们经过让序列器核算链外的一切内容,并只发布merkle根来完成扩容?
答:是的。
问:好的,一旦你参加其间,序列器会确保你的转账是便宜的,那存款和取款是怎么工作的?
答:用户将经过在以太坊上存款进入这个体系,然后序列器将相应的金额记入用户的账户。一个用户经过做一笔买卖“我想取款3ETH,我的账户现在有>3 ETH,这便是它的证明”来将资金提回到以太坊主网。即便L1没有实践的用户状况,**用户也能够经过显示引用序列器发布的状况根的merkle证明,来证明自己在当时状况下有满足的资金。
问:咱们确定用户需求一个merkle证明才能提取他们的资金,那用户怎么获取数据来构造merkle证明呢?
答:他们能够让序列器给他们供给数据!
问:可是假如序列器暂时或许永久不可用呢?
答:序列器或许是恶意的,或许仅仅由于技能问题而离线,这会导致功能下降(或许更糟的状况是资金被盗!)因而,咱们还必需要求序列器在链上提交完好的买卖数据,以便存储但不履行。这儿的意图是取得数据可用性。假定一切数据都永久存储在以太坊上,即便序列器消失了,新的序列器也能够从以太坊中检索一切与Layer 2相关的数据,重建最新的L2状况,并从先前中止的当地继续。
问:因而,假如序列器在线,但回绝向我供给merkle 证明数据,我能够经过以太坊下载它?
答:是的,你能够自己同步以太坊节点,也能够连接到许多托管节点服务之一。
问:所以我仍是不明白…你怎么能在以太坊上存储一些东西,而不履行它呢?不是每笔买卖都要经过EVM吗?
答:假定你提交了10笔将ETH从地址A转移到地址B的买卖,履行每笔买卖将履行以下操作:添加A的nonce、削减A的余额以及添加B的余额。这是来自国际状况相当多的写入和读取。相反,你能够将一切买卖的编码发送到智能合约的publish(bytes\u transactions)publichttps://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg}函数。请留意,这个函数的主体是空的!这意味着发布的买卖数据不会被解释、履行,也不会在任何当地进行状况拜访:它仅仅存储在区块链的前史日志傍边(写入本钱很低)。
问:咱们能信赖序列器吗? 假如他们发布了一个无效的状况转化呢?
答:每逢序列器发布一批状况转化时,都会有一个“争议期”,在这个时刻段内,任何一方都能够发布一个“诈骗证明”(fraud proof),以表明其间一个状况转化是无效的。经过重播送导致链上状况转化的买卖,并将结果态根与序列器发布的状况根进行比较来证明。假如状况根不匹配,则诈骗证明成功并撤销状况转化。假如在无效的状况转化之后有更多的状况转化,它们也会被撤销。而超越争议期的买卖将不再有争议,并被视为最终买卖。
问:等一下!你之前说过,假如a)添加了本钱,或b)引入了新的信赖假定,那就无法真正完成可扩展。那在你描述的计划中,咱们不是另外假定了总有人在举报诈骗行为吗?
答:是的,咱们假定有被称为“验证者”的实体担任监视诈骗行为,假如Layer 1和Layer 2状况不匹配,他们就会发布诈骗证明。咱们还假定验证者能够在争议期限内,可靠地取得以太坊中包括的诈骗证明。咱们以为验证者的存在,是一个“弱”假定。想象一下,假如有不计其数用户的运用,那你只需求一个人来运转一个验证器。这听起来仍是很有或许的,另一方面,更改以太坊的信赖模型或添加操作以太坊节点的本钱,是咱们不想做的“强”假定更改。当咱们界说去中心化可扩展性时,这便是“有意改动底层体系的假定”的意思。
问:我同意有人会来运转验证器,由于许多参加者对这种新处理计划成功,是具有既得利益的。但能够肯定的是,这还取决于实践花费的本钱。那运转验证器和序列器的资源需求是什么呢?
答:序列器和验证器必需要运转一个以太坊全节点(不是存档节点),一个完好的L2节点,以产生L2状况。验证器运转的软件担任创建诈骗证明,而序列器运转的软件担任捆绑用户买卖,并发布它们。
问:便是这样的吗?
答:是的!祝贺你!你现已重新发现了达观汇总(Optimistic Rollup)[3],这是2019-2021年最令人等候的扩容计划。它是以太坊社区多年研讨过程的最终产物,你在以上简短的对话中能够体会到这一点。
达观汇总中的鼓励办法
Layer 2 扩容根据以下事实:咱们企图最小化链上履行买卖的数量。咱们运用诈骗证明来撤销或许产生的任何无效状况转化。由于诈骗证明是链上买卖,因而咱们也期望尽量削减在以太坊上发布的诈骗证明的数量。在抱负的状况下,诈骗永远不会产生,因而诈骗证明也就不需求发布。
咱们经过引入忠实确保来消除诈骗行为。为了运用户能够树立序列器,他们必须先在以太坊上发布一份确保金,假如诈骗行为被证实,则这些资金会被没收。为了鼓励个人寻找诈骗行为,序列器的确保金会被削减,并分发给找到诈骗行为的验证者。
忠实度确保金和争议期
在规划诈骗证明的鼓励办法时,需求调整两个参数:
-
忠实度确保金巨细:即树立序列器必需要锁定的资金量,这些资金也是验证者要追求的方针。显然,这个金额越大,成为验证者的动机就越大,而序列器进行诈骗的动机也就越小。
-
争议期限:发布诈骗证明的时刻窗口,在此时刻窗口之后,L2买卖在L1上结算被以为是安全的。长时刻的争议期,是为了供给更好的安全保障,以防止查看进犯。而较短的争议期,则能够为用户发明更好的体会,由于他们不需求等候很长时刻就能够在L1上重新运用他们的资金。
在咱们看来,这两个参数都没有正确的静态值,也许10 ETH确保金和1天的争议期就满足了。也许1 ETH确保金和7天争议期也是能够的。真正的答案是,这取决于作为验证者的动机(取决于运转验证器的本钱)以及发布诈骗证明的简略程度(这取决于L1的拥堵程度)。这两项都应该是可调整的,无论是手动仍是自动。值得一提的是,EIP1559为以太坊引入了一个新的BASEFEE操作码,可用于估量链上拥堵状况,并因而以编程办法调整争议期的持续时刻。
这一赏罚机制的正确施行是至关重要的,不然将在实践过程中被利用。下面便是一个无法正常工作的简略完成示例:
-
Alice抵押了1 ETH确保金,这让她树立了一个序列器;
-
Alice发布了一个虚假的状况更新;
-
Bob留意到了这一点,并对其主张争议应战,假如应战成功,这会导致Alice抵押的1 ETH确保金转到Bob的账户,并撤销诈骗性状况更新;
-
Alice留意到了这个争议应战,她也主张争议应战(应战自己!);
-
Alice收到了自己的1 ETH,实践上她并没有付出罚款,即便她企图诈骗了;
Alice能够经过“抢先买卖”主张进犯,即播送与Bob相同的买卖,但付出更高的gas费用,这导致Alice的买卖先于Bob的买卖履行。这意味着Alice可始终测验以最小的本钱(仅以太坊买卖费)进行诈骗。
处理这个问题的办法是简略的:不将悉数确保金授予争议应战方,而是燃烧掉其间的X%。在上面的比如中,假如咱们燃烧掉50%,Alice将收到0.5 ETH的回报,这将是一个满足的抑制办法,导致她不会测验第二次做弊。当然,这种烧制机制会下降用户运转验证器的动机(由于奖赏变少了),因而燃烧后的确保金奖赏,应该满足多以吸引到验证者。
关于针对达观汇总的批判以及咱们的回应
现在,咱们现已完成了达观汇总的基础构建块,让咱们探讨并处理针对该机制的一些批判问题。
问题1:长时刻的退出/争议期对选用及可组合性而言是不利的,这是丧命的
上面咱们提到,长期的争议期对安全而言是有很大好处的,但这儿好像有一个内涵的权衡问题:长时刻的争议期不利于选用,由于任何想要从中提取资金的用户都需求等候很长的时刻,比如说7天。而较短的争议期,虽然对用户来说能够有更流通的体会,但这样就需求冒着诈骗产生的危险,没有争议会被及时包括进来。
咱们不以为这是一个问题,由于这一潜在的大规模退市推迟,咱们估计做市商将介入并供给更快的退市服务。这是或许的,由于验证L2状况的人,能够正确判别取款是否属于诈骗,然后以小折扣购买他们的服务。下面便是一个比如:
参加者:
-
Alice在L2上有5 ETH;
-
Bob:“做市商”智能合约的L1上有4.95 ETH,而且正在L2上运转验证器;
步骤:
-
Alice让Bob知道她想要“快速”提款,并向他供给0.05 ETH的费用;
-
Alice向 Bob的“做市商”智能合约主张一笔提款买卖;
-
或许会产生两件事:(1)Bob在L2验证器上查看取款是否有用,并同意快速取款。这会立即将4.95 ETH转到Alice的L1地址。在取款期结束后,Bob 能够申领5 ETH,然后取得可观的利润。
(2)Bob的验证器提示他这笔买卖是无效的,Bob对该买卖引起的状况转化提出异议,撤销了买卖并赢得了答应恶意买卖产生的序列器确保金。
Alice要么很厚道,立即拿出她的资金,要么不厚道,然后遭到赏罚。假如有这项服务的需求,咱们估计向这些做市商付出的费用,会跟着时刻的推移而紧缩,最终使该程序对用户完全不可见。
这个功能最重要的含义是,它能够与L1合约完成组合,而不用等候整个争议期。
请留意,这项技能首要在“简略快速取款”中进行了介绍。
问题2:矿工有或许会被贿赂,以查看取款,损坏OR的安全
在“达观汇总近乎零本钱进犯场景”中,有人会以为,矿工的鼓励机制如此之大,以至于序列器与以太坊矿工合谋查看任何争议买卖都是微不足道的。考虑到对安全性的依赖,这对任何达观体系来说都是丧命的。
咱们不同意这个观点,咱们以为,诚笃的一方将总是乐意贿赂矿工,乃至要比恶意方更多。此外,矿工每次经过协助恶意一方获胜而背离“诚笃”行为,都要付出额外的价值。这种行为会损坏以太坊的价值,这或许会添加矿工参加以太坊的本钱。
事实上,学术文献中现已研讨过这种状况,证明了“这种反击的威胁导致了一个子博弈完美均衡,在这种均衡中,不会有人先去进行进犯。”
咱们要感谢Hasu供给的论文依据。
问题3:验证者的窘境,造成了阻碍验证者操作的障碍
Ed Felten为验证者的窘境撰写了一些超卓的剖析和处理办法,咱们总结如下:
-
假如这个体系的鼓励办法按预期运转,则没有人会做弊;
-
假如没有人做弊,那么运转验证器就没有意义了,由于运转验证器赚不到钱;
-
由于没有人运转验证器,所以序列器最终会有机会做弊;
-
序列器做弊,体系不再按预期运转;
听起来这很重要,而且几乎是自相矛盾的!假定奖赏的巨细是固定的,更多的验证者会削减单个验证者的预期付出。此外,更多的验证者好像缩小了奖赏巨细,由于诈骗产生较少,这进一步加重了问题。在后续的剖析中,Felten还供给了一种处理验证者窘境的办法。
我想站在相反的立场说这件事,验证者的窘境并不像批判者说的那么重要。在实践傍边,作为验证者存在着与金钱无关的鼓励。例如,假如你是一个树立在rollup之上的大型运用商,或许你是代币持有者,假如体系产生故障,那么你的运用将无法工作,或许你的代币价值将会变少。除此之外,快速取款的需求为做市商验证者的存在发明了动力(如上一节所述),而与诈骗行为无关。为了更具体地说明这一点,比特币没有供给存储整个区块链前史记录或将你的本地数据供给给对等节点的鼓励,可是人们仍是会无私地这样做。
即便在真空中运转验证器与鼓励机制不兼容,它也能确保体系的安全,这关于出资于体系成功的实体来说是最重要的。因而,咱们以为没有必要规划机制来处理达观第二层体系中验证者的窘境。
结论
与文章的标题共同,咱们剖析了以太坊在2021年最重要的技能计划之一:达观汇总(Optimistic Rollup)。
总结一下这种计划的好处:OR作为一种以太坊扩容计划,它继承了以太坊主网的安全性、可组合性以及开发人员的护城河,一起进步了功能,而且没有对以太坊用户的本钱或信赖要求产生实质性影响。咱们探究了使达观汇总起作用的鼓励结构,并对常见批判进行了回应。
作为补充阅览,咱们推荐咱们阅览Vitalik的《Rollup和信赖模型的不完好攻略》这篇文章,咱们还主张咱们研讨下OR的近亲ZK Rollup,咱们在StarkWare的朋友便是构建的这类计划。最终,还有其他办法能够完成去中心化的可扩展性,例如分片和状况通道,它们也都有各自的优缺点。
咱们要感谢Hasu,Patrick McCorry,Liam Horne,Ben Jones,Kobi Gurkan和Dave White为本文供给的名贵反应定见。
视野开拓
通过限制群体规模和群体内部在语言、规范和其他方面的异质性,边界维护可以支持群体内的合作和交换。与此同时,内群体偏爱支撑了群体间冲突和群体间行为差异,这使得群体竞争成为有力的演化力量。-《合作的物种》