以太坊生态的最大挑战之一是如何在资源有限的前提下实现低延迟和高吞吐量。
系统的去中心化程度取决于网络中最弱的节点验证系统规则的能力。可以在低资源硬件上运行的高性能协议被称为“可伸缩的”。
在本文中,我们将深入探究现代“Layer2方案”的原则,这些方案的安全模型,及其在解决以太坊可扩展性问题上采取的策略。
本文的预设读者是那些对密码学技术感兴趣的人。如果你想要深入了解以太坊前沿可扩展性技术,以及如何设计并构建这类系统,千万不要错过这篇文章。
在本文中,重要的关键词和概念都已加粗,因为这些都是你在了解密码学货币技术时经常遇到的术语。本文涉及的概念比较复杂。如果你在阅读中遇到困惑,请不要放弃,守得云开见月明。
区块链资源要求
在比特币和以太坊等去中心化网络中,运行节点的资源要求主要有三种:
带宽:下载并广播区块链相关数据的成本。计算:在脚本或智能合约中运行计算的成本。存储:出于索引目的存储事务数据的成本,以及为了继续处理新的事务块而存储“状态”的成本。影响性能的因素有:
吞吐量:系统每秒可处理事务的数量延迟:处理一笔事务所需的时间比特币和以太坊等新兴密码学货币网络的理想特性是去中心化。那么问题来了,网络是如何实现去中心化的呢?
低信任:有了这个特性,任何人都能自主验证比特币的总供应量永远不会超过2100万个,及其持有的比特币不是伪造的。运行节点软件的人可以独立计算最新状态,并验证出块流程是否遵循所有规则。低成本:如果节点软件的运行成本很高,人们就会选择依靠可信第三方来验证状态。成本高意味着信任要求也高,这是我们极力想要避免的。另一个理想特性是可扩展性:吞吐量能够随运行节点的成本增加呈超线性增长。这个定义很棒,但是并未指明与“信任”惯性。因此,我们另外定义了“去中心化可扩展性”:在几乎不会提高系统信任假设的情况下实现可扩展性。以太坊的运行时环境是EVM。在EVM中,事务在执行不同操作时需要承担的成本不同。事务的计算单位叫做“gas”。在以太坊系统中,每个区块的gas上限被设为1250万gas。平均每12.5秒可以挖出一个区块。由此可得,以太坊的延迟是12.5秒,吞吐量是每秒100万gas。你可能会问一个问题:每秒100万gas能做什么?
Polygon指责Matter Labs抄袭其开源代码:金色财经报道,以太坊扩容解决方案Polygon背后公司发布博客文章称,zkSync rollup背后团队Matter Labs抄袭Polygon的部分开源代码,而且没有提供出处。
区块链项目经常根据开源软件许可证发布其代码,这意味着外部开发人员可以阅读、复制,甚至(在某些情况下)为公司的原始代码库做出贡献。然而,社区规范和大多数开源许可证通常要求第三方开发人员在使用源自其他地方的代码时予以标注。
Polygon表示,Matter Labs最近发布了一个名为Boojum的证明系统,其中包括一些从Polygon的“Plonky2”软件库复制粘贴的源代码。Polygon表示:“该代码没有原始版权,也没有明确归属于原作者”。该团队表示,在没有注明出处的情况下复制粘贴源代码并对原始作品做出误导性的声明违反了开源精神,并损害了生态系统。[2023/8/4 16:17:45]
每秒可完成大约47笔“简单转账”事务。所谓“简单转账”事务,就是指“A向B转了一笔ETH”这样最基础的事务。每笔事务需要2.1万gas。每秒可完成大约16笔ERC20代币转账。这类事务相比ETH转账事务需要执行更多存储操作,因此每笔事务需要约6万gas。每秒可完成大约10笔Uniswap资产交换操作。代币对事务的平均成本约为10.2万gas。……选择你感兴趣的事务,用100万gas除以其gas消耗量。请注意,随着事务的执行复杂度提高,系统的吞吐量急剧下降。还有很大的提升空间!
方案1:使用中间方我们可以使用大家都信任的第三方来达成所有事务。这样一来,我们就可以得到很高的吞吐量,并将延迟降至亚秒级。简直太棒了!这样也不会改变任何系统参数,但是我们需要参与一个由第三方单方面设置的信任模型。第三方可能会对我们进行审查,甚至夺走我们的资产,这就不妙了。
方案2:扩大区块容量并提高出块频率我们可以通过减少出块时间来降低时延,我们还可以通过提高区块gas上限来提高吞吐量。这一改变可能会导致节点运营成本提高,从而阻碍人们运行节点。方案1会提高对信任的需求,方案2会增加成本。因此,二者都不是理想的可扩展性方案。
交易员:虽然ADA短期前景似乎黯淡,但必须记住支持Cardano项目的创新技术:金色财经报道,交易员Arman Shirinyan表示,虽然ADA短期前景似乎黯淡,但必须记住支持 Cardano 项目的创新技术。其股权证明区块链平台专为安全性、可扩展性和可持续性而设计,在实际应用方面有很大的优势。 然而,接下来的几周,甚至几个月,对于 Cardano 的持有者来说将是艰难的,尤其是在 SEC 与 Binance 和 Coinbase 的持续斗争中。投资者应保持谨慎,尽量避免不必要的风险。[2023/6/12 21:30:28]
重新认识OptimisticRollup
接下来会涉及一些关于哈希函数和默克尔树的知识。了解了这么多之后,我们来模拟一段苏格拉底式对话,看看能否找到一个既能提高以太坊的实际吞吐量,又不会增加用户和节点运营者负担的协议。
问:我们想要提高以太坊的可扩展性,又不想改变其信任和成本假设。我们该怎么做?
答:可以尝试降低现有操作的成本。不过,说起来容易做起来难,我们先来看一下以太坊的架构:以太坊网络中的每个节点目前都存储并执行来自用户的每笔事务。事务是在EVM中执行的,并与EVM的状态进行交互。常见的智能合约优化技术主要聚焦于在最大程度上减少与状态交互的次数,但是它们起到的作用很有限。
问:是否存在不与状态交互就能达成交互的方法,以此降低资源成本?
答:在极端情况下,我们是否可以将所有执行都转移到链下,并将数据保存在链上?我们可以引入第三方,即,排序者,来做到这点。排序者负责在本地存储并执行用户提交的事务。为了保持系统的活性,排序者会定期将它们收到的事务的默克尔根以及状态根提交到以太坊上。这个思路是正确的,因为O(N)笔链下事务只需在以太坊上存储O(1)的状态数据。
问:通过使用排序者执行链下计算,只将默克尔根发布到链上,我们就能增强以太坊的可扩展性了是吗?
答:是的。
问:也就是说,只要我们选择了排序者,就能大幅降低转账成本。那用户怎么存钱进去呢?
美SEC对Coinme和相关被告处以近400万美元的罚款:金色财经报道,美国证券交易委员会对总部位于西雅图的 Coinme 和相关被告处以近 400 万美元的罚款,SEC表示,Coinme 的 Up Global 部门和领导这两个实体的 Neil Bergquist 于 2017 年末在以太坊区块链上的 UpToken 首次代币发行中误导了投资者。
SEC 表示,投资者被引导相信 Up Global 将限制 UpToken 的供应,而 Coinme 将创造对 UpToken 的持续需求,为比特币自动柜员机奖励计划提供资金,从而帮助推高 UpToken 的价格。根据监管机构的说法,这些说法具有误导性,它还表示,Up Global 和 Bergquist 错误地告诉投资者此次发行筹集了 1000 万至 1890 万美元,但实际上筹集的资金只有 365 万美元。Coinme 和 Up Global 将总共支付 377 万美元罚款, Bergquist 将支付 15 万美元,35 岁的Bergquist 被禁止担任上市公司高管或董事三年。[2023/4/29 14:34:14]
答:你在以太坊区块链上把钱存进某个合约,就能加入这样的系统了。排序者会将相应的存款记在你的名下。用户只需要发送一笔事务称“我想要取出3ETH,我当前的账户余额大于3ETH,这是证明”,就可以取出资金。即使L1上没有该用户的实际状态,该用户也可以提供默克尔证明并引用排序者发布的状态根来证明自己在当前状态下拥有足够多的资金。
问:我们已经确定用户需要提供默克尔证明才能取出资金。用户如何获得构建默克尔证明所需的数据?
答:用户可以要求排序者来提供数据!
问:如果总是联系不上排序者,该怎么办?
答:这种情况可能是因为排序者作恶,或因技术问题掉线,这会导致性能退化。因此,我们必须要求排序者将完整的事务数据提交到链上,只用于存储,不用于执行。这里的目的是实现数据可得性。由于所有数据都永久存储在以太坊上,即使一个排序者倒下了,新的排序者也可以从以太坊上重新找回所有与Layer2相关的数据,重新构建最新的L2状态,并接替上一个排序者的工作。
问:如果排序者在线却拒绝向我提供默克尔证明数据,我可以从以太坊上下载这些数据对吗?
答:对的,你可以自己同步一个以太坊节点,也可以从众多节点托管服务提供商中选择一家。
问:我还有个不明白的地方……如何将数据存储在以太坊上却不执行它?难道不是每笔事务都要经过EVM执行的吗?
答:假设你提交了10笔A向B转ETH的事务。执行每笔事务需要执行以下操作:增加A的nonce,减少A的余额,并增加B的余额。这需要多次写入和读取世界状态。你可以将所有事务的编码发送至智能合约的publish(bytes_transactions)public{}函数。请注意,这个函数的函数体是空的!也就是说,如此发布的事务数据是不会被解释、执行或访问的。它只存储在区块链的历史日志中。
问:我们能信任排序者吗?如果排序者发布非法的状态转换怎么办?
答:无论排序者何时发布一批状态转换,都会有“争议期”。在“争议期”内,任何人都可以发布“欺诈证明”来证明其中某个状态转换是无效的。欺诈证明就是通过重放导致链上发生状态转换的事务,并将得到的状态根与排序者发布的状态根进行对比。如果两个状态根不同,则欺诈证明成功,状态转换被取消。跟在该无效状态转换后面的状态转换也会被取消。争议期一过,就无法再对事务提出争议,即,事务被敲定。
问:等等!你之前明明说过,只要会增加成本,或引入新的信任假设,就是不可行的可扩展性方案。你这里提到的方案不是要假设时刻有人会报告欺诈吗?
答:没错。我们假设有一组被称为“验证者”的实体负责监控欺诈行为。如果Layer1和Layer2之间出现状态不匹配的情况,验证者就会发布欺诈证明。我们还假设验证者能够在争议期内将其欺诈证明发布到以太坊区块链上。我们认为,验证者的存在是一个弱假设。想象一下,如果有数万名用户采用该方案,你只需要1个人来担任验证者的角色。听起来不是那么不切实际吧!另外,改变以太坊的信任模型,或增加运行以太坊节点的成本是一个强假设,会做出我们不想要的改变。这就是我们的中心化可扩展性定义中的“几乎不会改变底层系统的设想”的意思。
问:我同意会有人担任验证者的角色,因为这个新的解决方案牵涉到很多人的利益。但是,具体怎样还得取决于实际成本。那么,运行验证者和排序者需要消耗多少资源?
答:排序者和验证者必须运行一个以太坊全节点,以及一个L2全节点来生成L2状态。验证者运行创建欺诈证明的软件,排序者运行打包并发布用户事务的软件。
问:就这些吗?
答:没错!恭喜!你已经重新发现了?OptimisticRollup,这个2019至2021年最有前景的可扩展性方案。我可没有在说大话,这是以太坊社区经过多年研究得出的成果。也就是你在这段简短的对话中听到的。
OptimisticRollup的激励机制
Layer2可扩展性方案基于这样一个事实,即,我们试图尽可能减少链上执行的事务的数量。我们使用欺诈证明来取消已发生的无效状态转换。由于欺诈证明是链上事务,我们想尽可能减少在以太坊上发布的欺诈证明的数量。在理想情况下,欺诈永远不会发生,也就不会有欺诈证明发布。
我们通过引入诚信保证金来反激励欺诈行为。想要成为排序者的用户必须首先在以太坊上存入一笔保证金。如果他们的欺诈行为被证明,就会失去保证金。为了激励用户积极发现欺诈行为,排序者的保证金会被奖励给验证者。
诚信保证金和争议期
在欺诈证明激励机制的设计中,有两个参数需要设计:
诚信保证金金额:排序者所缴纳的保证金就是验证者所能获得的奖励。金额越高,对验证者的激励越大,对排序者作恶的激励就越小。争议期持续时间:可以发布欺诈证明的时间窗口。一旦过了这个时间窗口,L2事务就会在L1上敲定。如果争议期较长,就会提高安全性,更好地抵御审查攻击。如果争议期较短,用户在将L2上的资金取出到L1时就能享有更好的用户体验,因为他无需等待很长时间就能在L1上使用这笔资金。我认为,这两个参数都没有所谓正确的静态值。或许10ETH的保证金和1天的争议期就足够了。真正的答案是,这取决于成为验证者的激励,以及发布欺诈证明的难度。这些都是可以手动或自动调整的。例如,EIP1559在以太坊上引入了?BASEFEE?操作码。这个操作码可以用来预测链上拥堵程度,让争议期的长度也变成可编程的。正确地实施这一惩罚机制很重要,否则就有可能在实际操作中被利用。例如,这里有一个不可行的原生实现:
Alice缴纳1ETH的保证金,成为了排序者Alice发布了一个虚假状态更新Bob发现了,并提出争议。如果成功,Alice的1ETH保证金就会奖励给Bob,虚假状态更新也会被取消。Alice发现该争议,也提出争议Alice拿回了自己的1ETH,成功逃避了原本会因作恶遭到的惩罚。Alice可以通过“抢跑事务”来发起这一攻击,即,广播一个跟Bob一样的事务,但是支付更高的gas价格,让自己的事务抢在Bob的前面执行。这意味着,Alice可以一直以极低的成本作恶。解决这个问题很简单:不要将作恶者的全部保证金奖励给提出争议者,而是将其中X%销毁。在上述例子中,如果我们将保证金的50%销毁,Alice只能通过抢跑事务拿回0.5ETH,这就足以吓阻Alice在上述第2步中作恶。当然了,保证金销毁机制也会削弱人们运行验证者软件的激励,因此销毁后剩下的部分要足以激励验证者才行。
对OptimisticRollup批评的回应
我们已经了解了OptimisticRollup的设计。现在,让我们来听听人们对OptimisticRollup的批评,并做出回应。
较长的取款/争议期不利于采用和可组合性
我们在上文提到,较长的争议期有助于提高安全性。这里面似乎有一个内在权衡关系:较长的争议期不利于OR采用,因为任何想要从OR中取出资金的用户都需要等待很久。较短的争议期会带来较好的用户体验,但是这会提高未能及时对欺诈提出争议的风险。我们不认为这是个问题。由于取款延迟较长,我们预期将有做市商提供快速取款服务。这是有可能的,因为验证L2状态的人能够正确判断取款是否存在欺诈性,从而以略低一些的价格买下这笔取款。例如:参与方:
Alice:在L2上有5ETHBob:在L1上的“做市商”智能合约中有4.95ETH,是L2的验证者步骤:
Alice告诉Bob说她想要快速取款,并向他支付0.05ETH的费用Alice向Bob的“做市商”智能合约发起一笔取款事务可能会发生两种情况:Bob在L2上验证这笔取款是有效的,并同意Alice的快速取款请求。做市商合约中的4.95ETH立即发送至Alice在L1的地址。等争议期结束,Bob就能获得5ETH,获得一笔不菲的利润。Bob在验证时发现这笔取款是无效的。Bob对这笔事务的状态转换提出争议,取消该状态转换,并得到了试图作恶的排序者的保证金作为奖励。如果Alice是诚实的,就能立即完成取款;如果她想要做恶,就会遭到惩罚。我们预期,如果真的存在对快速事务服务的需求,支付给做市商的服务费会逐渐降低,最终让用户完全感受不到这一过程。快速事务服务带来的最重要影响是,可以实现与L1合约的可组合性,无需等待整个争议期结束。注:该技术首次出现于《简单的快速事务》一文。
矿工会受贿审查取款事务,破坏OR的安全性
《OptimisticRollup上几乎零成本的攻击场景》指出,排序者可以轻而易举地贿赂以太坊矿工来审查争议事务。对于OptimisticRollup系统来说,这会是致命的,因为整个系统的安全性源自争议机制。我们不认同这个观点。我们认为诚实一方会出与恶意一方同样乃至更多钱的来贿赂矿工。此外,矿工每次助纣为虐时都会产生额外的成本。这会影响以太坊的价值,从而影响矿工自身的利益。事实上,已经有学术文献研究过这一场景,结果证明“这种反击的威胁会产生一种子博弈精炼纳什均衡,因此攻击从一开始就不会发生”。感谢Hasu向我们推荐了这篇文章。
验证者的两难困境会带来反向激励,降低OR的安全性
关于验证者的两难困境,EdFelten已经在他的雄文中分析过了,并提出了解决方案。我们总结如下:
如果系统的激励机制如预期般运行,没人会做恶如果没人作恶,运行验证者软件就没有意义,因为无法带来收益如果没人运行验证者软件,排序者就会有机会做恶如果排序者做恶,系统就不会再如预期般运行这个问题看起来很重要,而且似乎是一个悖论!假设总的奖励金额是固定的,验证者人数越多,每个验证者的预期收益越低。另外,如果验证者人数增多,总的奖励金额有可能减少,因为欺诈行为会减少,导致验证者的收益更低。在接下来的分析中,Felten提出了如何解决验证者两难困境的方法。我要提出反对意见,我认为验证者两难困境不像批评者说的那么严重。实际上,验证者靠的不是经济激励。假设你在rollup上构建了一个大型应用,或者你是持币者。如果这个系统被破坏,你的应用就无法运作,你的代币就会丧失价值。此外,对快速取款的需求会催生做市商服务,这与是否存在欺诈行为无关。举个现实的例子,比特币就没有通过经济激励的方式来鼓励节点运营者存储完整的区块链事务史,或将本地数据提供给对等节点,但是人们还是会无私地做这些事情。即使不为运行验证者提供经济激励是激励不兼容的,但是它可以保障系统的安全性,这对于投资该系统的实体来说是很重要的。因此,我们认为,OptimisticLayer2系统不需要通过设计机制来解决验证者两难困境问题。
总结
就像文章标题说的那样,我们分析了2021年对以太坊来说最重要的技术之一:OptimisticRollup。OR的优点包括:它是对以太坊的扩展,集成了以太坊的安全性和可组合性,以及开发者优势。与此同时,它还能提高以太坊的性能,而且几乎不会增加以太坊用户的成本或信任需求。我们探索了让OR可行的激励机制,并对常见的批评观点提出了反驳。我们想要强调的是,OR的性能上限是L1上能够承载的数据量。因此,我们最好能做到两点:1)尽可能压缩你在L1上发布的数据,2)拥有一个大且低成本的数据层。如需补充阅读,我们推荐Vitalik的《Rollup不完全指南》和《信任的模式》。我们还建议你了解一下另一个rollup方案ZKRollup。我们的朋友StarkWare正在构建ZKRollup方案。最后,还有其它方法可以实现去中心化可扩展性,如,分片和状态通道。它们都有各自的优缺点。在下一篇文章中,我们将深入分析由Optimism构建的首个兼容EVM的OR方案的机制和代码库。我们想要感谢Hasu、PatrickMcCorry、LiamHorne、BenJones、KobiGurkan和DaveWhite对本文的宝贵反馈。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。