Rollup 去中心化:Aztec 的去中心化 Sequencer 方案解析

极客 Web3
2023年7月28日 12:43
收藏
自 Rollup 成为显学以来,定序器 Sequencer 去中心化始终是以太坊/Celestia 社区的关注焦点,同时也是 Layer2 研发工作中难以逾越的大山。对此,不同的 Rollup 方案均提出过关于节点去中心化的设想,为这一话题提供了无比广阔的想象空间。

作者: 0xhhh , EthStorage

编辑:Faust,《极客web3》

 

自 Rollup 成为显学以来,定序器 Sequencer 去中心化始终是以太坊/Celestia 社区的关注焦点,同时也是 Layer2 研发工作中难以逾越的大山。对此,不同的 Rollup 方案均提出过关于节点去中心化的设想,为这一话题提供了无比广阔的想象空间。

本文作者以知名 ZKRollup 项目 Aztec 为例,以近期 Aztec Labs 提出的名为 B52 、 Fernet 的 2 个提案为切入点,为广大读者解析 ZKR 如何实现定序器节点的去中心化。

提案 B52 : Permissionless 的定序器方案

提案 B52 打算实现以下目标(理想情况下):

1. 去中心化的 sequencer 网络,由 L2 节点自己选举每一轮的 proposer

2. 去中心化的 prover 网络, prover 节点硬件要求低 

3. Rollup 整体具备很好的抗审查性 . 

4. L2 产生的 MEV 价值由 L2 节点获取

5. L2 区块被提交到 DA 层时,可以获得比较有效的最终性 Finality ,不可逆转的 finality 则要等 Validity Proof (有效性证明)提交完毕 

6. L2 Token 可以拥有不错的经济模型 

7. L2 区块和交易数据都在 L2 的 p 2 p 网络中传播 

8. L2 继承 L1 的安全性
(B52 提案对 Rollup 结构的假设,Proposer 实质就是 Sequencer)

该方案将整个 L2 出块流程划分成三个时间阶段: 

Block Proposal Window ( BPW )

Block   Acceptance Window ( BAW )

State advances

其中, BPW (区块提议)阶段是多个定序器Seuqnecer提出不同的区块并竞争、Prover 选择某个备选区块给出投票的过程。

BAW (区块采纳)是 Prover 给区块构造有效性证明 Validity Proof,并将其提交的过程。

Block Proposal Window (区块提议阶段):

BPW 可以再细分为 Block Proposal , Block Voting , Aggregation 三个阶段。

(Block Proposal Window流程示意图) 

Block Proposal ( BP ) 阶段中任何人都可以收集交易,并广播自己的 BP 内容。BP 内容会包含三个部分: txs order hash, prover reward percentage, burn token amount

txs order hash : Proposer 从 L2 的交易池(mempool) 中选择最有价值的一批交易并排序,然后将这批交易的哈希值放进自己构建的区块中。 

prover reward percentage : Sequencer 分享给 Prover 的区块奖励百分比

burn token amount : Proposer提议销毁的L2 Native Token数量,接着它将自己提出的BP发送到 L2 p2p 网络中

Block Voting 投票阶段:

Prover 在 p 2 p 网络中接收到不同 Pro p oser 提出的 BP 后,会投票给能让自己获得最多 reward 的 BP 。不过投票的组成很特殊:

Vote ={ BlockHash , Index of Pro of Tree } 

BlockHash 是 Prover 要投票的 Proposal 的哈希,而 Index of Pro of Tree 则是 Prover 要参与构建的 Pro of Tree 的叶子索引值(后面会解释)

Aggregation 聚合:Proposer 在 L2 p2p 网络中收集 Prover 们针对 BP 的投票,将其聚合并放进 BP 中,提交到 L1上(每个 BP 一般只包含与自己有关的投票记录)。

在此,需要强调 BP 被选中并纳入 Rollp 账本的先决条件:

拥有最高的分数:

SCORE ( y ) = NUM _ PROVERS ( x )^3 * BURN _ BID ( z )^2`

NUM _ PROVERS ( x )是该 BP 获得的 Prover 投票数量, BURN _ BID 是该 BP 所提议销毁的 L2 Token 数量。由于 BURN _ BID 越高, BP 提议者最后获得的奖励越少,所以这个数值要设置得当。

同时,该 BP 需要在 Block Proposal Window 结束前被提交到 L1 上,对应的有效性证明 Proof 要在 Block Acceptance Window 结束前被上传到 L1 。

需要注意: BP 的分数计算中,投票数量占的比重最大,其次才是 burn token 的数量。同时,B52 方案允许多个 proposer (其实就是 sequencer )针对一个有效的 BP 名额展开竞争 

B52 方案仅需要 Proposer(sequencer)在自己的 BP 中指定 burn token 的数量(类似于 EIP1559 的方式)而无需事先 stake token ,这可以让网络更加 permissionless (无准入许可),同时也有利于 L2 的原生 Token 产生通缩。

此外, BP 中不包含完整的交易数据,只包含交易序列的哈希,道理类似于以太坊PBS方案,旨在避免 MEV 被其他 Proposer 窥探并抢跑。

Block Acceptance Window (区块采纳阶段)详解:

(Block Acceptance Window 示意图,图中写成了 Proof Acceptance)
在 Block Proposal Window结束后,Prover 需要 reveal 揭示他们的 BP 对应的完整交易数据。 Prover 投票的 BP 如果被选中的话(分数最高,可通过 L1 合约查询),它们就需要构造投票时给出的 Index of Pro of Tree 对应的 Sub Proof Tree
假设 Aztec 的区块包含 2^13=16384 的交易数量,并且有 2048 个 prover,那么每个 prover 构造 2^3=8 笔交易组成的 sub proof tree. 然后 prover 把自己构造的 sub proof tree 广播到 L2 p2p 网络中。 proposer 接收之后,会把所有的 sub proof tree 聚合成一个 block proof

接着 Propsoer 将聚合的 proof 提交到 L1 的 Rollup 合约,合约会验证这个 proof 以及对应状态转换结果的正确性。这里要注意,Prover 如果故意不提交 proof 的话,不仅无法获得 Proposer 许诺的区块奖励分红,还会被 slash,因为要成为 Prover 是需要提前质押 Token 的。因此,与 Proposer ( Sequencer )不同, Prover 并不是 Permissionless 的

State Advances (状态推进阶段)详解:

在 Block Acceptance Window 结束之后, Rollup 合约选择一个分数最高的区块纳入 Rollup 账本,并且把区块奖励 Reward 按照 Proposer(Sequencer)事先声明的比例,分别发送给 Proposer 和 Prover

以上便是 Aztec 的 B52 方案。但本文作者认为, B52 提案存在一些潜在问题: 

问题一: 假如一个分数最高的区块的 validity proof 是不完整的。提案中给出的解决方法是,假如 Proposer 只提供了 50% 的 proof,那么他也只能获得 50% 的区块奖励,从而确保 Proposer 没有动力故意不提交完整的 proof。同时 Prover 自己也可以直接向合约直接提交 proof。

按照提案的叙述,是可以接受一个区块没有完整交易的 validity proof 。这点其实是不合理的:因为: zkrollup 都是在给出 validity proof 的同时,才声明这个区块对应的新状态有效。

如果 proposer 最后提交到 L1 的聚合 proof 缺失了某个交易的 proof ,很显然在这笔交易之后发生的所有交易的状态转换证明都是不成立的(因为交易是顺序执行并且有状态依赖的),我们也就无法确认这个区块对应的新状态是有效的。

因此这个时候,合理的方式应该是进入无限等待的 Block Acceptance Window ,直到所有交易的 proof 都提交完成。

问题二:假如得分最高的区块是非法区块(B52 方案里也没有解释这点)。BP 仅仅包含交易序列的哈希,所以恶意的 proposer 实际上可以故意构造有问题的交易,比如双花交易。那么这个时候,实际上需要在 L1 合约增加一个任何人都可以提交 illeagal proof 的函数,这个 illeagal proof 用于证明得分最高的 BP 是一个非法区块。

并且这种举报应该是有奖励的,我们可以把 proposer 发送到合约中的 burn token 都奖励给提交 illegal proof 的举报者节点。

有趣的思考:关于叔块和多余的 Prover Work: B52 方案实际上会在每轮分数最高且有效的 BP 出现后,把这一轮出现的其他 BP(已经提交完整 proof)作为叔块,分配一定的叔块奖励

实际上沿用了 ETH POW 共识机制的做法,为了避免算力过度集中,需要分配一部分出块奖励给未被采纳的区块提出者(矿工),以保障小矿池/个体矿工的利益,避免算力被大矿池垄断。因此采用以太坊表现不错的叔块机制也是一个很聪明的选择。

B52 提案在 Rollup 去中心化方面的意义: Proposer 是去中心化且不需要质押的,准入门槛低;但是因为需要自己 Build 最有价值的区块,以及需要收集其他 Prover 的投票,并聚合所有 Proof,实际上 Proposer 的硬件门槛没有提案中叙述的那么低(比如带宽可能不会很低)。

所以,最终还是会成为一个比较中心化的网络,类似 Mev - Boost Builder ,因为最终能出块的 proposer 往往也是最擅长捕捉 MEV 的 Block Builder 。

同时,B52 方案里的 Prover 需要质押资产,但因为仅仅需要生成 sub tree proof,相比于那些需要完整生成整个 block proof 的方案来说, Prover 的去中心化程度会更好(硬件要求可以放低了)。

活性 Liveness :总体的网络 Liveness 是不错的,因为 L2 有自己的 p2p 网络来广播交易和投票/BP,并且 Sequencer 和 Prover 都比较去中心化。但是需要解决我们上面提到的两个问题,一个是得分最高的区块一定是合法的区块,第二个是需要等待完整的 block proof 提交到 L1 才能进入一个新状态。所以需要一个更有效的激励机制,避免整个 Rollup 网络由于缺失某一部分 tx proof 而无法正常工作(停机)。

抗审查性 Censorship Resistance :如果我们能保证任何人都能发布区块提议 BP,并且保证不只是 Proposer 可以提交 block proof,那么网络会有很好的抗审查性。

最终性 Finality :L2 的 finality 跟网络的 liveness 息息相关,因为最终的 verified finality 还是需要等待 Block Proof 的提交,但实际上你也可以相信一个得分最高的 BP 对应的区块内容(只要它里面不包含恶意交易)。

这个区块会在 Block Acceptance Window 开始时被揭示 reveal ,意味着作为用户,仅仅需要等待一个 Block Proposal Window 的时间,你提交的交易所在的区块就可以被采纳。

继承 L1 安全性:作为一个通过提交 validity proof 来更新状态的 L2,是可以继承 L1 的安全性。

提案 Fernet :引入 VDF 选拔合法 Proposer

Fernet 方案简介:通过 VDF 在每轮出块周期内,为 Committee(就是 Sequencer 节点集合)中不同的节点设定一个预估的分数,最终分数最高的 Sequencer 提议的区块会成为有效块。

首先,如何加入 Committee ?实际上需要在 L1 质押 16 个 ETH ,并且在质押操作完成后等待 4 个 L1 区块后,加入 Sequencer Committee。至于退出 Sequencer Committee,则需要调用 L1 合约里的 Unstake 函数,之后再过 3 天才能拿回自己质押的剩余金额。

然后,什么是 VDF? Verifiable Delay Function 就是可验证延迟函数,该数学函数满足严格的串行执行特性,它会执行一些计算步骤,并至少会消耗一段可预估的时间。我们把 VDF 算出来的数值记作 Score ,它满足均匀正态分布,因此当 Sequencer 算出 VDF Score 后,就可以判断自己被选中为合法 Proposer 的概率有多大。

Sequencer 的 VDF 计算如下: 

Score = VDF ( privatekey , public inputs ) 

public inputs = { current block number , randao } 

randao 是一个随机数,用来防止 Sequencer 提前计算未来所有区块高度下自己的 VDF Score

Fernet 整个流程主要分为 3 个阶段: 

1. Proposal Phase    2. Proving Phase    3. Finalization

Proposal Phase :PROPOSAL_PHASE_L1_BLOCKS = 2 Ethereum blocks (该阶段会维持 2 个L1 block 的时间)

这个阶段开始,每个 Sequencer 都会用 VDF 算出自己在当前出块高度下对应的 VDF Score。如果 Sequencer 认为自己的 VDF Score 很有可能赢得这次区块的出块权(假设 Score 满足正态分布),那么他会提交一个 Proposal 到 L1 的 Rollup 合约。Proposal包含:交易序列的哈希、指向哪个之前的L2区块。

unproven block:只提交了 Proposal 到 Rollup 合约的区块 block contents。接着, Sequencer 需要把 unproven block 对应的 block contents 以及 pro of of VDF 一起发送到 L2 的 p 2 p 网络中。

ProvingPhase : PROVING_PHASE_L1_BLOCKS= 50 L1 blocks(该阶段会维持50个L1区块,大概10 min) 

Prover 从 L2 的 p 2 p 网络中接收所有 Block Contents 中对应的交易,并会为 VDF Score 更高的区块构建 Proof 。 Proof 的构建也是采取多个 Prover 并行协作的方式(类似 B52 方案)。

因此需要 Sequencer 在最后将多个不同的交易对应的 Proof 聚合成一个 Block Proof (包含 VDF Proof ),提交到 L1 的 Rollup 合约。任何人都可以将已经提交 Block Proof 的 Block Contents 提交到 Rollup 合约上。

Finalization :需要提交一笔 L1 的交易来 Finalize 区块,一个最终可以被 Finalize 的区块需要满足:提交了 Block Contents和Block Proof,指向的前一个区块必须是 Finalize 的。在满足以上条件的基础上,还要拥有最高的 Score。

(流水线式出块流程,前一个区块的提议阶段刚结束,就开始下一个区块的提议阶段,而无需等待之前区块的 Proving 阶段结束)

流水线出块机制:需要注意的是,Fernet 采用的是流水线出块机制。当第 N 块的 Proposal 阶段结束时,第 N+1 个块的 Proposal 就开始了(Aptos 等公链也有类似的做法)。但对于第 N+1 个块来说,它需要等待第 N 个块 Finalize 后,它才能提交 L1 的 Final Block 交易,并且验证通过成为 Final Block 。

潜在的攻击维度:假如 VDF Score 最高的 Sequencer 故意不在 L2 p2p 中广播 Block Contents, 那么有可能导致区块重组 reorg。

reorg 的 L2 区块数量计算: 1+ PROVING _ PHASE _ L1 _ BLOCKS / PROPOSAL _ PHASE _ L1 _ BLOCKS =1+50/2=26块

解决方式: 增加叔块机制,避免每个 L2 slot (出块时隙)只有一个完整的候选区块。

Fernet 在去中心化上的意义 Sequencer 通过质押 16 个 ETH 加入 Sequencer Committee ,准入门槛并不高(但也不低)。 Prover 不需要任何质押,但假如 Prover 不生成 Proof 也没有惩罚。这与 B52 方案基本是相反的。

活性 Liveness :整体网络的 Liveness 是可以保证的,因为 VDF+ 叔块机制可以保证每一轮不止有一个出块者。

MEV :MEV 的考量是最特殊的,该方案计划引进 PBS,这样作为 Sequencer 计算出一个高分的 VDF Score 后,就可以直接找 Block Builder 构造一个更有价值的区块。

抗审查性 Censorship Resistance :Fernet 也将采用跟以太坊一致的PBS机制,因此本质上 Fernet 抗审查的问题等价于以太坊 PBS 的抗审查问题。

链捕手ChainCatcher提醒,请广大读者理性看待区块链,切实提高风险意识,警惕各类虚拟代币发行与炒作, 站内所有内容仅系市场信息或相关方观点,不构成任何形式投资建议。如发现站内内容含敏感信息,可点击 “举报”,我们会及时处理。
ChainCatcher 与创新者共建Web3世界