关于我
嗨!我是Jan(发音为Yan)。我是一名工程经理,在核心的Flow协议团队工作。你可能知道Flow,因为它是由开创NFTs的团队创建的--他们因用Crypto Kitties打破Ethereum而闻名。Flow是区块链,使得任何人都可以轻松构建和使用去中心化的应用程序。
这个博客是为所有对了解区块链技术感兴趣的人准备的。欢迎来到Web3。
我已经在科技行业工作了15年以上,在思科和亚马逊/AWS等公司工作过。当我在2021年秋天加入Dapper实验室时,我对Web3的发展非常着迷,但对这项技术了解甚少。在这一系列的文章中,我希望以一种假设没有什么先验知识的方式解释我所学到的东西。为了做到这一点,我将在某些情况下简化事情,否则这将变成一份白皮书。我将尽可能地把这些简化的东西叫出来。
流程介绍
当Dapper Labs建立Crypto Kitties时,我们学到了很多。最重要的是,我们意识到,当时的技术还没有为这种应用做好准备。作为一个有远见的人,我们着手为我们计划做的事情建立一个更好的技术。我们开始建立现在的 "流量区块链"。
区块链架构中最重要的障碍之一是如何在最少的时间内处理最多的交易,这一指标被称为吞吐量。大多数区块链试图通过提高其用于运行网络的单一节点类型的效率来改善这一点。Flow引入了一个更新颖和根本的改进,通过将传统上分配给加密货币矿工的工作分割成不同的角色,交易的选择和排序(共识)是独立于交易的执行来提高吞吐量。
节点类型和数据流
有多个实体被称为节点,它们对流量协议的运行有贡献,是协议网络的一部分。这是对5种节点类型的简要介绍。
👀 访问节点(AN)
访问节点为外部客户提供对最近区块的访问,并将客户的交易提交给收集节点集群。他们决定将交易发送到哪个收集集群(收集集群被映射到交易哈希值的范围)。
🍇收集节点(LN)
收集节点被组织成收集集群。集群中的收集节点一起工作,将交易捆绑成一个集合。一个收集节点集群决定(通过一个小型共识算法)哪个收集将以收集保证的形式发送到网络(后面会有更多关于收集保证的介绍)。采集保证可以用来获取采集的全部内容和它的交易。
🤝 共识节点(SN)
共识节点根据收集节点发送的收集信息形成并提出块。
⛓️执行节点(EN)
执行节点执行交易,并因此更新通过交易操作的数据(例如,交易转移代币时的账户余额)。执行节点向网络发送 "执行收据"。一个执行收据包含一个执行结果,它是执行完成的时间点上的数据的哈希值。
🔍 验证节点(VN)
验证节点评估执行节点所做工作的正确性。验证节点向网络提交一个结果批准。结果批准与共识节点的执行结果相匹配,以检查执行的有效性。
这就是网络中的数据流在一个非常高的水平上看起来是怎样的。
共识委员会使用HotStuff共识协议来实现对拟议区块的共识。详细的协议描述可以在 HotStuff协议白皮书.
你可能会问,为什么有这么多不同的节点类型?让我解释一下。我们的目标是建立一个能提供高性能且易于开发的区块链,这与第2层/分片解决方案不同,后者是以增加应用开发者的复杂性为代价来实现性能的。我们通过将区块链节点的传统角色拆分为多个角色来实现这一目标,这使我们在扩展网络方面有更大的灵活性(关注点分离)。我们将交易的选择和排序、交易的执行、区块的形成(共识)和交易执行的验证分割成不同的角色。这使我们能够建立一个具有无损安全和去中心化保证的网络,同时将计算上昂贵的操作集中到一小群高性能节点上。
让我们仔细看看这些数据以及不同组件在实现网络的高效率方面所发挥的作用。
整个系统的交易吞吐量取决于共识算法的效率,该算法由四个主要节点类型之一的共识节点运行。我们通常把共识节点称为共识委员会。在收集节点将来自用户的传入交易形成集合后,它们会将其发送给共识委员会。委员会中的节点必须迅速就区块中的集合顺序达成共识。可以想象,这个速度对区块大小非常敏感,因为区块需要分配给共识委员会的所有节点。Flow协议通过在区块中不包括交易的内容来实现高效率。相反,区块只包含收集节点对收集将被网络访问的承诺,称为收集保证,这基本上是一个收集标识符。采集保证是由共识领袖添加到区块中的。因为它们大多只是简单的标识符,而不是大型交易,所以节点可以更快地处理它们的顺序。
一旦区块被共识领袖提出,它就可以被执行节点处理。执行节点监控p2p网络上的活动,并寻找由共识委员会提供的新提议的要执行的区块。一个执行节点将使用区块中的收集保证,向收集节点请求收集内容,以执行收集中的交易。区块执行需要按顺序进行,以确保结果的正确性(改变交易的顺序会产生不同的结果,交易的平行执行会带来另一组挑战,这不在本帖的讨论范围之内)。由于这个原因,执行的速度对交易的吞吐量至关重要。执行节点被要求是数据中心大小的机器,有大量的计算能力和内存。
当区块被执行时,每个执行节点都会发布一个执行结果,这需要由验证节点进行验证,以确保执行的正确性。验证是指执行交易并将结果与执行节点发布的执行结果进行比较。相对于块执行,块验证可以并行化,因为每个交易的执行结果都可以独立验证。这意味着验证很容易横向扩展(多个验证节点并行验证不同的交易)。验证过程的并行化是通过将一个块分割成块来完成的。一个验证节点从一个块中包含的执行结果中确定块的分配,并从执行节点请求块的数据包。验证节点将他们的结果批准发送到网络,共识节点使用结果批准来验证块的执行,并最终密封块(我们将在未来的文章中更详细地介绍这个过程)。
💡 在2022年3月的Flow协议实现中,chunks与Collection相同(1对1映射)。Collection是要执行的,Chunk是已经执行过的集合。
希望现在高层的数据流已经很清楚了。在接下来的文章中,我们将更详细地研究区块和交易生命周期的不同阶段,以及数据存储。在这之前,我们先看一下协议的时间,因为这是我在探索协议时的一个启示,我认为这对理解其他概念至关重要。
有用的链接
流动技术论文:https://www.onflow.org/technical-paper