背景。 Flow是一个新的区块链,最初由Dapper Labs设计和开发,Dapper Labs是CryptoKitties和NBA Top Shot的制造商。在这个多部分的系列中,我们将从技术角度探讨Flow区块链的不同组成部分。
- 鏗鏘集,新的编程语言,使智能合约的开发 更快、更安全
- 流动客户端库(FCL),它类似于以太坊上的Web3.js,但考虑到消费者的需求而建立的
- 流动多节点架构具备面向未来的扩展能力,可供主流采用
区块链的大规模应用正在进行中,像NBA Top Shot这样的应用程序的成功只是这种有前途的发展的一个证明。大量的消费者正在意识到这项技术的潜力,围绕品牌、开发者、创作者、明星和粉丝的整个社区每天都在加入去中心化的应用程序。
然而,对于为这些应用提供动力的区块链协议来说,这种不断增长的交易负载带来了巨大的挑战:可扩展性是整个区块链行业的决定性时刻--只有当网络能够默认扩展到数百万,才会有数百万人前来。如何回答可扩展性问题,不可避免地塑造了区块链将为广大消费者发挥的作用。
目前,绝大多数项目在追求消费级可扩展性的过程中都依赖于两种解决方案。分片(第1层)和卷积(第2层)。这些答案可能会解决眼前的技术需求,但正如我们后面要探讨的那样,它们引入了更大的风险,将去中心化的好处降到最低,并在长期内为开发者和最终用户增加了复杂性。
通过引入流水线的范式,Flow提出了 一个比现有的扩展方案更可扩展、更分散、更安全的解决方案,而不增加开发者的复杂性,也不需要依赖链外的变通。专门的节点类型。不是每个节点都要做所有的工作,Flow的节点是沿着交易管道进行专业化的。
收集节点将工作分批进行,共识节点保证工作,执行节点进行工作,验证节点检查工作。
这使得多节点架构能够
- 通过提供一个高性能的基础层,默认情况下可扩展到数百万 。
- 通过降低对某些节点类型的要求,使 网络参与更加容易 ,它们甚至可以在消费级笔记本电脑上运行。
- 通过降低运行一个节点的门槛,增加了分散化的程度,这增加了更多节点参与的可能性
- 将复杂性抽象为协议,以保持开发的便利性,让开发者更快地发布应用程序,而不需要担心基础设施的要求。
- 通过避免第二层解决方案,确保良好的最终用户体验 ,使用户无需考虑技术问题,并保持简单的上机操作。
- 在规模上保持安全性,因为没有交易需要依赖可能被破坏的链外计算,实体之间的所有互动可以在一个原子的、一致的、隔离的和持久的(ACID)交易中发生。
本文将在分析现有扩展解决方案的问题之前,对基础知识进行简短的复习,同时对比Flow的新模式--流水线式的专用节点类型如何规避这些限制。
重新审视基础知识。可扩展性的三难困境
只有当数据的完整性和安全性得到保证时,现实世界的价值才能被可靠地带入数字领域。中心化的各方自愿或不自愿地破坏了这种保证,要么自己追求恶意行为,要么在外部攻击的情况下构成单点故障。想一想吧。如果只有一家公司管理用户的账户余额,那么没有什么能阻止这家公司的员工篡改账户或意外删除账户。没有任何安全机制可以超越作为中心方的组织。
只有在有制衡系统的情况下才能保证数据的完整性,而这正是区块链技术所提供的。区块链网络的主要优势在于它提供了高度的去中心化,描述了一个由各种独立节点组成的网络,共同管理一个共享状态。账户余额、智能合约代码、数据结构,以及更多。
交易是突变该状态的算法,或者简单地说,交易类似于用户发起的处理价值、身份或其他关键过程的行动。分散的节点就哪些交易是有效的,哪些是无效的达成共识--他们找到共识并惩罚恶意的节点。
每一个支持图灵完备性的区块链,即运行任何一种计算的能力,都有一个主要的弱点:有人可能会用永无止境的计算来干扰网络。另外,由于大多数网络都是公开的,区块链代表了一种公共物品,正如公地悲剧所描述的那样,这往往会导致少数无情的行为者利用这种物品,可能最终导致有害的过度消费或资源本身的耗尽--只要在这种情况下想想我们的环境。
为了防止这些拒绝服务攻击并限制过度使用,像以太坊这样的网络已经引入了一种交易费用:气体。气体使DoS攻击在经济上非常不可行,因为一个交易需要提供一定数量的气体,这个数量随着交易的复杂性增加。
当一个用户向网络发送了一个带有适当数量气体的交易时,这些交易被组成一个区块--作为一个单位被验证的交易块。每个区块都有一定的气体限制,所以一个区块内的操作数量是有上限的。
但为什么要限制吞吐量?当气体限制完全没有上限时,潜在的巨大数据量可能在短时间内被添加或变异。每当一个新的节点加入网络,它必须收集所有这些数据 ,如果没有块状气体限制,这个数据量可能会非常大,增加了建立一个节点所需的时间和硬件要求。现在,在严格的区块气体限制下,建立一个完整的以太坊节点大约需要17个小时。
增加的硬件要求使得个人建立自己的节点是不可行的--但区块链网络的安全性和抵御虚假攻击的能力与个人节点的数量直接相关,更少的节点意味着更高的集中化程度,引入了更高的安全风险。
"对于区块链的去中心化来说,普通用户能够运行一个节点是至关重要的,而且要有一种文化,让运行节点成为一种常见的活动。"
- Vitalik Buterin在 区块链可扩展性的局限性
这些观察结果恰恰呈现了我们所说的可扩展性三难困境 的边缘, 这意味着区块链网络 ,只能在以下三个维度中的两个方面具有足够的性能:可扩展性、安全性、去中心化。
对区块链可扩展性的追求总是涉及试图克服这些限制并突破这个三角的挑战。在以太坊的案例中, Vitalik Buterin描述了一个将这些限制抛在身后的解决方案。分片。
分散管理。好的、坏的和丑的
分片的想法并不是区块链特有的--数据库系统通常使用这种类型的横向扩展。这种策略背后的主要思想是将区块链的状态分割成多个小块,并在各节点之间分配。因此,状态被分散在多个单独的分片链上,而一个中央信标链负责协调和协调这些分片链的工作。
在分片的情况下,每个节点必须照顾到两件事:跟踪一个特定的分片链,同时也要关注主信标链。这一要求对分片能在多大程度上提高可扩展性引入了一个硬性限制。如果分片太大,节点就不能再处理单个分片,而如果分片太多,节点就不能再处理信标链。
正是由于这个原因,Vitalik Buterin表示,只有将分片与其他扩展策略相结合--特别是像滚动这样的第二层解决方案--才能保证在长期内达到足够的吞吐量。鉴于分片的实施需要巨大的复杂性(看看以太坊通往ETH 2.0的繁琐道路就知道了),这是对分片效率的一个相当清醒的思考,尤其是考虑到它为网络引入了新的风险。
这些风险之一是对参与者最低数量的要求。一个非分片区块链只要只有一个活跃的节点就可以一直运行,但在分片区块链网络中,没有一个节点可以单独管理区块链的所有状态。Vitalik Buterin在 这篇博文中对这个问题做了更详细的概述,但基本上风险在于网络参与者的突然减少(由于中断或协调的恶意行为)低于这个阈值--在这种情况下,整个网络的完整性就处于危险之中。
但分片的主要问题在于这些限制和风险之外。Flow决定反对将分片作为可扩展性问题的解决方案,原因是分片引入了额外的开销、复杂性并阻碍了符合ACID标准的交易和可组合性。
要理解这一点,重要的是要记住,创新的伟大催化剂之一是可组合性。一个应用程序可以建立在一个已经存在的应用程序之上,或使用其部分功能的想法。一个常见的用例是从其他合约中导入标准化的接口(如ERC-20),使开发者免于一次又一次地重新发明轮子;或在多个智能合约中进行可替代的代币交易。
在非碎片化区块链中,不同智能合约之间的这些互动是直接的,因为它们都生活在一个单一的状态空间中。一个交易可以很容易地实现原子性、一致性、隔离性和持久性(ACID)。
然而,在分片区块链上,被调用的外部智能合约可能生活在另一个状态空间,在另一个分片上,需要复杂的锁定或托管方案,因为任何特定分片上的信息可能在交易结束前发生变化。过去是一个简单的交易,现在可以膨胀为10个或20个跨分片的互动,其中每个交易都在运行脆弱的异步代码。同时,跨分片通信引入了额外的延迟,这可能会使可扩展性效应所增加的吞吐量在第一时间消失。
这表明,分片增加了应用程序开发人员的复杂性,影响了用户体验,并使符合ACID的交易难以实现。在一个讲究价值的地方,对交易结果的信心是关键,这构成了一个巨大的反模式,就像 对有价值的数字资产使用任意可变的数据结构一样。由于引入的这些限制、风险和反模式,分片不是将区块链网络扩展到全球大规模采用的理想解决方案。
卷轴的问题
Rollups是更普遍的可扩展性策略的一部分,被归入更广泛的第2层解决方案。所有第2层解决方案背后的理念是,通过在链外(即主链外)运行计算来增加区块链网络的吞吐量,积极降低实际协议(第1层)的负载,只在定期提交关键状态更新。
除了rollups,还有状态通道、等离子体、侧链和一些结合了这些类型的各种想法的混合解决方案等第2层概念。本文主要关注的是卷积,因为它们是第2层解决方案整体空间中最近和最有前途的发展。
像所有第二层的解决方案一样,卷积有一个很大的挑战需要解决。如何保证链外交易的安全,以及在提交回基础链时如何验证其完整性?
乐观的rollups试图通过严重依赖博弈论来实现这一目标。当链外交易被提交回主链时,任何人都可以在最终提交之前质疑这些交易的结果;Zk-rollups依靠被称为零知识证明的复杂数学证明,这隐含地保证了计算的完整性。两者的内部运作都是高度非琐碎的,而且相当难以掌握--维塔利克-布特林(Vitalik Buterin)的 《不完整的卷积指南》(An Incomplete Guide to Rollups)对于那些渴望获得更深入细节的人来说是一个很好的起点。
卷积是一个新的现象,它们所建立的基础--特别是在Zk-卷积的情况下--是一个仍需探索和定义的完整领域。这一观察揭示了一般的滚动式交易的第一个问题。将交易从主链的安全环境中剥离出来,并依赖仍需大规模测试的机制,这给部署在这些解决方案上的资产带来了巨大的技术风险。
"这是新技术,是疯狂的技术,是公认的可怕的技术。"
-Vitalik Buterin 关于零知识证明
虽然它们确实有助于实现高吞吐量和低交易费用,但滚动式的设计大大增加了工程开销,并为开发人员和最终用户带来了复杂性,从长远来看可能会抵消技术可扩展性因素。
现在有各种各样的第2层解决方案,开发人员必须为他们希望自己的应用程序支持的每一个第2层解决方案主动改变其代码库。这些改变不仅仅是通过增加几行代码来完成的--大多数的zk-rollups需要开发者学习一种特殊的编程语言(例如StarkWare的Cairo或zkSync的Zinc),并以这种语言部署应用程序的智能合约的单独版本。学习这些语言或寻找这些利基课题的人才是一个漫长的过程,每支持一个新的解决方案都必须重复这个过程。
这种在开发中增加的复杂性不仅增加了上市时间和发生致命错误的可能性,而且还不可避免地波及到最终用户,因为他们需要积极了解技术上的问题。只有当他们研究了他们喜欢的应用程序部署在哪一个第二层解决方案上,他们才能开始使用它。
此外,第2层解决方案在入职过程中增加了一个额外的步骤,增加了摩擦,并排除了不太懂技术的用户。例如,为了使用zkSync上的解决方案,用户不仅要首先在以太坊上建立账户并为其提供资金,然后还要向zkSync的钱包投入一笔资金;当想要提取资金时,这个过程又会反向重复。
说到第2层关卡:在乐观滚动的情况下,用户需要等待一定的时间(在大多数情况下,大约一个星期)才能访问他们提取的资金 - 这个限制是由乐观滚动的挑战机制强加的。在一个快节奏的环境中,用户希望行动能够立即解决,这是大规模采用这些解决方案的一个巨大障碍。
总之,第2层导致了一个分散的生态系统,其复杂性被推到一个几乎无法管理的程度,大大增加了工程师和最终用户为了构建或使用区块链支持的应用程序而必须投入的时间和资源,这是一个促进区块链大规模采用所需的完全相反的途径。为了提供强大的可扩展性,并结合良好的用户体验、开发便利性和安全性,根本的范式转变是不可避免的。
进入。Flow的多节点架构。
流动的新范式。用专门的节点类型进行流水作业
Flow的多节点架构提供了比现有解决方案更高的吞吐量和去中心化水平,同时保留了开发的便利性、用户体验和数字资产的安全性--不依赖分片或第二层解决方案。这些功能需要从根本上改变协议的架构范式。Flow利用垂直分工取代了横向扩展,这一过程也被称为流水线。
流水线建立在亨利-福特在十九世纪初年在他位于海兰帕克的汽车厂的同样想法上,发明了一个概念,为全球消费者规模的生产奠定了基础。福特主义。它的成功秘诀是沿着标准化的管道进行分工--当一个工人不必组装汽车的所有部件,而只需专注于一项具体的任务时,他们就可以深入专研,这个工人必须带来的要求就会大大下降。
在这个比喻中,像以太坊这样的网络运作就像一个工人要建造整辆汽车一样。每个节点都要做共识和计算的综合劳动。在这方面,分片只是一种分工的幻觉。虽然每个节点只需要计算共享状态的一部分,但他们仍然要负责运行这个区块的每一次计算,并参与共识。
相比之下,Flow的多节点架构可以被认为是一个管道,允许每个单独的节点类型高度专业化,每个节点都专注于一个特定的任务--联合起来,这个管道可以克服可扩展性的三难问题。
每个通过接入节点发送到网络的交易,首先被收集器节点放入批次,即所谓的集合。这些收集器节点负责数据的可用性;每个格式良好的交易都存储在这些收集器节点中的一个,直到它被纳入一个块。
集合体由共识节点组成区块。这些节点承担着排序的主观任务, 交易。虽然可以说是在协议安全方面最重要的节点类型,但这种节点类型在资源使用方面特别轻。因为他们只要求收集器节点提供交易ID--而不是交易的整个代码--数据吞吐量要求可以保持在最低水平。
执行节点在从共识节点中找出下一个要运行的区块后,向收集器节点请求完整的交易代码。这些节点是所有节点类型中规模最大的,专门用于尽可能快地运行区块的计算。较少的节点数量减少了工作的冗余度,加快了这些计算的时间。因为它们被验证节点密切关注,这种较小的数量对整个协议的分散化没有影响。另外,更少的高性能节点意味着更少的能量消耗,因此对环境的伤害也更小。
验证节点是密切观察执行节点的每一步的警惕之眼。在排序交易(共识节点)的主观任务之后,交易本身是确定的,其结果可以客观地知道。现在,许多验证节点中的每一个都会评估整个区块计算的一个子部分。如果一个步骤导致了错误的结果,验证节点就会触发警报,可能会初始化一个削价挑战(有害节点被扣除一定数量的股权的过程)。就像共识节点一样,验证的硬件要求是适中的,促使用户运行自己的节点。
在执行节点的计算结果被验证节点彻底检查后,区块被一个共识节点封存。在这个时候,人们可以对包含在区块中的交易的结果充满信心。
就像民主共和国的权力分离一样,执行节点、共识节点和验证节点创造了一个制衡系统,少数高规模的执行节点受到大量验证节点的密切观察,而共识节点则对最终交易进行密封。
实质上,Flow的专业化节点类型由于硬件要求较低,大大增加了网络参与者运行节点的积极性,从而提高了整个网络的去中心化和安全性。这使得参与区块链网络更容易,资源密集度更低,同时仍有少数性能良好的机器尽可能快地执行计算--同时保持复杂度被抽象到协议中。这意味着良好的终端用户体验被保留下来,而开发者可以专注于快速运送他们的应用程序。
Flow的多节点架构是面向未来的、消费者规模的区块链协议的蓝图。