被多签和委员会操控的 Rollup,远没有你以为的那么 “美好”
作者:林克,《极客 Web3》
导语:自 Solana 逐步衰落和 OP 发行 Token 以来,Layer2 和 Rollup 似乎成为了无数 Web3 从业者新的港湾。随着熊市的持续蔓延和 FTX 暴雷出局、Multicoin 损失惨重,以太坊的竞争对手们陆续淡出了 Web3 这个大舞台,不断失去了和 ETH 一较高下的底气。越来越多的人开始将 Rollup 视为新一轮叙事核心,越来越多的项目如同雨后春笋般在 L2 上扎堆涌现。
但这一切是否是 “虚假的繁荣”,是否是 “随时可能被戳破的泡沫”?Rollup 和 L2 真的如同大多数人所鼓吹的那般美好吗?它真的像人们所认知的那样安全吗?且不谈许多 OP Rollup 没有欺诈证明,Rollup 的安全隐患还有哪些?
本文受到 L2BEAT 近期发布的 “Upgradeability of Ethereum L2s” 启发,针对 Rollup 升级背后的多签与委员会信任风险(立即升级 Rollup 合约,卷走用户资产)及此前关于 Rollup 的老生常谈,联想到前不久的 Multichain,综合聊下 L2 为何不像许多人所想的那么 “美好”。
Rollup 原理简述
(如果你已经熟悉 Rollup 的原理,可以直接越过下面的许多段落,往后拉)
Rollup 运作原理简述:
以太坊 Rollup = Layer1 上的一组合约 + Layer2 网络自己的节点。
Layer2 网络节点这个群体可以拆分出几类角色,其中最重要的当属定序器(Sequencer)。它接收 Layer2 上发生的交易请求,决定它们的执行次序,然后把交易序列打包为批次(Batch),传送给 Rollup 项目在 Layer1 上的合约(下文中将统称为 Rollup 合约)。
Layer2 的全节点可以直接从定序器处获取交易序列,也可以读取定序器发到 Layer1 上的交易批次(Batch),但后者具备比前者更高的最终确定性(不可更改性)。通常,当一批交易被定序器传送到 Layer1 上后,这批交易的次序便不可变更(只要以太坊不发生区块回滚,Rollup 的交易序列就不会变更)。
由于交易执行会更改区块链账本的状态,所以除了交易次序外,Layer2 全节点还需要和定序器同步账本状态,这样才能保证一致性。
因此,定序器不光要往 Layer1 的 Rollup 合约传送交易批次,还要把交易执行后的状态更新结果 (Stateroot/State diff)传送至 Layer1。
不难看出,L1(以太坊)实际上充当了 L2 节点们的公告板,它要远比 L2 自己的网络更去中心化、更 Trustless、更安全 。对 L2 的全节点而言,只要获取了 L1 上的 Rollup 交易序列 + 最开始的 Stateroot,就可以还原出 L2 的区块链账本,计算得出最新的 Stateroot。如果 L2 全节点自己算出的 Stateroot 和定序器发布到 L1 的 Stateroot 不一致,就说明定序器存在欺诈行为。
最直观的假想案例是:L2 的定序器可不可以盗取用户资产。比如,它可不可以伪造一些本不该发生的交易(ps:把某些 L2 用户的 Token 转移至定序器运行者的地址,然后再把这些 Token 转移到 L1 上)。这类问题可以归结为:定序器发布了错误的交易数据或错误的 Stateroot 后,该怎么办?
针对定序器的欺诈风险,不同类型的 Rollup 有不同的应对措施。Optimistic Rollup( 乐观 Rollup)允许 L2 全节点提供欺诈证明(Fraud Proof),证明定序器在 L1 发布的数据存在错误。比如 Arbitrum 设置了一个节点白名单,允许白名单上的 L2 节点发布欺诈证明。
除此之外,考虑到大多数交易所和私营跨链桥项目方都会运行 L2 全节点,可以立即发现错误,大多数 Rollup 定序器盗币的成功率基本为 0(因为它最后要套现,还是要在交易所完成,或者把盗来的币转移至 L1 后再另谋出路)。
但对于没有欺诈证明的 Optimism,定序器可以通过 Rollup 自己的跨链桥 bridge 合约来盗币。比如,定序器运行者可以伪造交易指令,将其他人在 L2 的资产转移至自己的地址,再通过 Rollup 自带的 bridge 合约,把盗来的币转移至 L1。因为没有欺诈证明,OP 的全节点无法对错误交易发起挑战,所以理论上,OP 的定序器可以盗取用户在 L2 的资产(只要它真的想这么做)。
解决这种问题的方法是 “社会共识”(靠社区成员和社交媒体等舆论监督),或者靠 OP 官方的信用背书。
有趣的是,近期某交易所降低了 Arbitrum 和 Optimism 用户向所内转币的延时(从 100 个 L2 区块降低到 1 个 L2 区块),这其实是信任 ARB 和 OP 的定序器不会作恶 (默认它们是有官方背书的中心化服务器)。
不同于乐观 Rollup,除了依靠 L2 全节点外,ZK Rollup 通过有效性证明 Validity Proof(往往与 ZK Proof 相混淆)解决定序器欺诈问题。ZK Rollup 网络里有一种称为 Prover 的节点,专为定序器发布的交易批次 Batch 生成有效性证明。同时,L1 上有专门验证有效性证明的合约(一般称为 Verifier),只要交易批次及 Stateroot/State diff 对应的证明通过 Verifier 合约的验证,便被最终确认(Finalized)。ZK Rollup 的官方 bridge 只会给通过有效性证明验证的提款交易放行,显然这要比 Optimism 可靠太多。
理论上来说,OP Rollup 的安全性靠 L2 全节点来保证(至少要有 1 个能发布欺诈证明的诚实节点)。ZK Rollup 的安全由 L1 上的 Verifier 合约保证(由 L1 节点完成交易最终确认)。表面上看,它们都可以 “继承 L1 的安全性”(借助 L1 完成交易的最终确认/结算),以太坊最大主义者甚至将其称作 “等价于 L1 的安全性”(与 L1 的交易结果最终性一致),但实际情况却并非如此,甚至是远非如此。
那些 “老生常谈” 的点
首先,ZK Rollup 的有效性证明生成速度极为缓慢,定序器可以在 1 秒内执行几千笔交易,但为这几千笔交易生成 Proof 最多可能要几小时。但这个问题也容易解决,主流的 ZKR 基本都会通过切分 Proof 生成任务、交由不同的 Prover 节点并行处理的方式,大幅提高 Proof 生成速度。
其次,要考虑 L2 节点在 L1 发布数据的延迟。因为定序器或 Prover 每次往 L1 发送数据,都会有一个固定成本(就好比每次运货都要消耗一个集装箱)。频繁在 L1 上发布数据是不划算甚至亏本的,所以定序器和 Prover 会尽量减少在 L1 上发布数据的频率,等一次性凑够了大量的数据再打包发布。
换言之,当用户数量不足、发起的交易笔数不够多时,定序器会延迟向 L1 发布数据。比如在去年用户较少时,Optimism 半小时才向 L1 发送一次交易批次。现在,因为用户多了起来,这个问题得到了有效解决。与 OP 不同的是,Starknet 采用了减少 State diff 发布频率的方式降低数据成本,这使得 Starknet 的交易最终确认延时被拉长到了 7~8 小时。
除此之外,多数 ZK Rollup 为了进一步降低成本,往往会 “聚合许多个 Proof,再一次性发到 L1 上”。也就是说,Prover 不会在生成一个 Proof 后就立刻发到 L1,而是等多个 Proof 都生成完,聚合在一起,再发给 L1 的 Verifier 合约。(其实聚合 Proof 的过程,就是用一个 Proof 来包含掉验证多个 Proof 产生的计算步骤)
这样做的后果是,Proof 的发布频率进一步降低了,交易从发起到最终确认的延时进一步拉长了。
根据区块浏览器显示,Polygon ZKEVM 的交易确认延时大概是 30~50 分钟,Starknet 和 Zksync Era 在 7 小时以上。显然这只是 “部分继承 L1 的安全性”,与以太坊支持者们所说的 “等价于 L1 的安全性” 有很遥远的距离。
当然,以上问题都可以靠技术进步来解决,在不久的未来实现。比如很多项目方在研发高性能硬件,降低有效性证明的生成时间;Optimism 也承诺将很快发布欺诈证明系统;以太坊的 Danksharding 方案将把 Rollup 的数据成本降低几十倍甚至更高,这可以有效解决上面罗列的问题。
难以解决的 “人治” 问题
与 Defi 等应用类项目一样,Rollup 网络的运转需要依靠 L1 上的相关合约,而这些合约是 “可升级” 的,也就是说部分代码可以更换(大多数 Rollup 都用了代理合约),并且可以在多签或安全委员会的授权下立刻进行。先说结论:Rollup 可以通过少数人控制的多签或安全委员会,快速更改 L1 上的合约代码,然后盗取用户资产。
首先 “Rollup 合约为什么需要升级”和 “它是怎么升级的”。以太坊上的合约代码在部署后,是不可更改的,但 Rollup 在开发过程中难免存在各种各样的 bug,可能导致错误的结果;同时 Rollup 也在频繁的进行产品迭代,需要频繁增加新的功能;更极端的情况下,还可能有黑客攻击 Rollup 合约,所以 Rollup 合约需要有可升级性,这往往通过代理合约来实现。
代理合约其实是以太坊合约开发中常用的一种方法,就是将合约的数据和业务逻辑分开,分别保存在不同的合约中。数据(状态变量)存储在代理合约中,业务逻辑(函数)保存在逻辑合约中。代理合约(Proxy)通过 delegatecall,将函数的执行过程全权委托给逻辑合约(Implementation),再把最终的结果返回给调用者(Caller)。
代理模式下的合约升级,只需要将代理合约指向新的逻辑合约(改写代理合约里存储的逻辑合约的地址)。大多数 Rollup 项目都采用了这种给合约升级的方法,可谓简单粗暴。
不难想到,Rollup 的合约可升级其实是巨大的雷:如果升级后的合约里包含恶意的代码,比如把 Rollup 自带的 Bridge 合约的提款放行条件加以修改,或者把 Verifier 合约判定有效性证明正确性的条件加以更改,定序器就可以盗币(原理在前面讲了)。
但问题在于,又不能不允许 Rollup 合约可升级,理由在前面说的很清楚。权衡之下,绝大多数 Rollup 会通过 DAO 治理、安全委员会或多签授权,用人治的方式来决定要不要升级 Rollup 的合约。除此之外,还会通过时间锁 Timelock,来为合约升级设置延时窗口期。
考虑到大多数的 DAO 提案都有自动化的执行流程(通过链上合约来实现),即便要升级合约,也要先获取足够多的投票,然后再经过时间锁 Timelock 规定的延时(往往要经过很多天),升级合约的操作才会执行。如果有人想搞恶意的合约升级,需要通过治理攻击的方式度过 DAO 治理这关(比如发生在 Tornado Cash 上的治理攻击),但这样做的成本很高,要先获取足够多的 Token 才行,正常情况下不会成功。即便治理攻击成功了,由于有时间锁的限制,用户会有足够多的时间把资产从 L2 撤出,Rollup 官方也会有足够多的时间采取紧急措施。
看起来时间锁是解决恶意的合约升级的法宝。但问题在于,所谓的 “Rollup 官方可采取的紧急措施”,其实就是绕开 DAO 治理和时间锁,通过多签或者安全委员会授权,立即升级 Rollup 合约。考虑到目前主流的 Rollup 托管了动辄几十亿美元的用户资产,由多签和安全委员会来授权的 “合约可立即升级”,是终极的应急措施,但也是悬在所有用户头顶上的达摩克利斯之剑。
显然这是信任最大化问题:你需要信任 Rollup 官方不会有盗取你的资产的念头。如果从 Trustless 的角度来考虑(尼克萨博的视角),所有由多签和安全委员会控制的 Rollup 都是不安全的。Avalanche 创始人 Emin Gun Sirer 和 Solana 创始人 Anatoly、著名黑子 Justin Bons 都曾强调过这类问题。
哪些 Rolllup 被多签/委员会操控?
根据知名 L2 研究机构 L2 BEAT 发布的报告 “Upgradeability of Ethereum L2s”,及 L2BEAT 数据可视化网站显示,Arbitrum、Optimism、Loopring(路印)、ZKSync Lite、ZkSync Era、Starknet、Polygon ZKEVM 等主流 Rollup 都存在多签或委员会授权的可升级合约,并且可以绕开时间锁限制。
dYdX 虽然有一个 EOA 地址可以绕开 DAO 治理升级合约,但受到时间锁限制(至少有 2 天的延时)。Immutable X 则存在 14 天的合约升级延时,所以,按照 L2BEAT 的说法,dYdX 和 Immutable X 要比其他已上线主网的主流 Rollup 更 Trustless。
那么该怎么降低多签和安全委员会带来的信任风险?答案其实和 Multichain 事件类似:可以归结为反女巫问题。必须要保证,多签/委员会由多个不同的、无高度利益重合的、串谋风险低的实体来控制。目前看来,除了加大 DAO 去中心化治理的成熟度、邀请有名望有信誉的名人或机构来参与多签/委员会 以外,似乎没有什么太好的办法。而以上场景似乎早已在现实世界的民主政治中屡见不鲜。
当然,也可以通过时间锁给多签/委员会管理的合约升级行为加以限制,但这需要针对许多因素进行权衡,因为多签/委员会的存在目的就是为了快速处理一些紧急情况;同时,如果 Rollup 项目方在去信任化问题上没有什么坚定的决心,这个问题也不可能被解决。
所以,尽管不同的 Rollup 项目通过精妙的机制设计,可以在绝大多数时候保障用户资产的安全,但由于存在多签和委员会,Rollup 发生黑天鹅事件的概率并不为 0。即便多签和委员会成员串谋的概率只有万分之一,考虑到 L2 托管的资产价值(假设为 100 亿美元),L2 用户资产每天的风险仍高达 100 万美元。联想到 Multichain 事件,着实令人毛骨悚然。
所以我个人认为,就像 Polynya 此前所说的那样,以太坊生态内的大多数资金仍然会倾向于在 L1 流通和锁仓,而非 L2,Rollup 生态长期内都无法捕获以太坊生态内的大部分价值。对于大户和鲸鱼,以太坊主网显然是一个比 L2 更合适、更可靠的资金去处。所以,很多人此前考虑的 “L2 的崛起会不会导致 L1 的冷清”,其实早已有了答案。
正如东野圭吾在其著作中所说,人心要远比数学公式更难捉摸,更难理解,更为复杂,也更难改变。许多事情无法靠单纯的技术手段来解决,但凡涉及到 “人性” 的因素,永远都是这个世上最不可控、最难预测、也最需要严肃对待的问题。在此,请让我们牢记康德墓碑上的那句传世经典:
“有两样事物始终围绕着我的心灵,我越是加深对他们的思考,心中唤起的惊奇和敬畏越是日渐加深:这便是 内心的道德律和头顶灿烂的星空。”