Vitalik:Layer-1 短期求创新,长期求保守

把更多功能整合进基础层区块链(即所谓的”Layer-1“),还是放到区块链之上的协议中(即所谓的”Layer-2“)使得创建和改进的工作无需动摇链本身,这是区块链设计中权衡考量的重点。迄今为止,这种权衡在扩展方面的辩论中表现得最为明显,一派支持增加区块大小(以及分片),而另一派支持 Plasma 以及状态通道一类的 Layer-2 解决方案;从某种程度上来说,区块链治理也是如此,关于如何恢复损失/失窃资产的问题,一派主张使用the DAO 硬分叉及其普遍化方案如 EIP 867 ,而另一派倾向于 可撤回 ETH(Reversible Ether,RETH)这样的 Layer-2 方案。那么哪一种方案更胜一筹呢?那些了解我的人,或者视我为无原则中间派的人,都知道我肯定会说,“两相结合吧”。然而,从长期来看(in the long term),我确实认为,随着区块链变得越来越成熟, Layer-1 必将变得更稳定,而 Layer-2 将承担起越来越多持续创新、迎接挑战的重任。

个中因由说起来还真不少。第一个原因是,在 Layer-1 上寻求解决方案要求在基础层上进行持续的协议变更,而基础层变更需要治理,而迄今为止尚未得到证明的是:在长期中,高度“活跃”的区块链治理可以持续进行且不会导致政治上的不确定性并塌缩为中心化

要在别的领域找一个例子的话,考虑 Moxie Marlinspike 的文章 为 Signal 的中心化及非联合性质辩护。一个公司,居然声称自己有权利为自己的关键业务控制一个自己生长于斯的生态系统;我们当然应该带着怀疑主义的眼光来看待这份文件,但我们还是可以从这些争论中受益。引用一些段落:

早期,我们对 Signal 做过最有争议的事情,就是将它开发为一个非联合服务(unfederated service)。我们开发的任何协议都不需要中心化;开发一个联合性质的基于 Signal 协议的消息服务是完全有可能的,但我再也相信,开发一个竞争性的联合消息服务是有可能的了。

以及:

他们的反驳是,“这很蠢哎,如果没有由第三方定义的互操作性协议,互联网又能走多远呢?”我想过了。有了 IP 的第一个生产版本之后,我们一直在尝试切换到 IP 的第二个生产版本,然而二十年来收效甚微;在 1997 年我们有了 HTTP 1.1 版,然后就被困在那里直到现在;类似的,SMTP、IRC、DNS、XMPP,无一例外都冻结在 90 年代后期。这就是我的回答,这就是互联网走了有多远:90 年代末,没更多了。

虽然这已经将我们带出好远,但不可否认的是,一旦你将协议联合化,就很难再做变更。而现在,在应用层,静止不变的东西不能很好地适应这个生态系统不断变化的世界……只要联合意味着静止而中心化意味着变化,联合的协议就会变成需要变化的软件客户端中存在的麻烦,就像当前的情形一样。

在这个时间点以及中期来看,很明显的是:去中心化应用平台、加密货币支付手段、身份系统、声誉系统、去中心化交易所机制、拍卖、隐私保护方案、支持隐私保护的编程语言,以及绝大多数可以在区块链上做的有趣东西,都是重要且会持续创新的领域。去中心化应用平台通常需要不断减少确认时间;支付手段也需要快速确认、低手续费、隐私保护以及其它内置的功能;交易所会以不同的规模出现在很多领域,包括链上自动做市商高频分批拍卖组合拍卖等等。因此,将这些功能“整合”进基础层区块链是个坏主意,因为它会产生很高的治理成本,平台要不断地争论、实现以及协调新近发现的技术进展。因为同样的理由,联合性的消息服务很难在不重新中心化的情况下起步,区块链也需要在 适应性活跃治理(并承担风险) 与 落后于新出现的替代方案之间作出选择。

即便以太坊有限程度的应用定制功能和预编译,也已经看到了苗头。不到一年以前,以太坊部署了拜占庭硬分叉,引入了促进椭圆曲线 运算 的操作,这些运算是环签名、ZK-SNARK 以及其它应用为使用 alt-bn128 曲线所必需的。现在,Zcash 和其它区块链都正在向 BLS-12-381 转化,而以太坊需要再次分叉才能跟上。部分是为了避免在未来遇上类似的问题,以太坊社区正在着手将 EVM 升级为 E-WASM,一种更高效率的虚拟机,使得我们可以大幅减少包含应用定制型预编译的需要。

不过,除了上述基于预期技术发展速度的考虑,还有另一种偏爱 Layer-2 解决方案的主张:有时候会存在不可避免、但又没有全局最优解决方案的权衡。在以太坊 1.0 类型的区块链中,这一点并不那么明显,因为存在普遍有效的确定模式(例如,以太坊的基于账户的模式)。但是,在分片的区块链中就会突然出现一个在当前的以太坊上还不存在的问题:如何跨分片交易?也就是说,假设区块链状态被划分为 A 和 B,很少甚至没有节点同时处理 A 和 B,那么系统该如何处理会同时影响 A 和 B 的交易呢?

现有的答案中包括异步的跨分片交易,这对转移资产以及一些应用来说就足够了,但对很多其它应用来说却远远不够。同步操作(例如:解决火车与旅馆问题)可以绑定到 跨分片 yanking,不过这就要用上多轮的跨分片交互,会产生很高的延迟。我们也可以用同步执行模式来解决这个问题,但会伴随着下列权衡:

  • 系统在单个区块中为同一个账户处理的交易不能超过 1 笔
  • 交易必需提前声明它会影响到的分片合地址
  • 如果交易只被它所影响的部分分片所接受,交易失败的风险会很高(而且依然需要支付手续费!)

看起来,很有可能可以开发出一个更好的方案,但会更加复杂,而且很可能会遇上现有方案所没有的限制。我们已经知道完美是不可能的了;至少, 应用和某些类型的交互通过并行化来提高每秒吞吐量的前景,受到了Amdahl’s law 严格的限制。

那么,我们如何创建一个可以让方案得到测试和部署的环境呢?Justin Drake 的想法提供了一个答案: Layer-2 执行引擎。 用户可以发送资产到一个“桥接合约(Bridge Contract)”,这个合约会(使用像 交互验证和 ZK-SNARKs 这样间接的技术)计算一套替代性共识规则的状态根(把它想成等价于 Layer-2 的“元协议” 如 Mastercoin/OMNI 以及比特币区块链上的 Counterparty,就除了因为这是个桥接合约,这些协议能处理由底层协议定义的“基础账本”上的资产),并且这个合约还能处理退出,当且仅当该替代性规则集产生了一个退出请求。

注意,任何人都可以在任何时候创建一个 Layer-2 执行引擎,不同的用户可以使用不同的执行引擎,而且用户也可以快速切换执行引擎或回到基础层。基础区块链不再需要顾虑于智能合约执行的效率;它只需要变成一个数据供给层,附带准图灵完备的执行规则,使得所有 Layer-2 桥接合约都可以建构在上面,并且支持在分片间传输状态的基本操作(实际上,只有同质 ETH 的跨分片转账是充分的,但只消少许功夫就可以支持跨分片调用,所以我们没准可以很好地支持这些操作),但不需要更加复杂的东西。同样需要指出的是: Layer-2 执行引擎也可以有与 Layer-1 不同的状态管理规则,例如:没有存储租金;所有东西都可能丢失,因为保证这些东西的持续是特定执行引擎的用户的责任,如果用户们失败了,结果就只能保存在特定执行引擎的用户之间(译者注:此处的意思疑为“保证注入 Layer-2 的资产可以退出到 Layer-1 是用户而非底层的责任,如果使用 Layer-2 的用户做不到,这些资产及其计算结果就只能保存在用户之间,而回不到 Layer-1”)。

从长期来看, Layer-1 不会在所有技术改进上积极地竞争;它只会提供稳定的平台,使得 Layer-2 的创新能够发生。这是否意味着,比如说,分片是个坏主意,我们应该保证区块链的规模和状态足够小,使得用了 10 年的老爷计算机,都可以处理每一个人的交易?当然不是!即便执行引擎或部分或全部转移到 Layer-2 上,对数据排序(ordering)和可用性(usability)的共识仍然是一个高度可普遍化且必需的功能;想知道如果没有 Layer-1 数据可用性共识时 Layer-2 执行引擎有多难弄,举例而言,请看 Plasma 研究中遇到的 困难,以及,Plasma 自然扩展成完全通用的区块链的困难(编者注:中译本见文末超链接《为什么在 Plasma 上难以运行 EVM》)。并且,如果人们想要每秒输入 100 兆字节到一个系统中,出于可用性共识的目标,我们就需要每秒能处理 100 兆字节的数据可用性共识算法。

此外, Layer-1 始终可以在减少延迟(Latency)上做改进;如果 Layer-1 很慢,实现极低延迟的唯一策略就是状态通道(编者注:中译本见文末《广义以太坊状态通道》),但它有较高的资本要求并且难以普遍化。状态通道在延迟上永远完胜 Layer-1 区块链,因为状态通道只需要一条网络消息,但在那些状态通道不能完美胜任的场景中, Layer-1 区块链仍有潜力可以挖掘。

因此,另一个极端立场,即“区块链基础层可以真正绝对地最小化、既不必白费心机处理准图灵完备的执行引擎、也不必纠结于超越单点处理能力的可扩展性”,同样明显是错误的。为使得基础层强大到足以支持我们在上面开发应用,我们就必须有一定程度的复杂性,而当前我们连这种最低程度的复杂性也还没有达到。我们也需要额外的复杂性,但我们应谨慎选择以确保这些复杂性在最大程度上是通用的,而不是以那些两年内就会因为人们失去兴趣或更好的替代品出现而过气的特定应用或技术为目标。

虽然在未来,基础层仍需不断更新,尤其是当新技术(例如:高度成熟的 STARK)使我们能够实现比以往更强大的性能时,今天的开发者还是可以致力于让基础层平台对这些潜在的提升保持最大限度的前向兼容(forward-compatible)。所以,在 Layer-1 升级和 Layer-2 升级之间保持一定的平衡以持续提升可扩展性、隐私性和多功能性,看起来仍然是对的;即便 Layer-2 将随时间推移承担起越来越大的创新责任。

2018.08.29 更新:Justin Drake 向我指出了另一个某些新功能最好在 Layer-1 上实现的理由:那些功能是公共品(Public Good),所以没法高效或可靠地从功能专项使用费中得到投资,因此最好的方式是通过发放补贴或消耗的交易手续费中支付。一个可能的例子是安全的随机数生成器。

        
微博:@nextcoin    微信公众号:blockchains     QQ群号:338331006     QQ公众号:blockchain