区块链第一层只会在短期内继续创新,接下来要交给第二层了
Vitalik 原文:https://vitalik.ca/general/2018/08/26/layer_1.html
决定区块链平衡设计的关键,是考虑将功能放进公链基础层本身“第1层”,或是将功能建立在公链上的协议中,并且可以在不会影响公链本身的情况下进行创建和修改的“第2层”。
今天大家大家对于平衡设计的争议大多在于扩容,像是区块大小、分片方案和第2层的解决方案,如Plasma和状态通道。另外在区块链的治理方面,丢失与盗窃的恢复,不论是透过DAO分岔或是EIP-867治理提案,或由2层解决方案的RETH,哪种方法最终会更好呢?
那些很了解我的人,或是认为我是一个肮脏的中间派的那些人,都知道我将不会只有单一选项。然而从长远来看,我认为随着区块链越来越成熟,第1层必然会稳定下来,第2层将承担越来越多的持续创新和变革的负担。
原因有几个。第一,第一层解决方案需要协议改变发生在基础层,基础层协议改变需要通过社区治理,但这样的方式这尚未明朗。从长远来看,只要排除政治不确定性或系统崩溃变成集权,那高度的激进社区治理可以继续。
以另一个领域为例,考虑了 Moxie Marlinspike 的文章 “防止 Signal 的中心化与联邦化”。一家公司为了维护其关键业务的控制权所撰写的一份文件,我们当然应该被质疑,但我们仍可以从中受益。引用:
我们在早期对 Signal 所做的争议事情之一是将其构建为一个非联邦协议。我们开发的任何协议都不需要中心化,完全可以建立基于联邦信号协议的通信软件,但我不再认为这种方式具有竞争力。
人们的反驳是:"这太愚蠢了,如果没有第三方定义的交互协议,互联网能走多远?"
我想了想:“我们实现了IP的第一个版本,并且在过去20年里一直在努力推进到第二个版本,但没有什么效果。我们在1997年得到了HTTP版本1.1,直到现在还停留在那里。同样地,SMTP、IRC、DNS、XMPP在20世纪90年代末也同样被冻结了。” 这是我的回答,而这就是90年末的互联网的发展状况。
但这些协议已经让我们走了很远,不可否认的是,一旦将协议联合起来,就很难进行更改。在应用层级,世界上仍然有许多事务阻挡着生态系统往前……只要联盟化意味着发展停滞而中心化,联邦协议要面临许多问题,现有的软件,应用程序需要这些联邦的协议往前推动。
在中期看来,Dapps平台、数字货币支付支付、身份系统、声誉系统、去中心化交易机制、拍卖、隐私的解决方案、支持隐私保护的编程语言,与其他有趣的事情可以在区块链上持续的创新。Dapps 通常需要减少确认时间、支付需要快速确认、低交易成本、隐私和许多其他内置功能。而交易所会以多种形式和规模出现,包括链上自动做市商、频繁的批量拍卖、组合拍卖等等。因此,建立任何一个底层区块链都不是一个好主意,因为它将会有一个高水平的治理开销,因为平台将不得不一直讨论、实现和协调,最后才能让技术改进。出于同样的原因,联邦信使很难在不断中心化的情况下起步,区块链还需要除了激进治理和替代方案之间做出选择。
即使已经预测到 Ethereum 对于应用程序的功能有所限制,我们还是看到了这种结果。不到一年前,Ethereum采用了拜占庭硬分叉,包括使用 alt-bn128 曲线来实现环形签名、ZK-SNARKs 等应用所需的椭圆曲线操作。现在,Zcash和其他项目正在走向 BLS-12-381,而以太坊需要再次分叉才能赶上。为了避免将来出现类似的问题,Ethereum社区正在尝试将 EVM 升级到 E-WASM,这是一种更高效的虚拟机,不需要集成于特定的应用程序编辑器。
但也有另一个支持第2层解决方案的观点,该方案不依赖于目前的技术开发速度,有的时候为了权衡各种因素,没有单一的最优解决方案,而这在以太坊 1.0 风格中不太容易看到,在这些区块链中,某些模型是相当普遍的(例如以太坊基于账户的模型就是一个例子),然而在分片区块链中,有一种问题在如今的以太坊中并不存在:如何进行交叉分片交易?也就是说,假设区块链状态具有区域A和区域B,其中很少或没有节点同时处理A和B,系统如何处理同时影响A和B的交易?
当前的解决方案使用异步交叉分片通信,这对于转移资产和其他一些应用程序来说已经足够了,但是对于其他许多应用程序来说还不够。例如要同步解决火车和酒店的问题,可以用交叉分片在最顶层处理,但这需要多次交叉分片的动作,导致明显的延迟。当然我们仍然可以用同步执行方案来解决这些问题,但是这需要权衡几个方面:
- 系统不能为每个区块中的相同帐户处理多笔交易
- 交易必须预先声明它们影响的分片和地址
- 如果交易只在它影响的分片中接受,而在其他分片中不接受,那么任何指定的交易失败,仍然有很高的风险需要支付费用
还是有可能开发出更好的方案,但它会更复杂,而且很可能有局限性。目前已经知道的结果无法完美实现,至少,安达尔定律对某些应用程序的 TPS 能力提出了严格限制。
那么,我们如何创建一个可以测试和部署更好方案的环境呢?答案是一个可以归功于Justin Drake 的想法:第二层执行引擎。用户可以发送资产成“桥合同”(使用一些间接技术如交互验证或ZK-SNARKs),从而计算一些替代规则来处理区块链(可以想成这相当于第二层“元协议”,如Mastercoin / OMNI和在比特币之上的对手,特别因为是桥合约,这些协议将能够处理定义为 “基本分类账” 的资产),只有备选规则集生成提款请求时才会处理提款。
请留意任何人都可以随时创建第2层执行引擎,不同的用户可以使用不同的执行引擎,并且可以非常快速地从一个执行引擎切换到另一个执行引擎或基本协议。第一层不再需要成为最佳的智能合约处理引擎,它只需要一个具有准图灵完备执行规则的数据可用层。这样,任何第2层桥接合约都可以构建在最顶层,并允许基本操作在分片之间传送状态(实际上,只有ETH传输是可互换的跨分片就足够了,不需要很多的努力就可以跨分片调用,所以我们也可以支持它们,但不复杂)。还要注意,第2层执行引擎可以具有与第1层不同的状态管理规则,例如:没有存储租金, 或其他的状态,就像该特定执行引擎的用户有责任确保它是可持续的,如果他们没有确保,结果仍然包含在该特定执行引擎的用户中。
从长远来看,第1层不会积极参与所有这些改进方案 ; 它只是为第二层创新提供了一个稳定的平台。这是否意味着,分片是一个坏主意,我们应该保持区块链大小?以便即使是10年前的电脑也可以处理每个人的交易?绝对不。即使执行引擎部分或完全转移到第2层,对数据调用和可用性的共识仍然是一个重要和必要的功能 ; 要了解第2层执行引擎在没有第1层可扩展性支持的情况下有多困难,请看看Plasma的困难,以及其自然扩展到全部区块链的难度。如果人们希望将每秒100兆字节的数据投入,那么我们需要提供每秒百兆字节的数据可用性。
此外,第1层仍然可以改善延迟 ; 如果第1层是缓慢的,那么实现低延迟的一个策略是状态通道,其通常具有高成本并且可能难以扩展。由于状态通道仅需要单个网络消息,状态通道总是比第1层区块链有更多的延迟,但在目前状态通道不能正常工作的情况下,第1层区块链在现今仍然表现的比他们更好。
而另一个极端的例子,即区块链基础层可以原子化,并且不打算使用准图灵完成执行引擎,或没有超出单个节点容量的可扩展性,也显然是错误的 ; 基础层必定具有足够强大的结构,以便应用程序能够在它们之上构建,但我们尚未达到该级别。还需要额外的结构,但应该非常谨慎地选用,以确保它的通用性是最高的,而不是针对特定的应用程序或技术来开发。(现今的这些底层技术将在两年内会淘汰,因为会有更好的替代方案出现。)
尽管今天的开发人员可以基于第一层做最大限度地改进,并前兼容过往的版本。但是在未来,基础层仍然需要继续进行一些升级,特别是如果新技术(例如STARK达到更高的成熟度)允许它们实现比以前更强的性能。因此,继续提高第1层和第2层之间的平衡以继续提高可扩展性,隐私性和多功能性将继续实现,尽管第2层将在创新中占据越来越大的份额。
2018.08.29更新:Justin Drake向我指出了另一个很好的理由,为什么某些功能可能最好在第1层实施:这些功能是公共产品,因此无法通过特定功能的使用费来有效的获得资金,因此最好通过补贴的方式来发放或燃烧交易费用更好。一个可能的例子是安全随机数生成。