我看到 OptimismPBC 上部署的 Uniswap 的快速确认功能引起了很多人的兴趣。但这是如何做到的?用户可以放心使用吗?只靠一个定序器提供确认难道不会威胁到去中心化吗?让我来一一为你解答。
首先,最重要的是,定序器在许多 rollup 系统中都属于享有特权的参与者(@optimismPBC、@arbitrum、@StarkWareLtd、@zksync)。它们接收来自用户的交易,对其进行排序并批量提交到 Layer1上。
定序器之所以存在,主要是因为单一协调者简单高效。现阶段,每个 rollup 系统通常都会有一个定序器,由系统创建者运行。
定序器负责为交易排序。因此,在收到用户的交易后,定序器可以立即将其挖出,并向用户返回确认。这极大地改善了用户体验。
如果你担心定序器会攫取 MEV,那你是对的,不过我会单独讨论这个问题(留到最后分析)。
如果定序器忠于职守,则一切都好。但是,如果定序器作恶,欺骗用户并试图破坏网络,我们该怎么办?让我们来深入探讨这个问题。
最重要的问题是:定序器可以偷用户的资金吗?不能。状态转换的有效性由 rollup 架构保障(Optimistic Rollup 靠的是欺诈证明,zk-Rollup 靠的是有效性证明)。
定序器能审查用户的交易吗?没错,它确实可以。定序器通常是 JSON RPC 节点。与 Infura 类似,定序器甚至可以谎报网络状态或审查用户交易。
幸运的是,审查不是什么大问题,因为所有 rollup 系统都可以通过不可审查的 Layer1 来发布 Layer2 交易。协议会强迫定序器在几分钟内将用户交易打包到 rollup 内。
如果定序器谎报状态,用户需要自己运行节点,根据发布到 Layer 1 的批量交易重新创建 rollup 状态。这听起来可能很糟糕,但是与 Layer1 上的情况相同。
最后,定序器可以谎称交易已得到即时确认吗?可以。正如上文所述,定序器可以谎报当前网络状态以及用户交易是否被打包。
例如,定序器可以对用户谎称交易已成功,但是实际上被撤销了。用户只有基于 Layer1 重新创建 rollup 状态之后才会发现自己被骗了。
只有被发布在 Layer1 上,rollup 交易才算是被敲定了。这就是为什么 Rollup 的 Web 3.0 库一般可以让开发者轻松构建用户界面,以告知用户 Rollup 交易的处理进度。
未来有可能采取的一种解决方案是,让定序器在收到用户交易时签名确认,如果交易没有被打包到 rollup,用户可以惩罚定序器。这可以通过瞭望塔之类的服务自动化执行。
这是真正让我感到兴奋的地方 —— 定序器技术还处于发展初期。未来,我们将看到更多复杂的设计来解决我提到的很多问题。
我们也可以运行一个由定序器组成的免许可型 PoS 网络来代替单个许可型定序器。每一批交易都由网络中随机选取的定序器打包到 Layer1 上。这会大幅增强抗逆性和抗审查性。
当然了,每个定序器都需要提供保证金,一旦作恶就会遭到罚没。
其它项目如 Arbitrum 在试验一种公平的协议来发现正确的交易排序。https://eprint.iacr.org/2020/269.pdf
当然,也可以不打击 MEV,而是拥抱 MEV:参与方通过竞标的方式来获得在一段时间内运行定序器的权利(但是这个想法存在一些问题)。
如果你想更多了解 rollup 的设计空间,可以阅读 Vitalik 的这篇文章(中文译本)中的 “谁可以提交批量交易” 一节。
总之,IMO 定序器在去中心化和速度之间取得了良好的平衡。我们目前看到的还只是定序器的最小可行产品,还有很多聪明人正在努力改进它。未来将一片光明!