Flow Season#Day1| 解构Flow:可百万级扩容的多节点架构

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