基础层(Layer1) 与功能逃逸速度

文章讨论了区块链中基础层(Layer 1)和上层协议(Layer 2)之间的关系,强调了基础层需要具备足够的功能性(即“功能性逃逸速度”)才能支持上层协议的构建。文章详细探讨了基础层需具备的编程语言、状态丰富性、数据可扩展性和低延迟等功能,并指出仅依赖上层协议解决扩展性和功能性问题是不现实的。

基础层和功能逃逸速度

在区块链领域,一个常见的思路如下:区块链应该尽可能简单,因为它是一种基础设施,难以更改,如果出现故障会导致严重的损害,而更复杂的功能应该以第二层协议的形式构建在其之上:状态通道PlasmaRoollup 等等。第二层应该是持续创新的场所,第一层应该是稳定维护的场所,仅在紧急情况下进行重大更改(例如,防止基础协议的密码学受到量子计算机攻击的一次性重大变更是可以接受的)。

这种分层的想法是非常好的,并且从长远来看,我强烈支持这个想法。然而,这种思维方式忽视了一个重要的点:虽然第一层不能 过于 强大,因为更大的力量意味着更大的复杂性,从而导致更大的脆弱性,但第一层也必须 足够强大,以便人们想要构建的第二层协议实际上能够在第一层之上实现。一旦第一层协议达到了某种功能水平,我将其称为“功能逃逸速度”,那么是的,你可以在不进一步更改基础层的情况下在其之上做任何其他事情。但是如果第一层不够强大,那么你可以谈论通过第二层系统来填补这一空白,但现实是确实无法构建这些系统,而不会重新引入第一层试图摆脱的一整套信任假设。本文将讨论构成“功能逃逸速度”的某些基本功能。

一种编程语言

必须能够在区块链上执行用户生成的自定义脚本。这个编程语言可以很简单,实际上并不需要高性能,但至少需要具备验证可能需要验证的任意事物所需的功能水平。这一点很重要,因为要构建的第二层协议需要某种验证逻辑,而这个验证逻辑必须以某种方式由区块链执行。

你可能听说过 图灵完备性;这个术语的“外行直觉”是,如果一种编程语言是图灵完备的,那么它能够做计算机理论上能够做的任何事情。任何在某种图灵完备语言中的程序都可以被翻译为任何其他图灵完备语言中的等效程序。然而,事实证明我们只需要一些稍微轻量级的东西:可以限制不包含循环的程序,或者在特定步骤中 保证终止 的程序。

丰富的状态性

不仅编程语言能 存在 是重要的,编程语言如何与区块链集成也是重要的。语言的某些更加限制性的集成方式是,它被用于纯交易验证:当你将硬币发送到某个地址时,该地址代表一个计算机程序 P,该程序将用于验证从该地址发送的交易。如果你发送的交易的哈希为 h,那么你需要提供一个签名 S,区块链将运行 P(h, S),如果结果为 TRUE,那么交易就是有效的。通常情况下,P 是一个密码签名方案的验证器,但它也可以执行更复杂的操作。特别注意,在此模型中,P 无法访问 交易的目的地。

然而,这种“纯函数”方法并不足够。这是因为这种基于纯函数的方法并不够强大,无法实现人们实际上想要实现的许多类型的第二层协议。它可以实现通道(及基于通道的系统如闪电网络),但无法实施其它更强功能属性的扩展技术,不能被用于引导那些确实具有更复杂状态概念的系统,等等。

以纯函数范式无法做到的简单实例来说明,考虑一个储蓄账户,它具备如下特性:有一个密码学密钥 k 可以发起提取,如果提取被发起,在接下来的 24 小时内,使用相同的密钥 k 可以取消提取。如果提取在 24 小时内未被取消,则任何人都可以“戳”该账户以最终批准该提取。目标是,如果密钥被盗,账户持有人可以阻止小偷提取资金。当然,小偷可以阻止合法所有者获得资金,但这种攻击不会使小偷获利,因此他们可能不会去做(详见原始论文以解释此技术)。

不幸的是,仅用纯函数无法实现这种技术。问题是:需要有某种方式将硬币从“正常”状态转移到“等待提取”状态。但程序 P 并不拥有对目的地的访问权!因此,任何授权将硬币转移到“等待提取”状态的交易,也可以授权立即盗取这些硬币;P 无法区分两者。在不完全释放硬币的情况下改变硬币状态的能力,对包括第二层协议在内的许多类型的应用程序是重要的。Plasma 本身适用于这种“授权、最终决策、取消”的范式:从 Plasma 退出必须经过批准,然后有 7 天的挑战期,在这个挑战期内,如果提供了相应的证据,可以取消该退出。汇总也需要这种属性:在汇总内的硬币必须被一个跟踪状态根 R 的程序控制,并且在某个验证器 P(R, R', data) 返回 TRUE 的情况下,从 R 更改为 R' - 但只有在这种情况下才更改状态为 R',并不会释放硬币。

在不完全释放账户中所有硬币的情况下授权状态更改的能力,就是我所说的“丰富的状态性”。可以通过多种方式实现这种状态性,某些基于 UTXO,但没有它,区块链在不引入信任假设(例如一组被集体信任的执行这些丰富状态程序的职能人员)的情况下,无法强大到足以实现大多数的第二层协议。

充分的数据可扩展性和低延迟

事实证明,Plasma、通道和完全离线的其他第二层协议存在一些基本缺陷,阻止它们完全复制第一层的能力。我在这里详细讨论了这一点;总结就是,这些协议需要有一种方式来裁决某些方恶意未提供他们承诺提供的数据的情况,而且由于数据发布不是全球可验证的(你不知道数据何时被发布,除非你自己已经下载了它),因此这些裁决游戏并不是博弈论稳定的。通道和 Plasma 聪明地通过添加额外假设来绕过这一不稳定,特别是假设对于每条状态,都有一个单一的行为者对此状态不被错误修改感兴趣(通常是因为它代表了他们拥有的硬币),因此可以被信任为其辩护。然而,这远非通用;例如,像 [Uniswap](http://uniswap.exchange/) 这样的系统有一个大型“中央”合同,没有任何人拥有,因此无法通过这种范式有效地受到保护。

唯一的解决方法是发布非常少量的数据在链上,但完全在链下进行计算的第二层协议。如果保证数据可用,那么在链下进行计算是可以接受的,因为对于裁定谁做的计算是正确的,谁是错误的游戏 - 这确实-\ 被博弈论所稳定(或者可以完全用 SNARKs 或者 STARKs 来替代)。这就是ZK Rollup乐观 Rollup 的逻辑。如果区块链允许发布并保证合理大数量的数据可用,即使其 计算 能力仍然非常有限,区块链也能够支持这些第二层协议,并达到较高的可扩展性 功能性。

区块链需要处理和保证多少数据?好吧,这取决于你希望什么 TPS。使用汇总,可以将大多数活动压缩到每笔交易 ~10-20 字节,因此每秒 1 kB 可以达到 50-100 TPS,每秒 1 MB 可以达到 50,000-100,000 TPS,以此类推。幸好,互联网带宽 持续快速增长,并没有因为计算的摩尔定律减缓,因此在不增加计算负担的情况下提高数据扩展性是区块链可以采取的一个可行路径!

还要注意,不仅仅是数据容量重要,数据延迟也很重要(即具有低块时间)。像汇总(或实际上 Plasma)这样的第二层协议只有在数据实际被发布到链上时才会提供任何安全保障;因此,数据被摄入(理想情况下“最终确定”)到链上的时间就是 Alice 向 Bob 发送支付与 Bob 确信该支付将被包括的时间的间隔。基础层的块时间为与基础层中的事物确认相关的任何过程设定了延迟。这可以通过在链上的安全存款,也就是“债券”,来解决,但代价是高资本低效;但是这种方法本质上是不完美的,因为恶意行为者可以通过牺牲一个存款来欺骗无限多不同的人。

结论

“保持第一层简单,在第二层弥补”并不是区块链可扩展性和功能问题的普遍答案,因为它未能考虑到第一层区块链自身必须具备足够的可扩展性和功能水平,以便这种“在其之上构建”实际上成为可能(除非你所谓的“第二层协议”只是可信的中介)。但是,确实,在达到某个点后,任何第一层功能 都可以 在第二层上复制,在许多情况下,进行这种复制,提高可升级性是个好主意。因此,我们需要 在短期内实现第一层与第二层的并行开发,长期内更多地关注第二层

  • 原文链接: vitalik.eth.limo/general...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Vitalik Buterin
Vitalik Buterin
https://vitalik.ca/