来源 |old.reddit.com/r/ethereum
作者 | Vitalik Buterin
译者注:随着其他 L1 公链和 L2 的交易活动日渐增长,跨链和跨 rollup 的需求也大大增加。而这便使得桥接产生一种”反网络效应“:当交易活动不多时网络就会非常安全;当交易多起来了,风险就越大 (因为攻击动机大大超过攻击成本)。那么跨链和跨 rollup 的安全性有什么区别?在本文中,Vitalik 提出了 ”共享安全性“ (shared security) 这一概念,并且基于此对各种跨链和跨 rollup 活动分安全等级。
当评估一条以某种方式 “连接” 到大型链的小型链时,大家最需要关心的一个问题是:
如果攻击者能够对小型链发起 51% 攻击,这可以造成多大的损失?
这是一个非常现实和重要的问题,因为小型链往往比大型链小得多 (就市值而言)。并且对于攻击者来说,买下小型链 51% 的代币 (或至少 51% 的质押代币) 往往是相当可行的,尤其是当有大笔的桥接资产存在那条链上时 (攻击者能够盗窃这些资产)。
-
如果小型链是一条“独立的 L1”,攻击者可以盗走一切资产。他们可以制作一个非法编辑状态的区块,将所有代币发送给他们,然后他们就可以通过桥接提走这些代币,而且在大型链上不会产生任何验证。
-
如果小型链是一条“侧链”,攻击者同样可以盗走一切资产,原因同上。然而,侧链的安全性比完全独立的 L1 要稍微好点。因为侧链的区块头会发布在以太坊上,如此一来,如果以太坊回滚,侧链也会回滚。这样可以防止涉及以太坊 51% 攻击的盗窃行为,然而不能阻止对侧链进行 51% 攻击。
-
如果小型链是一个“rollup”,攻击者可以延迟交易,这可能迫使用户不得不支付 L1 费用,但他们不能盗窃任何资产。这是因为其中有一个链上机制 (欺诈证明或数据可用性证明),可以验证小型链上涉及攻击者提款的事件是否都有效。
一些更特殊的例子:
-
如果小型链是一个 "plasma",攻击者可以延迟交易并且迫使用户支付 L1 费用,但他们同样不能盗窃任何资产。
-
如果小型链是一个"validium",攻击者可以永久地锁定所有用户的资产,但还是不能盗窃任何资产。Validium (如 Starkware 的 ImmutableX) 因此成为一个有趣的折衷方案。Validium 没有 rollup 那么 “L2”,因为控制 validium 的人还是可以拒绝用户访问自己的资产并敲诈他们,但不管怎么样 validium 还是比侧链要安全得多。更重要的是,validium 同时可以达到侧链的可扩展性。
这就是我们所说的 “共享安全”。如果你在小型链上持有资产并进行一些交易,那么和在大型链上做同样的事情相比,你的资产是否一样安全,还是没那么安全?结论是:如果是在 rollup 或者 plasma 上,资产共享主链的安全性;如果在一个独立的 L1 或是侧链上,资产的安全性就比主链低得多;如果在 validium 上,其安全性就在这两者间。
还要注意的是,参考我在EF 第七次 AMA中提到的一些原因,很多东西实际上是对称的:如果你持有 ETC,那么你在一个基于 ETC 构建的 ZK rollup 上持有它比你在以太坊上持有封装的 ETC 要好 (尽管这个桥接是以太坊共识的一个完美的 ZK-SNARK 验证器)。并不是说你需要尽可能地在最大的链上进行交易活动。而是说,你进行交易活动所在的区域与你所使用的资产最初发行的区域都属于同一个“共享安全区” (shared security zone)。其中,“共享安全区” 可以理解为 ”某条链”,并且所有其他链 (如 rollup) 的安全性最终都由该链提供保障。
Vitalik 在 EF 第七次 AMA 中的相关回答如下:
我之所以对多链的区块链生态系统保持积极态度 (确实有一些独立的社区具有不同的价值观,对于它们来说,独立发展好过全部都就同一件事情的影响力而争夺),而对跨链应用保持消极态度,一个关键原因就是桥接具有根本性的安全限制。
为了理解为什么桥接具有这些限制,我们需要看看区块链和桥接的各种组合是如何抵御 51% 攻击的。很多人都有这样的心态:“如果区块链受到 51% 攻击,整个系统就会崩溃,所以我们需要花费所有力气来预防 51% 攻击,哪怕是一次也不允许。” 我非常不同意这种想法;事实上,区块链即使在受到 51% 攻击后,也能维持许多保证,而维持这些保证非常重要。
举个例子,假设你在以太坊上持有 100 枚 ETH,当以太坊受到了 51% 攻击时,一些交易会被审查和/或被撤销。那么无论发生什么,你依然拥有那 100 枚 ETH。即便是发起 51% 攻击的黑客也无法提议一个抢走你的 ETH 的区块,因为这样的区块会违反协议规则,所以会被网络拒绝。即使 99% 的算力或质押份额想要发起攻击来抢走你的 ETH,每个运行节点的人都只会跟随剩下的 1%,因为只有它们的区块遵循协议规则。更普遍地说,如果你在以太坊上有一个应用,那么通过发起 51% 攻击可能会在一段时间内审查或回滚应用的交易,但最终获得的是一致的状态。如果你持有 100 枚 ETH,然后在 Uniswap 上将之换成 32 万枚 DAI,那么就算区块链以某种疯狂的方式被攻击了,最终你还是会获得一个合理的结果:要么还是持有 100 枚 ETH,要么得到那 32 万枚 DAI。也就是说,两者都没有获得 (或两者都获得) 的结果实际上违反了协议规则,是不会被网络接受的。
现在,想象一下,如果你向 Solana 上的某个桥接转 100 枚 ETH 并获得 100 个 Solana-WETH,随即以太坊受到了 51% 攻击。攻击者在 Solana-WETH 封装合约中存入一笔自己的 ETH,然后等到 Solana 网络上确认了这笔交易之后,就立即在以太坊网络回滚存款交易。Solana-WETH 合约现在不再可以完全恢复,也许你的 100 Solana-WETH 现在只值 60 个 ETH。即使有一个基于 ZK-SNARK 的完美桥接可以完全验证共识,它仍然很容易受到这样的 51% 攻击。
因此,在以太坊上持有以太坊原生资产或在 Solana 上持有 Solana 原生资产总是比在 Solana 上持有以太坊原生资产或在以太坊上持有 Solana 原生资产更安全。在这个语境下的 “以太坊” 不仅指以太坊 L1 基础链,还包括基于它构建的任何 L2。也就是说,如果以太坊受到 51% 攻击并且交易回滚了,Arbitrum 和 Optimism 上的交易也会回滚。因此,即使以太坊受到 51% 攻击,在 Optimism 和 Arbtirum 上持有状态的 “跨 rollup” 应用也能保证保持一致。而如果以太坊没有受到 51% 攻击,就没有办法分别对 Arbitrum 和 Optimism 进行 51% 攻击。因此,持有在 Optimism 上发行然后在 Arbitrum 上封装的资产依然非常安全。
然而当出现超过两条链时,问题就比较严重了。如果有 100 条链,那么这些链之间会出现许多相互依赖的 dapp。这时,哪怕对一条链发起 51% 攻击都会造成系统性的风险,威胁到整个生态系统的经济。这就是为什么我认为相互依赖的区域有可能与主权独立的区域会紧密联系 (因此,许多以太坊网络的应用之间相互密切联系,许多 Avax 网络的应用之间相互密切联系等等;而不是以太坊网络和 Avax 网络的应用之间相互密切联系)。
这也是为什么 rollup 不能直接 “使用另一个数据层”。如果某个 rollup 将其数据存储在 Celestia 或 BCH 或其他任何地方,但处理的是以太坊的资产,那么如果这一层受到了 51% 攻击,用户就完蛋了。就算 Celestia 的数据可用性采样 (DAS) 可以抵御 51% 攻击,实际上也并不能帮到你,因为以太坊网络并没有读取这个 DAS;相反,以太坊网络读取的是桥接上的信息,而桥接恰恰很容易受到 51% 攻击。作为一个 rollup 想要为使用以太坊原生资产的应用提供安全性,必须使用以太坊数据层 (对于任何其他生态系统也是如此)。
当然,我不会说这些问题会随时出现。仅仅对一条链进行 51% 攻击都很困难且成本高昂。然而,使用跨链桥接和上面的应用的用户越多,问题就越严重。没有人会为了盗窃 100 枚 Solana- WETH 去攻击以太坊 (或者说为了盗窃 100 枚 Ethereum-WSOL 去攻击 Solana)。但是如果桥接上有 1000 万 ETH 或 SOL,那么发起攻击的动机就会更强,一些大型的资产池会使得这些攻击更容易发生。所以跨链交易活动具有一种反网络效应:当交易活动不多时网络就会非常安全;当交易多起来了,风险就越大。
但这不会令上述分类产生变化;这只会让分类更加广泛,因为即时以太坊本身收到 51% 攻击,这些安全方面的差异仍然存在。
一些更加具体的例子:
这是因为 (Ethereum、Optimism、Arbitrum、ZkSync 和 rollup 模式的 StarkEx) 在一个相同的 ”共享安全区“ 中 (因为后四者最终都由以太坊提供安全保障,或者至少在欺诈证明移除所有临时的软件后门程序而实现完全启用之后,很快便如此)。但是 Avalanche 和 Ethereum Classic 很显然没有与以太坊共享安全性,并且永远也不会。
而在 BSV 上使用 BSV 也不安全 (尽管两者在同一个共享安全区,也就是它自己),因为 BSV 是一条脆弱的 PoW 链,很容易被无聊的 BTC/BCH 矿工攻击。并且 BSV 的区块太大,令用户无法验证 (且没有任何计划添加分片/ZK-SNARK/DAS 技术来解决这个问题)。所以当有人对 BSV 进行 51% 攻击时,攻击者可以直接发起无效区块,而用户可能别无选择,只能接受这些区块。