Time:2023-10-31 Click:115
原文作者 | Vitalik.eth
编译 | Odaily 星球日报 0xAyA
特别感谢 Karl Floersch 的反馈和审查
以太坊 Layer 2 生态系统在过去一年中一直在迅速扩张。以 StarkNet、
Arbitrum
、Optimism
和Scroll
为代表的 ZK-EVM Rollup 生态系统,在提升安全性方面取得了巨大进展,L2beat
页面对每个项目的状态进行了很好的总结。此外,我们还看到一些构建侧链的团队也开始构建 Rollup (Polygon
),一些 Layer 1 项目试图向有效性验证(Validium)迁移(
Celo
)以及作出新的努力(
Linea
、Zeth 等)。
结果就是,Layer 2 项目出现更加异构的趋势。
我预计这一趋势将持续下去,原因如下:
一些目前独立的 Layer 1 项目正在寻求更接近以太坊生态系统,并可能成为 Layer 2 。这些项目可能需要逐步过渡。倘若在现在就进行转换会导致可用性下降,因为技术还没有准备好将所有内容放在 Rollup 上;但过晚转换则可能会牺牲发展动能,而且为时已晚,没有任何意义。
一些中心化项目希望为用户提供更多的安全保证,并正在探索基于区块链的途径。在很多情况下,这些项目在此前可能会探索“许可联盟链”(permissioned consortium chains)。实际上,他们可能只需要一个“中间层”级别的去中心化。此外,它们通常具有非常高的吞吐量,使它们甚至不适合 Rollup,至少短期内是这样。
非金融应用程序,如游戏或社交媒体,希望去中心化,但只需要一种“中间层”的安全性。比如社交媒体,实际上涉及对应用程序的不同部分进行不同处理:像用户名注册和账户恢复这样的低频且高价值的活动,应该在 Rollup 上进行;像发布帖子和投票这样高频且低价值的活动,则需要较低的安全性。如果因为链的故障导致你的帖子消失,那是可以接受的代价;但如果链的故障导致你失去账户,那就是一个很大的问题。
一个重要的问题是,对目前以太坊 Layer 1 的应用程序和用户来说,在
短期内支付较小但仍可见的 Rollup 费用是可以接受的,但对区块链世界以外的用户来说不会接受:如果你之前支付的费用是 1 美元,那么支付 0.10 美元是更容易接受的;但如果你之前支付的费用是 0 美元,那么支付 0.10 美元是难以接受的。这既适用于当前中心化的应用程序,也适用于较小的 Layer 1 ,这些项目通常在其用户基数较小的情况下确实具有非常低的费用。
由此产生的问题是:对于一个特定的应用程序,在 Rollup、Validium 和其他系统之间进行的这些复杂权衡中,哪种方案是合理的?
我们将探讨的安全性与规模的第一个维度可以描述如下:如果你拥有在 Layer 1 上发行的资产,然后将其存入 Layer 2 ,然后转移到你的账户,那么你能否确保可以将该资产取回 Layer 1 ?
同时还有一个类似的问题:导致这种保证的技术选择是什么,并且这种技术选择背后的权衡又是什么?
我们可以简单地使用一个表格来描述这个问题:
值得一提的是,这是一个简化的架构,并且有很多中间项可选。例如:
介于 Rollup 和 Validium 之间:一种 Validium 可以让任何人进行链上支付以支付交易费用,此时操作者将被迫提供一些数据到链上,否则将失去押金。
介于 Plasma 和 Validium 之间:Plasma 系统提供类似 Rollup 的安全性保证和链外数据可用性(Data availability,简称 DA),但只支持有限数量的应用。一个系统可以提供完整的 EVM ,并向不使用那些更复杂应用的用户提供 Plasma 级别的保证,向使用这些应用的用户提供 Validium 级别的保证。
这些中间选项可以被看作是在 Rollup 和 Validium 之间的一个技术光谱。但是是什么促使应用程序选择谱系上的某个特定点,而不是极左或极右呢?这里有两个主要因素:
以太坊本身的数据可用性成本将随着技术的改进而逐渐降低。以太坊的下一个硬分叉,Dencun,引入了 EIP-4844 (也称为"proto-danksharding"),提供约 32 kB/sec 的链上 DA。在接下来的几年里,随着完整的 danksharding 推出,这个数字预计会逐步增加,最终达成约为 1.3 MB/sec 的 DA 目标。同时,数据压缩的改进,将使我们能够在相同数量的数据上做更多的事情。
应用程序自身的需求:相对于应用程序出现问题,用户因高费用而遭受的损失有多大?金融应用程序会因应用程序故障而损失更多;游戏和社交媒体涉及每个用户大量的活动,且活动价值相对较低,因此对于它们来说,安全性的权衡是不同的。
这个权衡大致上看起来是这样的:
另一种值得一提的部分保证是预确认 (pre-confirmations)。预确认是由 Rollup 或 Validium 中的一些参与者签署的消息,它们表示“我们证明这些交易包含在此次顺序中,并且 the post-state root 就是这个”。这些参与者可能会签署一个与后来的实际情况不符的预确认;但如果他们这样做,就会烧掉一笔押金。这对于低价值的应用程序(如消费支付)非常有用,而像数百万美元的金融转账这样的高价值应用程序可能会等待系统的完全安全性支持的“常规”确认。
预确认可以被看作是另一个混合系统的例子,类似于上面提到的“Plasma/Validium 混合系统”,但这次是在具有完全安全性但延迟较高的 Rollup(或 Validium)和具有较低安全级别但延迟较低的系统之间进行混合。需要较低延迟的应用程序获得较低的安全性,但可以与需要较高延迟以换取最大安全性的应用程序共存于同一生态系统中。
另一种较少考虑但仍然非常重要的连接形式与系统读取以太坊区块链的能力有关。特别是,这包括能够在以太坊需要回滚时进行回滚。要了解为什么这很有价值,请考虑以下情况:
假设,如图所示,以太坊链发生回滚。这可能是在一个 epoch 内暂时的故障,链没有最终确定,也可能是网络验证着不活跃,太多的验证者离线
而导致链在一个较长时间内没有最终确定。
这可能导致的最糟糕情况如下。假设顶链(the top chain)的第一个区块从以太坊链的最左边的区块中读取了一些数据。例如,有人在以太坊上存入了 100 个 ETH 到顶链中。然后,以太坊发生回滚。然而,顶链没有回滚。结果,顶链的未来区块正确地遵循了新的正确的以太坊链的新区块,但现在错误的旧链(即 100 个 ETH 的存款)的结果仍然存在于顶链中。这种漏洞可能允许制造货币,将顶链上的桥接 ETH 转变为部分储备。
有两种方法可以解决这个问题:
顶链可以只读取已经最终确定的以太坊区块,这样就不需要进行回滚操作。
如果以太坊发生回滚,顶链也可以进行回滚。
两者都可以防止此问题发生。前者更容易实现,但如果以太坊进入不活跃期,可能会导致长时间丧失功能。后者更难实现,但始终确保最佳的功能。
需要注意的是,第一种方法(1)存在一种特殊情况。如果 51% 攻击在以太坊上创建了两个不兼容的区块,并且两个区块同时出现最终确定状态,那么顶链可能会选择错误的区块(即以太坊社区共识最终不支持的区块),并且必须进行回滚以切换到正确的区块。可以说,没有必要提前编写处理这种情况的代码;它可以通过对顶
链进行硬分叉来处理这个问题。
链能够无需许可地读取以太坊上的数据非常有价值,原因如下:
减少将在以太坊(或其他 Layer 2)上发行的代币跨链到该链上时涉及的安全问题。
允许使用共享密钥存储结构的账户抽象钱包安全地在该链上持有资产。
第一个原因很重要,尽管这种重要性可能已经被广泛认可;而第二个原因同样重要,因为它意味着你可以拥有一个钱包,可以轻松更改密钥,并在许多不同的链上持有资产。
假设顶链开始时是一条单独的链,然后有人将跨链合约放到以太坊上。跨链合约只是一个合约,它接受顶链的区块头,验证提交给它的任何头都带有一个有效的证书,表明它被顶链的共识所接受,并将该头添加到列表中。应用程序可以在此基础上构建,以实现存入和提取代币等功能。一旦这样的桥梁到位,它是否提供了我们之前提到的任何资产安全保障?
到目前为止,还没有!原因有两个:
我们正在验证块是否已签名,但未验证状态转换是否正确。因此,如果你在以太坊上发行的资产存入了顶链,而顶链的验证者耍流氓,他们可以签署一个无效的状态转换,窃取这些资产。
顶链仍然没有办法读取以太坊数据。因此,如果不依赖其他(可能不安全的)第三方桥,您甚至无法将以太坊原生资产存入顶链。
现在,让我们让这座桥成为验证桥:它不仅检查共识,还检查一个 ZK-SNARK,证明任何新区块的状态都计算正确。
一旦完成,顶链的验证者就无法再窃取您的资金。他们可以发布一个包含不可用数据的区块,阻止所有人退出,但他们不能窃取(除非试图为用户提取赎金以换取泄露允许他们退出的数据)。这与 Validium 的安全模型相同。
但是,我们仍然没有解决第二个问题:顶链无法读取以太坊。
为此,我们需要做以下两件事之一:
将验证最终以太坊区块的跨链合约放在顶链内。
让顶链中的每个区块都包含最近以太坊区块的哈希值,并有一个强制执行哈希链接的分叉选择规则。也就是说,链接到不在规范链中的以太坊区块的顶链区块本身是非规范的,如果顶链区块链接到一个以太坊区块,该区块最初是规范的,但后来变成了非规范的,那么顶部链区块也必须成为非规范的。
图中紫色的链接可以是哈希链接,也可以是验证以太坊共识的桥接合约。
这样就足够了吗?事实证明,还不够,因为存在一些小的特殊情况:
如果以太坊受到 51% 攻击会怎样?
如何处理以太坊硬分叉升级?
如何处理顶链的硬分叉升级?
以太坊的 51% 攻击会产生与顶链的 51% 攻击类似的后果,但方向相反
。以太坊的硬分叉可能使顶链内的以太坊桥接不再有效。对于这个问题,最干净的解决方式是承诺如果以太坊回滚了一个已最终确定的区块,顶链也会回滚,并且如果以太坊进行硬分叉,顶链也会进行硬分叉。这样的承诺可能永远不需要真正执行:你可以在顶链上激活一个治理机制,如果它看到可能发生攻击或硬分叉的证据,只有当治理机制失败时才对顶链进行硬分叉。
对于问题(3),唯一可行的答案是,在以太坊上拥有某种形式的治理机制,可以使以太坊上的桥接合约意识到顶链的硬分叉升级。
总结:双向验证桥接几乎足以使链成为 Validium。剩下的主要问题是,在以太坊发生异常情况导致桥接无法工作时,另一条链将进行硬分叉的社会承诺。
“与以太坊的连接”有两个关键维度:
提现到以太坊的安全性
读取以太坊数据的安全性
这两个维度都很重要,并且有不同的考虑因素。在这两种情况下都存在一个谱系:
请注意,每个维度都有两种不同的衡量方式(所以实际上有四个维度?):提取安全性可以通过(i)安全级别和(ii)从最高安全级别中获益的用户或用例的百分比来衡量,而读取安全性可以通过(i)链路能够快速读取以太坊的区块,特别是已经最终确定的区块与任何区块的区别,以及(ii)链路在处理 51% 攻击和硬分叉等边缘情况时的社会承诺的强度。
在这个设计空间中,有许多项目都具有价值。对于某些应用程序来说,高安全性和紧密的连接性很重要。对于其他应用程序来说,为了获得更高的可扩展性,可以接受一些较为宽松的连接性。在许多情况下,从今天开始使用一些较为宽松的方法,并在未来十年随着技术的改进逐渐过渡到更紧密的连接可能是最佳选择。