区块链
前言:V神认为,虽然从长远看,layer 1应保持简单和稳定,layer 2聚焦更多创新,这种想法是好的。但是,从短期看,layer 1还不够强大,要想达成这种layer 1和layer2的完美分层关系,首先要让layer 1足够强大,而这个足够强大就是要让layer 1协议达到一定级别的功能。所谓的一定级别,就是实现layer 1和layer 2完美互补关系的最小功能级别。V神用“功能逃逸速度”进行比喻。那么,layer 1必须要有那些最小功能呢?其中包括一种可以验证需要验证的任意内容的编程语言;丰富的有状态性(如授权改变代币状态而无需完全释放它们的能力);数据可扩展性和低延迟等。
区块链领域有一个普遍的思路:区块链应该最大程度上简单,因为它们是很难改变的基础架构,一旦破坏会造成巨大危害,而更复杂的功能应该在上层构建,以layer 2协议的形式:状态通道、Plasma、Rollup等。layer 2是进行持续创新的地方,而layer 1应该保持稳定性和进行维护,只有在紧急情况下才进行大的更改(例如防止基础层的加密被量子计算机攻破,这种情况下进行一次性重大的更改是可以的)
这种分离层的想法是非常好的主意,从长期看,我强烈支持这种想法。然而,这种想法忽略了一个重要的观点:尽管layer 1无法很强大,但是由于更大的能力意味着更大的复杂性并因此带来更大的脆弱性,因此layer 1也必须足够强大,以使得构建其上的layer 2协议首先是可能的。
一旦layer 1协议达到一定级别的功能,我将其称为“功能逃逸速度”,那么到了这个时候,你可以在这个基础上做其他所有事情,而无须改变基础层。但是,如果layer 1功能不够强大,那么,你可以谈论填补与layer 2系统的空隙,但现实是,如果不再次引入layer 1试图摆脱的整套信任假设,实际上就没有办法构建这些系统。
本文会讨论构成“功能逃逸速度”的最小功能的一些含义。
一种编程语言
必须有可能在链上执行定制的用户生成的脚本。这种编程语言可以很简单,且实际上并不需要高性能,但它至少需要拥有这种级别的功能:能够验证可能需要验证的任意内容。这很重要,因为要构建于基础层之上的layer 2协议需要某种验证逻辑,这种验证逻辑必须以某种方式由区块链执行。
你可能听说过图灵完备性。对这个术语,“外行人的直觉”是如果一种编程语言是图灵完备的,那么它可以做计算机理论上可以做的任何事情。一种使用图灵完备语言编程的程序可以翻译成任何其他图灵完备语言的等效程序。但是,事实证明,我们只需要更轻一些的东西:可以将编程限制为无循环,或者可以保证程序在特定数量的步骤之后终止。
丰富的状态
不仅存在一种编程语言重要,而且该编程语言如何精确地集成到区块链中也很重要。在可集成语言的更受限的方法中,如果它用于纯粹交易验证:当你向某个地址发送代币,该地址代表了计算机程序P,P可用于验证从这个地址发送代币的交易。
也就是说,如果你发送的哈希值为h的交易,你提供的签名为S,那么区块链会运行P(h,S),如果输出为TRUE,那么交易是有效的。通常,P是用于加密签名方案的验证器,但它可以执行更加复杂的操作。尤其需要注意的是,在这一模型中,P并不能访问交易的目的地。
但是,这种“纯函数”的方法还不够。这是因为这种纯粹基于函数的方法并不足以执行人们实际想实现的多种类型的layer 2协议。它可以处理通道(以及基于通道的系统,如闪电网络),但它无法实现具有强大属性的其他扩展性技术,它也无法用于引导出具有更复杂状态概念的系统,等等。
为了简单说明纯函数范式无法做什么,可以考虑一下具有如下功能的储蓄账户:存在一个加密密钥k,k可以发起提款,且如果发起了提款,在接下来的24小时内使用相同的密钥k可以取消提款。如果提款在24小时内仍未取消,则任何人都可以“戳”该账户以完成提款。
这么做的目的是,如果密钥被盗,账户持有人可以防止偷窃者提取资金。偷窃者当然可以阻止合法持有人获得资金,但这种攻击对于偷窃者来说将是无利可图的,因此他们可能不会去干这种事。
遗憾的是,如果仅用纯函数这种技术无法实现。问题是:需要用某种方式将代币从“正常”状态转变为“等待提款”状态。但程序P无法访问目标地。因此,任何可以授权将代币移至等待提款状态的交易也可以授权立即偷取这些代币;程序P无法分辨出其中差异。
这种改变代币状态而无须完全释放它们的能力,对很多应用来说都很重要,其中也包括layer 2协议。Plasma自身就符合这种“授权,最终确定,取消”的范式:从Plasma退出必须被批准,然后有7天时间的挑战期,在这个挑战期内,如果能提供正确的证据,退出可能被取消。
Rollup也需要这种属性:在rollup内的代币必须由程序控制,该程序持续跟踪状态根R,并且如果某验证器P(R, R‘,数据)返回TURE,则将R更改为 R’,但在这种情况下,它仅仅将状态改变为R‘,它并不释放代币。
授权状态改变而无须完全释放一个账户中的所有代币,这种能力我称之为“丰富的有状态性”。它可以在很多方面实现,有些基于UTXO的,但如果没有它,区块链不足以实现大多数layer 2协议,而无须包含信任假设(例如,一组人得到集体信任执行这些丰富状态的程序)。(蓝狐笔记:也就是无须信任第三方)
请注意:是的,我知道如果P可以访问h,那么,你可以将目标地址包括进来作为S的一部分,然后对照h进行检查,并以此方式来限制状态改变。但是,可能有一种编程语言其资源太有限或受限于实际上的执行。让人吃惊的是,在区块链脚本语言中通常确实如此。(蓝狐笔记:这里的h是指哈希值,S是指签名)
足够的数据可扩展性和低延迟
事实证明,Plasma和通道以及其他完全链下的layer 2协议有一些根本性的弱点,使得它们无法完全复制layer 1的能力。
我在这里详细探讨。总结来说,这些协议需要一种判断情形的方法,其中一些参与方恶意地不提供他们承诺提供的数据,且因为数据发布并非是全局可验证的,这些判断游戏在博弈论上看是不稳定的(你无法知道什么时候发布数据,除非你已经自行下载)。
通道和Plasma巧妙地通过添加额外假设来解决这种不稳定性,特别是假定对于每个状态,都有一个参与者对该状态不被错误修改感兴趣(通常是因为它代表了其拥有的代币),因此,为其自身利益可以被信任。但是,这远非通用。例如,像Uniswap这样的系统,有一个大型的“中央”合约,它不归任何人所有,因此,它们无法有效地受到这种范式的保护。
有一种方法可以解决这个问题,其中layer 2协议在链上发布非常小量的数据,但完全在链下进行计算。如果数据可以确保可用,那么,链外进行计算是可行的,因为判断谁正确计算谁没有正确计算的游戏在博弈论上是稳定的(或者可以完全由SNARKs或STARKs取代)。
这是ZK rollup和optimistic rollup背后的逻辑。如果区块链允许发布并确保合理的大量数据的可用性,即使其计算能力非常有限,那么,区块链也能支持这些layer 2协议,并实现高水平的可扩展性和功能。
区块链需要处理和确保多少数据?好吧。这取决于你想要多少TPS。通过rollup,你可以将大多数活动压缩至每个交易大约10-20字节,因此,1kb/秒,大约可以有50-100的TPS,1MB/秒大约50,000-100,000的TPS,以此类推。
幸运的是,互联网带宽持续快速增长,并且在计算方面并没有看到摩尔定律的减速,因此,在不增加计算负载的情况下增加数据的可扩展性,这对于区块链来说,是非常可行的路径。
请注意,不仅数据容量很重要,数据延迟也重要,也就是具有低区块时间。Layer 2协议,如rollup(或就此而言,Plasma)只是当数据实际发布到链上时才给予任何安全性保证。因此,数据被可靠地包含在链上(理想情况下是“实现最终性”)所耗费的时间是指当Alice向Bob发送支付款项和Bob确信支付被包含进去之间所花费的时间。
基础层的区块时间设置了任何内容的延迟时间,这些内容的确认依赖于其被包含进基础层。可以用链上安全存款(也称为“债券”)来解决此问题,其代价是资本效率低下,这种方式本质上不完善,因为恶意行为者可以通过牺牲一个存款质押欺骗无数人。
结论
“保持layer 1简单,在layer 2上弥补”并不是解决区块链可扩展性和功能性问题的通用答案。因为它没有考虑到layer 1区块链自身必须要有足够的可扩展性和功能性,以使得构建其上实际上成为可能(除非你所谓的“layer 2协议”只是可信的中介)。
但是,在某个点之外,任何layer 1功能确实可以在layer 2上复制,且在很多情况下,通过这样做提高可升级性是个好想法。因此,在短期内,我们需要layer 1跟layer 2并行发展,从长远看,我们需要更多聚焦于layer 2。
责任编辑;zl
全部0条评论
快来发表一下你的评论吧 !