Celestia 研究员分析 6 种 Rollup 变体:Sequencer=聚合器+Header 生成者
作者:NashQ,Celestia研究员
原文标题:Redefining Sequencers: Understanding the Aggregator and the Header Producer
编译:Faust,极客Web3
译者注:出于让Rollup模型更容易理解、更方便剖析的目的,Celestia研究员NashQ将Rollup的定序器(Sequencer)分成了两个逻辑实体——聚合器和Header生成者。同时,他将交易排序过程分为了三个逻辑步骤:包含、排序和执行(inclusion, ordering, and execution)。
在这种分析思路引导下,主权Rollup的6大重要变体更加清晰易懂。NashQ细致讨论了不同Rollup变体的抗审查性和活性,还探讨了每种Rollup变体的节点在信任最小化状态下的最低配置(就是指要达到Trustless状态,Rollup用户至少要运行哪些类型的节点)。
虽然本文是站在 Celestia 的视角解析 Rollup ,与以太坊社区分析 Rollup 模型的方式有所不同,但考虑到以太坊 Rollup 与 Celestia 主权 Rollup 的诸多互通之处,以及后者日益增强的影响力,对于以太坊爱好者而言,此文也极其值得一读。
什么是 Rollup ?
Rollup 是将其“交易数据”发布到另一个区块链并继承其共识和数据可用性的区块链。
为什么我特意使用“交易数据”这个词而不是“区块”呢?这涉及到 rollup 区块和 rollup 数据之间的区别,最简洁的 rollup 只需要像下文中第一种变体那样的 rollup 数据。
Rollup区块是一种数据结构,它表示某个区块高度下的区块链账本。 Rollup 区块由 rollup 数据和 rollup header 组成。其中,Rollup数据可以是一批交易,或一批交易间的状态变化。
变体1:悲观 Rollup / Based Rollup
构建Rollup的最简单方法是让用户将交易发布到另一个区块链上,我们将后者称为共识和数据可用性层( DA - Layer ),在下面我会简称为DA层(译者注:近似于以太坊社区常说的Layer1)。
在我要介绍的第一种 Rollup 变体中, Rollup 网络的节点必须重新执行 DA 层包含的 Rollup 交易,以检查账本的最终状态。这便是悲观 Rollup !
悲观 Rollup 是一种只支持全节点的 Rollup ,这些全节点需要重新执行 Rollup 账本包含的所有交易以检查其有效性。
但在这种情况下,谁充当了Rollup的定序器Sequencer?实际上除了Rollup的全节点以外,没有任何实体执行过Rollup账本包含的交易。一般来讲,定序器会聚合交易数据,并生成一个 Rollup header 。但上文所说的悲观Rollup没有Rollup header!
为了方便讨论,我们可以将定序器拆分为两个逻辑实体:聚合器 Aggregator 和 Header 生成者。要生成Rollup Header,必须先执行交易,完成状态转换再计算得到对应的Header。但对于聚合器,它不需要完成状态转换,就可以进行聚合步骤。
排序 Sequencing 就是“聚合 + 创建 Rollup Header ”的过程 。
聚合 aggregation 是将交易数据批量打包为一个批次Batch的步骤。一个批次一般包含很多笔交易(译者注:Batch就是Rollup区块中除Header以外的那部分数据)。
Header 生成步骤则是创建Rollup Header的过程。Rollup Header是关于Rollup区块的元数据,至少包含了对该区块中交易数据的commitment(译者注:这里说的commitment是指对交易处理结果正确性的承诺)。
通过上述视角,就可以看出 Rollup 的各部分组件都由谁来充当。首先来看聚合器 Aggregator 这部分。前面提及的悲观 Rollup 没有 Header 生成过程,用户将交易直接发布到 DA 层上,这意味着 DA 层网络实质就充当了聚合器。
所以,悲观 Rollup 就是将聚合步骤委托给 DA 层的 Rollup 变体,它没有定序器 Sequencer 。有时候这类 Rollup 被称为“ based rollup ”。
Based Rollup具备和DA层相同的抗审查性及活性(活性衡量系统对用户请求的反馈速度)。此类 Rollup 的用户如果要达到信任最小化(最接近 Trustless )的状态,至少要运行一个 DA 层网络的轻节点,及 Rollup 网络的全节点。
变体2:使用共享聚合器的悲观汇总
让我们讨论一下使用共享聚合器的悲观汇总。这个构思由Evan Forbes在其关于共享定序器设计的论坛帖子中提出。其关键假设是,共享定序器是为交易排序的唯一正规途径。Evan如此解释共享定序器的好处:
“为了达到与Web2等效的用户体验,共享定序器可提供快速生成的 Soft Commitment (不是很可靠的保障)。这些 Soft Commitment 提供了关于最终的交易次序的一些保障(就是承诺交易次序不会改变),并且可让 Rollup 账本状态更新的步骤提前进行(但此时还没完成最终确定 Finalize )。
一旦 Rollup 区块数据确认发布到了基础层 Base Layer (此处应指 DA 层), Rollup 账本的状态更新就完成了最终敲定 Finalize 。”
上述Rollup变体仍然隶属于悲观Rollup范畴,因为这类 Rollup 系统中只有全节点,没有轻节点。每个Rollup节点都要执行所有的交易,来保证账本状态更新的有效性。因为这类Rollup没有轻节点,就不需要Rollup Header,也就不需要Header生成者。(译者注:一般而言,一条区块链的轻节点不需要同步完整的区块,只接收区块头即可)
由于没有 Rollup Header 生成这个步骤,上述 Rollup 的共享定序器可以不必执行交易进行状态更新(生成 Header 的先决条件),而只包含聚合交易数据的过程。所以我更倾向将其称为共享聚合器 shared aggregator 。
在这种变体中, Rollup 用户在信任最小化状态下,至少需要运行
DA 层轻节点+ 共享聚合器网络的轻节点 + Rollup 全节点。
此时,需要通过共享聚合器网络的轻节点来验证发布的 aggregator header (这里指的不是 Rollup Header )。上面提到,共享聚合器承担了交易排序的工作,它在发布的 aggregator header 中,包含了一个密码学 commitment ,对应着 DA 层上它发布的 Batch 。
这样一来, Rollup 节点运行者可以确认,自己从 DA 层收到的批次 Batch ,是由共享聚合器创建的,而非其他人。
(因为上文包含的内容比较晦涩,可再看一遍示意图)
包含 Inclusion 是将交易包含到区块链中的过程。
排序 Ordering 是指将交易按照特定顺序在区块链中排列的过程。
执行 Execution 是指处理区块链中的交易,完成状态更新的过程。
由于共享聚合器承担了包含和排序的工作, Rollup 的抗审查性就取决于它。
如果假设 L _ ss 是共享聚合器的活性, L _ da 是 DA - L ayer的活性,那么该 Rollup 模型的活性就是 L = L _ da && L _ ss 。换句话说,如果两个部分中任意一个存在活性故障,则 Rollup 也存在活性故障。
为简单起见,我将活性作为一个 bool 值来考察。如果共享聚合器故障了, Rollup 就无法继续运转。如果 DA 层网络故障了,共享聚合器可以继续为 Rollup 区块提供 Soft Commitment 。但此时, Rollup 的各项属性将完全取决于共享聚合器网络,而后者的各项属性往往远不及原本的 DA 层。
让我们来继续探讨上述 Rollup 方案的抗审查性:
在该方案中, DA 层不能对某些笔特定的交易进行审查(译者注:交易审查往往可以拒绝让某些交易上链),它只能针对共享聚合器提交的整个交易批次 Batch 展开交易审查(拒绝让某个 Batch 包含进 DA 层)。
但按照 Rollup 的工作流程,共享聚合器在向 DA 层提交交易批次 Batch 时,早已完成了交易排序,不同批次间的顺序也定完了。所以, DA 层的这种交易审查,除了延迟 Rollup 的账本最终性确认外,没有其他作用。
综上,我认为抗审查性的重点,是确保没有任何一个实体可以控制或操纵系统内的信息流通,而活性则涉及维护系统的功能和可用性,即使存在网络中断和对抗行为。虽然这与当前主流的学术定义冲突,但我仍然会使用我所阐述的概念定义。
变体 3:基于 Based Rollup 和共享聚合器的悲观 Rollup
尽管共享聚合器为用户和社区带来了好处,但我们仍应避免过度依赖它,并且要允许用户从共享聚合器撤出至DA层。我们可以将前面介绍的两种 Rollup 变体组合,在使用共享聚合器的同时,允许用户直接向 DA 层提交交易。
我们假设,最终的 Rollup 交易序列取决于共享聚合器提交的交易序列,以及用户在 DA 层区块中直接提交的 Rollup 交易。我们将这称作 Rollup 的分叉选择规则。
聚合在这里分成了两步。首先,共享聚合器发挥作用,聚合一些交易。然后, DA 层可以将共享聚合器提交的批次 Batch 和用户直接提交的交易进行聚合。
此时的抗审查性分析要更复杂些。DA层网络节点可能在下一个 DA层区块出块前,对共享聚合器提交的Batch进行审查,在知晓了Batch内的交易数据后,DA层节点可以提取MEV价值,先用自己在Rollup网络上的账户发起抢跑交易,并将其抢先包含至DA层区块,之后才包含Rollup共享聚合器提交的Batch。
显然,第三类 Rollup 变体的 soft commitment 保障的交易次序最终确定性,要比前面提到的第二类 Rollup 变体更脆弱。在这种情况下,共享聚合器将 MEV 价值拱手送给了 DA 层节点。对此,我建议读者观看关于利用有利可图的审查 MEV 的研究讲座。
目前已经有一些设计方案出现,以降低 DA 层网络节点执行此类 MEV 交易的能力,例如“重组窗口期”功能,这会使得 Rollup 网络用户直接向 DA 层提交的交易被延迟执行。 Sovereign Labs 在其名为 Based Sequencing with Soft Confirmations 的设计提案中详细描述了这一点,其中提出了“首选定序器”的概念。
由于 MEV 问题取决于 Rollup 选择的聚合器方案,以及 rollup 分叉选择规则,某些方案将不泄漏 MEV 给 DA 层,而一些方案将泄漏部分或全部 MEV 给 DA 层,但这是另一个话题。
至于活性,这种 rollup 方案比仅允许共享聚合器向 DA 层提交交易的方案更具优势。如果共享聚合器出现活性故障,用户仍然可以向 DA 层提交交易。
最后,让我们谈谈信任最小化下的 Rollup 用户最低配置:
至少要运行 DA 层轻节点 + 共享聚合器轻节点 + Rollup 全节点。
此时,仍然需要验证共享聚合器发布的 aggregator header ,使得 rollup 全节点能够根据分叉选择规则区分交易批次。
变体4: Optimistic Based Rollup 和中心化的 Header 生成者
让我们讨论一种被称为Based Optimistic Rollup 的变体及中心化的Header生成器。这种方案使用 DA 层聚合 Rollup 交易,但引入了一个中心化的 Header 生成器来生成 Rollup Header ,以启用 Rollup 轻节点。
Rollup 轻节点可以通过单轮欺诈证明,间接检查 Rollup 交易的有效性。轻节点会对 Rollup Header 的生成者持乐观态度,并在欺诈证明窗口期结束后进行最终确认。另一种可能是,它从诚实的全节点那里接收到欺诈证明,得知 Header 生成者提交了有错误的数据。
我不打算在此文详细介绍单轮欺诈证明的工作原理,因为这超出了本文涉及的范围。单轮欺诈证明的好处是可以将欺诈证明窗口期从7天缩短到一定程度,具体的数值有待确定,但数量级比传统的乐观rollup更小。轻节点可以通过 Rollup 全节点组成的 P 2 P 网络获取欺诈证明,而不需要等待后续的争议过程,因为所有的判据都在单个欺诈证明中完整的提供了。
上述Rollup模型使用 DA层作为聚合器,并继承了它的审查抗性。此时的DA层负责包含和排序交易。中心化的Header生成者将从DA层中读取Rollup交易序列,并据此构建对应的Rollup Header。Header生成者将把Header和Stateroot发布到 DA层。这些Stateroot是创建欺诈证明时所必需的。简而言之,聚合器负责包含和排序交易, Header 生成器会执行交易更新状态得到 Stateroot 。
假设 DA 层(此时它也充当了 Rollup 的聚合器)是足够去中心化的,并具有良好的抗审查性。此外, Header 生成器不能更改聚合器发布的 Rollup 交易序列。现在,如果将 Header 生成器去中心化,带来的唯一好处是更好的活性,但 Rollup 的其他属性与第一种变体 Based Rollup 相同。
如果Header生成器发生活性故障,Rollup 也会发生活性故障。轻节点将无法跟进Rollup账本的进度,但全节点可以。此时,变体4所描述的Rollup退化成了变体1描述的Based Rollup。显然,变体 4 描述的信任最小化最低配置是:
DA 层轻节点+ Rollup 轻节点。
变体5: Based ZK - Rollup 和去中心化的 Prover Market
我们已经讨论了悲观Rollup(Based Rollup)和乐观Rollup,现在是时候考虑ZK-Rollup了。最近Toghrul做了一个关于聚合器(Sequencer)和Header生成器(Prover)分离的演讲(Sequencer-Prover Separation in Zero-Knowledge Rollups)。在这种模型中,将交易作为Rollup数据而非State Diff进行发布要更容易处理,所以我会着重于讨论前者。变体 5 是一个基于 zk - rollup 的去中心化 Prover Market 。
到目前为止,你应该对Rollup的工作原理比较熟悉了。变体5将聚合器角色委托给了DA层节点,由后者进行包含和排序交易的工作。我会引用 Sovereign-Labs 的文档,它对变体 5 中一笔交易的生命周期进行了很好的解释:
用户发布一个新的数据块到 L1 链( DA 层)上。一旦这些数据块在 L1 链上被最终确定,它就在逻辑上具备最终性(不可更改)。 L1 链的区块进入最终确定阶段(就是不可回滚)后, Rollup 的全节点会扫描这些区块,按照次序处理所有与 Rollup 有关的数据块,生成最新的 Rollup 状态根 Stateroot 。此时,从 Rollup 全节点的角度来看,这些数据块已经完成了最终确定。
在这个模型中, Header 生成者由去中心化的 Prover Market 充当。
Prover 证明者节点(在 ZK VM 内运行的全节点)的工作过程与普通的 Rollup 全节点有类似的地方——扫描 DA 层区块链并按次序处理所有 Rollup 交易批次——生成对应的零知识证明并将其发布到 DA 层链上。(如果 Rollup 系统想激励 Prover 证明者,要让后者将生成的 ZK 证明发到 DA 层链上,否则就无法确定哪个 Prover 率先提交了 ZK 证明)。一旦某个交易批次对应的 ZK 证明被发布到链上,该交易批次在全体 Rolup 节点(包括轻节点)眼中就完成了最终确定。
(因为涉及的概念比较多,可以再看一遍示意图)
变体 5 具备和 DA 层一样的抗审查性。去中心化的Prover Market不能对Rollup交易展开审查,因为DA层上已经确定了规范的交易次序,只是为了获得更好的活性及创建激励市场,所以才将Header生成器(这里指Prover)去中心化。
这里的活性是 L = L_da && L_pm(Prover的活性)。如果Prover Market的激励不一致,或者出现活性故障,Rollup轻节点将无法同步区块链进度,但Rollup的全节点可以,对于全节点而言,这只不过又回退到了变体1所说的Based Rollup/悲观Rollup。这里的信任最小化最低配置与乐观 Rollup 情况下相同,即
DA 层轻节点+ Rollup 轻节点。
变体6:混合型 Based Rollup +中心化的乐观 Header 生成者+去中心化 Prover
我们仍然让 DA 层节点充当 Rollup 的聚合器,并委托其进行包含和排序交易的工作。
正如你从下图中看到的,ZK Rollup 和乐观Rollup都采用DA层上相同的有序交易批次,作为Rollup账本来源。这是我们可以同时使用两个证明系统的原因:DA层上的有序交易批次本身并不受证明系统的影响。
先谈一下最终性。从 Rollup 全节点的角度来看,当 DA层自身的区块完成最终敲定时,其包含的Rollup交易批次也是最终确定不可更改的了。但是我们更关心轻节点视角下的最终性。假设中心化的Header生成者抵押了一些资产,并在生成的Rollup Header上签名,连带将计算出的Stateroot提交到 DA层。
与前面的变体 4 一样,轻节点将乐观地信任 Header 生成者,相信它发布的 Header 没错,并等待来自全节点网络的欺诈证明。如果欺诈证明的窗口期结束了,全节点网络还没发布欺诈证明,从 Rollup 轻节点的角度来看, Rollup 区块就完成了最终确定。
关键之处在于,如果我们可以获得一个 ZK 证明,就不必再等待欺诈证明窗口期结束。除了单轮欺诈证明,我们可以用 ZK 证明取代欺诈证明,并丢掉恶意的 Header 生成器生成的错误 Header !
当轻节点接收到对应某个 Rollup 交易批次的 ZK 证明时,这个批次就会完成最终确定。
现在我们有了快速的 Soft Commitment 和快速的最终性 Finality 。
变体 6 仍然具有与 DA 层等同的抗审查性,因为它是基于 DA层的。对于活性,我们将有 L = L_da && (L_op || L_pm),这意味着我们增加了活性保证。如果中心化的Header生成器或去中心化的Prover Market二者之一有活性故障,我们可以退化到二者中的另一种方案。
此种变体中,用户信任最小化的最低配置是:
一个 DA 层轻节点 + 一个 Rollup 轻节点。
摘要:
1.我们将 Rollup 的关键角色——定序器 Sequencer 拆分为两个逻辑成分:
聚合器和 Header 生成器。
2.我们将 Sequencer 的工作分为三个逻辑过程:包含、排序和执行。
3.悲观 rollup 和 based rollup 是一种东西。
4.根据需求,您可以选择不同的聚合器和 Header 生成器方案。
5.这篇文章中介绍的每个 Rollup 变种都遵循了相同的设计模式:
最后,我还有一些想法。请您思考:
经典的 Rollup (指以太坊 Rollup )如何归类到上述的变体之中?
在所有变体中,我们只让聚合器负责包含+排序, Header 生成器来执行交易。如果聚合器仅负责包含交易, Header 生成器负责排序和执行交易,该怎么做?考虑到引入链上拍卖步骤,我们可以把这三步工作彻底分开吗?
什么是共享 Header 生产者/ Header Producer Market ?
谁捕获了 MEV 价值?用户能把它拿回来吗?