0898-08980898
本文摘要:此刻正在读者这篇文章的你一定早已听闻过 optimistic rollup 了吧。
此刻正在读者这篇文章的你一定早已听闻过 optimistic rollup 了吧。它是一个前途无量的新型配套方案,在 2019 年的 DevCon 上引起了冷淡辩论。目前早已有很多文章说明了该技术的工作原理,却没一篇文章来说明其背后的 原因。这就造成有很多团队都在尝试用自己的方式来构建 optimistic rollup ,这种各自为政的研发模式一般来说有利于整个加密货币经济系统的安全性。
本文探讨于那个被大众忽视的问题:说明 optimistic rollup 为何能以安全性且可持续的方式构建配套,同时又能维持去中心化的特性。何为 Optimistic Rollup ?我在 2019 年 6 月编写了 optimistic rollup 的首个大于不切实际规范,为我早些时候与 Mikerah 年出版的论文《建构可拓展的去中心化缴纳系统》获取了一个明确的参数化高级规范。该规范目的构建区块链发展史上的第一条具备免除许可性和可扩展性的免除信任型侧链。-我说道的 “rollup” 不是可以不吃的这种 -optimistic rollup 的运作方式如下:任何人都可以在需要许可地递交一个侧链区块,将整个区块作为尚待检验(即尚待默克尔化)的调用数据(calldata)公布到链上,并缴纳保证金。
一个新的侧链区块不能链接到侧链的末端,由链上合约展开跟踪(从最修改的看作,该合约就像在运营一个侧链的重客户端,存储着侧链区块头的哈希值)。一段较长的时间过后(这是一个系统参数,但必须充足宽,例如一至两周),侧链区块不会被确认下来,之后就不会归还保证金。
从侧链中存款返回主链上的操作者要在侧链上发动,只需获取对一个已确定的侧链区块的非交互式包括证明(non-interactive inclusion proof)才可。如果一个侧链区块是违宪的,且还没获得最后证实,只要递交一个非交互式错误性证明,回滚这条侧链的末端,这个区块连同其之后的区块都会沦为孤块。保证金不会被封存一半,另一半则奖励给获取错误性证明的人。
这就构建了一条信任最小化的双向资金桥梁。到底,就是这么非常简单。
那之前 为什么 仍然没有能构建呢?我来说明下:为什么要这么设计 Optimistic Rollup?事实证明,optimistic rollup 和之前的配套方案之间不存在一些微小差异,使前者沦为了最有前途的短期至中期配套方案,让后者沦为了历史。这一节不会讲解这些最重要差异背后的成因。
拆分共识optimistic rollup 最引人注目的一个特点是拆分共识(merged consensus)。拆分共识是一种可在链上检验的共识协议(除此之外还有确实的区块检验,它是通过隐式的错误性证明来已完成的)。
但什么是去中心化共识协议呢?去中心化共识协议包括以下几个互相独立国家的功能:· 末端自由选择规则(如何在两条都遵从了共识规则而构成的链之间自由选择出有一条链)· 区块有效性函数(状态切换函数)· 领导者议会选举算法(通过该算法议会选举出有一位领导者来分解新的区块,链接到区块链的末端,从而减少区块链的高度,或者说减少其长度)· 外用女巫机制(工作量证明、权益证明等)上述功能确保了区块链的经济 安全性 :操控历史是要付出代价的。(留意:为了非常简单起见,这里我忽视了一些事实,例如,一些去中心化共识协议是无领导者的)。
在 optimistic rollup 方案中,侧链是会经常出现末端的,因此不必须末端自由选择规则。区块有效性是在链下计算出来的,而且可以在链上用错误性证明来证明其不正确性。只剩还有领导者议会选举和外用女巫反击的问题必须解决问题。我所明确提出的规范建议使用 “再行到再行得” 机制,即在任一高度上,缩短侧链长度的首笔交易会被接纳。
领导者议会选举是隐式的,而且事后才会见出有分晓,而外用女巫反击是通过主链构建的(即,交易费和 区块大小/Gas 下限)。如此非常简单的领导者议会选举规则为何能起着起到?因为以太坊区块链早已获取了安全性。
只有经常出现以下三种情况之时,才能将外侧链上的某个区块变为孤块:1)该区块是违宪的;2)该区块的某个祖先区块是违宪的;3)以太坊区块链再次发生重组。因此,有效地的区块也不具备与以太坊同等程度的确定性和安全性!因此,我们不必须简单的领导者议会选举算法,或是成本高昂的抗女巫反击机制来确保安全性。
侧链需要代价额外的成本才可取得安全性,因此我们可以很大地修改系统参数的设置。但是,如果我们想一种能提早告诉领导者的方案,该怎么改建呢?一个建议是,可以在链上运营 PoS + RANDAO 来展开领导者议会选举。
这种情况下,并不需要划入另一种代币,否则还不会产生负面影响。正如比特币白皮书中所言:如果一个自私的攻击者所享有的 CPU 算力多达了所有真诚节点的算力之和,他就能自由选择发动双花反击,或是分解新的代币。他理所当然找到遵守规则对自己最不利,因为比起于毁坏整个系统以及假造个人资产来说,遵守规则能让他取得比其它矿工特一起都多的区块奖励。
正如中本俊所说,原生代币的全部意义就是鼓舞 “真诚的大多数” 来维护整个系统。在 optimistic rollup 中没所谓 “真诚的大多数”,也没独立国家于主链的安全性概念,因此几乎没有适当再行划入一种原生代币,否则非但会有任何助益,相比仅有用于以太币来说更加不方便。
要留意的是,只要是几乎在链上运营的领导者议会选举机制都可以使用,不仅仅限于我在本文引荐的那些。例如,焚毁证明(Proof-of-Burn)就是其中之一。optimistic rollup 虽然与延后状态继续执行(delayed state execution)和影子链(shadow chain)等建议有诸多类似之处,但是众多关键的区别在于拆分共识的概念。
optimistic rollup 的共识协议是几乎在链上的智能合约之内运营的;因此,它会影响到主链的共识规则,也不必须获得其反对。互为较之下,延后状态继续执行和影子链实施的是链上自动状态切换,必须获得主链共识协议和协议内奖惩机制的具体反对。
可持续配套现在我们早已明白 optimistic rollup 是如何通过拆分共识构建免除许可性及其背后的原因了,那么它是如何构建可持续配套的呢?在编写本文之时,未压缩的以太坊状态(用户余额和合约存储)大小在 45GB 左右。不同于(交易和区块之类的)历史数据,状态是不需要被移除的——必需由全节点原始地留存下来,以便检验(即,继续执行)新的区块中的新交易。
更加差劲的是,为了检验交易,必需对状态展开很多次随机采访,因此必须将状态存储在 RAM —— 大多数消费级硬件都约将近这个条件 —— 或一个较慢的 NVMe 固态硬盘上。状态快速增长是以太坊遇上的仅次于的配套瓶颈。
我们当然可以为状态大小原作一个硬性下限,这样就可以不必担忧状态快速增长问题了,确实的解决方案是实施状态出租机制,持续向状态的使用者缴纳费用。然而,在以太坊上部署该机制比想象中更加艰难,早已被无限期延期了(编者注:中译本闻文末超链接《论状态租金和 Stateless Ethereum》)。有一个很简单的解决方案,可以通过减慢状态快速增长的速度来解决问题这一问题。那就是用于区块链作为数据可用性层。
这种模式最初是由 zk rollup 推展用于的:将外侧链交易数据作为调用数据公布到主链上,然后用于有效性证明或错误性证明来保证该数据的正确性。结果证明,存储历史数据的成本比存储状态要较低得多(较低几个 数量级 )。之后,可以通过主链来保证数据可用性,跟踪 rollup 链的区块头,处置存取款,并检验 有效性证明/错误性证明,这些都不必须大量用于状态。
通过减慢状态快速增长,配套就可以构建长年可持续性。Vitalik 之前写出过一篇很好的文章,总结了如何将链上数据可用性运用到 zk rollup 和 optimistic rollup 上。要留意的是,虽然有人认为影子链是几乎等同于 optimistic rollup 的,这似乎是不该的。现在,我的点子是创立一条原始的 “影子链”,把计算出来放在链下展开,但是不会在分解 100 个区块之后向主链递交状态切换的允诺。
应验机可以将新的区块加到到这条链的末端,其中每个区块内都包括一个由交易构成的列表和一个由这些交易引起的状态切换 [[k1, v1], [k2, v2] ... ] 构成的列表。一个区块分解之后,不会有一个宽约 100 个区块的挑战期,在此期间都没遭挑战的话,状态切换不会被自动应用于到主链上。
除了并未被具体定义,影子链还不会自动在链上继续执行状态切换,会增进状态快速增长。optimistic rollup 会继续执行任何状态切换,除非有用户为此收费(即,存款)。非交互性 FTW对于 optimistic rollup 来说,非交互型错误性证明十分最重要。
为什么?非交互型错误性证明之所以如此最重要,是因为要防止 Plasma Cash 不存在的缺失之一,即,针对违宪历史的交互型解散挑战机制。这种交互型多步骤挑战机制造成 Plasma Cash 对链交通堵塞反击的抵挡能力较低。所谓的链交通堵塞反击所指的是攻击者为了盗取 Plasma 合约内的全部资金,向主链发送到大量 “解散” 交易(不过,Plasma Cash 对这些反击抵挡能力比 Plasma M(ore)VP 更高)。只必须一个非交互型错误性证明就可以将(单条侧链上)给定数量的违宪 optimistic rollup 区块变为孤块,使系统更加能抵挡链交通堵塞反击。
录:由于 optimistic rollup 用于了错误性证明,如果主链不具备外用审查性的话,仍然不存在资金遭窃的风险。在 optimistic rollup 中,付款也是通过非交互型的方式处置的:趁此机会在侧链上发动付款,然后针对主链上一个已获得最后确认的区块分解非交互型包括证明,再行利用这个证明来已完成付款。然而,这就拒绝侧链具备免除许可性,因此必须的是拆分共识,而非一个类似于 Plasma 的运营方。比起交互型检验游戏来说,非交互型错误性证明更加有优势。
交互型检验游戏所需的时间较为宽。鉴于 optimistic rollup 是会产生末端的,攻击者可以分解一个违宪的区块,利用检验游戏导致侧链停工,从而对系统发动 DoS 反击。有了非交互型错误性证明,就可以立刻证实欺诈不道德(然而,必须留意的一点是,错误性证明的证明范围比交互型检验游戏要较宽——至于这种局限性否知道对区块链应用于有相当大影响,这点有待辩论)。
交易延后问题Optimistic rollup 并会减少交易延后。每一个侧链区块都必须被递交到主链上,因此出块时间会高于主链。
除了用于足额质押的状态地下通道之外,暂不其他安全性且免信任的方式可以降低这种延后。不过,你不一定要等到侧链区块获得最后确认之后才拒绝接受它的交易。由于 optimistic rollup 会产生末端,顺利上链的有效地区块必定不会获得最后证实,而且该区块的所有数据均可取得(因为所有有效地区块都公布在链上),用户可以继续执行客户端检验,立刻拒绝接受该区块内的交易。
乍看之下,存款延后或许也是个问题,但事实并非如此。一般来说情况下,用户不必须等候其付款获得最后证实。事实上,较长时间的挑战期主要是为了保证加密货币经济安全性,一般来说都会用得上。
一种需要立刻存款的非常简单方法是,在主链或另一条链上与流动性提供者(或其他想在这条 rollup 链上存款的用户)展开原子互相交换 [参看链接中的 “较慢付款:流动性提供者” 一节]。数据可用性挑战我一开始的论文明确提出了解决问题数据可用性问题的三种方法:· 一直将所有数据都公布到链上· 利用数据可用性挑战,只在适当之时将数据公布到链上· 利用数据可用性证明数据可用性挑战或许是个比较简单靠谱的解决方案。
失望的是,如果是由被反击方来开销挑战费用的话,他们就不会蒙受损失;如果是由反击方来开销挑战费用的话,整个系统就不会每时每刻将所有数据都公布到链上。因此,在设计规范之时,optimistic rollup 的自由选择是一直将所有数据都公布到链上,并以高效率低成本的方式来构建。
不过后来,在 optimistic rollup 上用于数据可用性证明也显得不切实际了。更进一步改良我早已基于大于规范的初始版本编写了性能改良方案,并总结如下。
请注意,重点环绕的是基于 UTXO 的缴纳,而非一般的智能合约继续执行。以太坊 1.0 上的多线程数据可用性 —— 数据检验(即,展开哈希运算)和其它预处理步骤都是显函数,因为它们显然不牵涉到任何状态。因此,这些步骤都是可以分段的。
按照这种方式来用于以太坊将很大增加状态的用于和快速增长,如果用于的是四核计算机,那么数据可用性吞吐量可以减少四倍。我的计划是通过几个 EIP 来构建这一点,第一个就是 EIP-2242:交易 Postdata。
需要将中间状态序列化的 UTXO 链紧凑型错误性证明 —— 针对以太坊智能合约的通用型错误性证明成本很高。在 UTXO 数据模型内,每个 UTXO 最多不能创立并消耗一次,每个交易都会原始叙述状态切换。
区块生产者可以将元数据加到到每个输出上,声明这个输出是由一个特定的输入分解的。如果这种声明有拢,则这种错误性是可以通过非交互的方式来证明的。我在另一篇文章中新的分析了 BIP-141 中提及的错误性证明机制。
用于默克尔累加器的无状态查找平行交易检验(无状态查找的客户端)—— 状态查找是十分便宜的。无状态客户端就是通过避免对状态的用于来降低成本。
但我们可以做非常简单一点:只需免职状态查找才可。“亲眼数据(witness)” 是会立刻过期的,其有效性不会持续几个区块。这些 “亲眼数据” 必需根据近期几个区块的状态切换展开较为,而状态切换可以在 UTXO 数据模型中通过无状态计算出来得出结论。
链上非交互型数据可用性证明 —— 如果自始至终都将数据上链的话,不会带给极大的成本,还不会造成 optimistic rollup 不能构建线性拓展(像 Plasma 这种几乎坐落于链下的技术就会有这个问题,网卓新闻网,而 Plasma Cash 的检查点机制也是线性的)。我们可以将共识节点展开可用性检查的能力通过一个 FFI 函数回应出来(例如,通过实编译器的方式),就可以在需要展开分片的情况下取得二次方的可扩展性。这是 LazyLedger 等系统的核心思想,即,以低成本的方式大幅提高数据可用性。然而,不同于 LazyLedger ,在以太坊上构建这一思想并会像前者那样不具备纵向拓展属性。
通过停工构建免除信任型双向桥外侧链 —— 用于错误性证明的双向桥外侧链必需仍然维持在线,这点对用户来说有可能有些不便。虽然瞭望塔呼吸困难用作 Plasma Cash ,但它可以应用于到 optimistic rollup 上。
但是,我们可以做到得更佳:可以在侧链运营一段时间后几乎停工,然后向用户获取一个较长的窗口期(宽约数月之幸),以便用户递交错误性证明来要求有效地的区块。这段用户必需在线的窗口期是未知且受限的。等窗口期完结之后,才容许存款。
如果用户想早于一点存款的话,可以与流动性提供者展开原子互相交换。建构 Optimistic Rollup 的团队自从几个月之前第一版 Optimistic Rollup 最小化规范编写已完成以来,我愿找到很多研发团队都开始建构 Optimistic Rollup 的构建了,其中经历了很多波折和改动。下面是一张不几乎列表,列出了我们目前看见的正在建构 Optimistic Rollup 的研发团队(名列不分先后)。
Fuel —— 探讨于平稳币缴纳的 UTXO 数据模型。可以用来展开给定的 ERC-20 代币或 ETH 账户,或是展开原子互相交换,未来还可以用来展开 “断言” 脚本编写。该模型将要上线长年公共测试网(编者注:Fuel 现打开公开发表测试网)。
Plasma Group —— 在 OVM (Optimistic Virtue Machine)环境下的通用型类 EVM 智能合约,早已在 Devcon 5 上宣告与 Uniswap 达成协议合作。Arbitrum —— 用于了交互型检验游戏机制的通用型智能合约。除此之外,新的 Arbitrum rollup 设计与 optimistic rollup 大致相同。Interstate Network —— 用于错误性证明的通用型类 EVM 智能合约。
SKALE —— 用于 BLS signature 单体的 Optimistic rollup。NutBerry —— 用于了交互型检验游戏机制的通用型类 EVM 智能合约。
IDEX —— 为 IDEX 交易所建构了 “优化型 Optimistic Rollup”。结论随着各种各样的 optimistic rollup 构建项目上线,接下来的一年以太坊将再次发生极大转变,其吞吐量将获得大幅提高,并在数据可用性方面更进一步构建可持续配套。我在本文中没将 optimistic rollup 与 zk rollup (这一概念最初叫做 roll_up ,由 Barry Whitehat 明确提出,之后由 Vitalik 改良成 zk rollup )展开对比。
如果你回应感兴趣的话,可以看一下 Alex Gluchowski 写出的这篇文章(编者注:中译本闻文末超链接《Optimistic Rollup vs. ZK Rollup:一探到底》)。感激 Mikerah Quintyne-Collins、James Prestwich、Robert Drost 和 Joseph Chow 的审校。
本文来源:雷火体育-www.jiudingai.com