在基于Move语言的基础区块链有着不一样的系统逻辑和潜力——突出表现为并行性和更灵活的共识协议。Aptos的并行处理能够提升扩展性,并行处理的流程充分体现了Move基础链的灵活性,进一步地,存储和执行GAS费分开计算的方式会进一步解放网络资源的潜力。SUI对单写者事务进行简单快速处理和异步共识协议在系统效率提升方面也很有特色。本文从并行处理和共识协议创新两个角度来分析典型的Move生态的特点,如Aptos和SUI这样的基础区块链。 Aptos利用Block-STM(Software Transactional Memory)引擎实现并行处理,带来性能的明显提升。Block-STM其工作理念类似以太坊二层网络的Optimistic Rollup(乐观汇总),交易在区块内是预先排序的,先假设交易之间是没有依赖关系,乐观地执行并行交易。执行后验证所有交易结果,如果发现一个交易访问了由先前交易修改的内存位置,则该交易无效——因为很明显两个交易是相关的。刷新交易的结果,然后重新执行交易。重复该过程,直到区块中的所有交易都被执行。Block-STM的特点是支持比较复杂的事物,适合多种应用负载工况。 Aptos区块链执行过程中是分阶段、独立、批量化运行的,这给GAS费的市场定价带来更多优化、细化的潜在空间,于是产生了存储和执行成本分开的GAS费模型。Aptos网络GAS费计算的主要原则是:操作的成本应该与对CPU、内存、网络、存储等资源消耗直接相关。这个模型将区块链合约执行的流程充分细化,从执行任务的金融价值、数据量、算力资源消耗等角度充分考虑到合约执行的市场价值。 Aptos的共识协议本质上是最终同步的平行执行引擎,将相互依赖的执行层和共识层解耦,从而实现扩展。在交易传播过程中,交易被每个验证者分组为批次,而在共识过程中,批次再次被合并为区块——这其中与协议无关的交易流程可以不必通过一般区块链的节点验证过程极大提升了效率。将这些非协议相关的任务从共识阶段解耦出来,进行排序将消耗极小的算力资源(仅限区块元数据和证明,如前区块哈希值、梅克尔树数据、时间戳等),从而实现交易高吞吐量和最小化延迟。通过消除共识和执行之间的相互依赖性,可以实现更高的吞吐量和延迟。 SUI的单写者事务和异步共识协议带来效率的提升。链上存在着很多简单交易需求,如用户只是想将资产发送给收件人,这种简单交易通常只与发件人相关。SUI的单写者(Single-Writer)应用正是将那些单独、简单的交易放在客户端本地运行,降低了验证节点的共识压力,提升了系统的扩展性。 简单的“单写者”发送的交易确定是独立的,与其他用户无关,因此完全可以将计算委托为发送者,而不必浪费验证者算力,这样计算即可在验证者本地进行。SUI通过使用“因果顺序(causal ordering)”对交易的共识做了筛选,与大部分区块链共识协议不同,SUI并不会对所有交易进行排序,或者说,有些交易并不需要SUI的全网共识——如上面提到的单写者发起的简单事务,SUI只需要对交易进行因果排序。因此SUI可以利用单写者本地的算力,且可以同时执行多种任务。 风险提示:区块链商业模式落地不及预期;监管政策的不确定性。 1.核心观点 针对已有的编程语言如Solidity,Move语言在很多细节设计考虑的比较周到,如最为突出的特点是资源类型方面,即面向资源的编程;此外并行处理也会带来扩展性提升。因此,基于Move语言的基础区块链有着不一样的系统逻辑和潜力——突出表现为并行性和更灵活的共识协议。本文从并行处理和共识协议创新两个角度来分析典型的Move基础区块链的特点,如Aptos和SUI。 Aptos的并行处理能够提升扩展性,并行处理的流程充分体现了Move生态的灵活性,进一步地,存储和执行GAS费分开计算的方式会进一步解放网络资源的潜力。SUI对单写者事务进行简单快速处理和异步共识协议在系统效率提升方面也很有特色。 图表1:move与solidity对比 2.并行处理提升扩展性 Aptos使用新的并行处理系统和Move编程语言,来拓展单片链的局限。该节主要介绍其共识机制、Move语言、数据模型、移动模块、并行化等方面的改进。 2.1.Aptos的并行处理 在交易执行方面,Move的并行处理的特点相较Solidity带来区块链扩展性的极大提升。 并行执行(PE)是通过识别独立交易并同时执行(非关联交易),这极大提升了区块链的扩展性。Solidity并不支持并行处理,如以太坊上的交易按顺序执行,其他交易置于暂停(排序)状态——因此产生了mempool(内存池)和MEV市场。对于两个不关联的交易,如果能够并行处理,则高效且可扩展。 Aptos利用Block-STM(Software Transactional Memory)引擎实现并行处理,带来性能的明显提升。Block-STM其工作理念类似以太坊二层网络的Optimistic Rollup(乐观汇总),交易在区块内是预先排序的,先假设交易之间是没有依赖关系,乐观地执行并行交易。执行后验证所有交易结果,如果发现一个交易访问了由先前交易修改的内存位置,则该交易无效——因为很明显两个交易是相关的。刷新交易的结果,然后重新执行交易。重复该过程,直到区块中的所有交易都被执行。Block-STM的特点是支持比较复杂的事物,适合多种应用负载工况。 如下图,将Block-STM与区块按交易顺序执行进行了比较。每个区块包含一万笔交易,账户数量决定了区块处理的交易的竞争复杂程度。在低竞争和高竞争情况下,Block-STM比顺序执行的方案实现了8-16倍的加速。当交易任务是顺序的情况下,Block-STM的消耗也更小。由此可见,Move带来的并发性能是非常突出的。 图表2:Aptos并行处理与顺序执行性能对比 由此可见,在L2(二层网络)之前,主链的并行处理能力亦是区块链扩容积极考虑的方案。这为Move系基础链的生态带来更多的可能性。 2.2.Aptos:存储和执行成本分开的Gas模型 以太坊作为去中心化网络,应用在驱动网络的算力资源运行智能合约程序时需要消耗GAS费作为燃料——GAS费的大小与驱动智能合约程序的复杂程度、GAS单价有关。但无论如何,以太坊网络GAS费的计算模型比较简单(主要以驱动智能合约的量作为衡量),甚至并不能反应用户对合约程序需求的市场价值——也就是说,GAS费的大小并不能很好衡量合约应用市场价值的高低(比如发送一笔0 ETH转账的价值可能是较低的,但依旧需要驱动智能合约,GAS费未必很低)。显然,Aptos区块链对算力、存储和网络之间成本进行权衡,充分考虑到用户或开发者的需求。如前一节所述,Aptos区块链执行过程中是分阶段、独立、批量化运行的,这给GAS费的市场定价带来更多优化、细化的潜在空间,于是产生了存储和执行成本分开的GAS费模型。 Aptos网络GAS费计算的主要原则是:操作的成本应该与对CPU、内存、网络、存储等资源消耗直接相关。在执行过程中,费用模型如下: 1)固定成本,固定基数加上大额交易的额外费用; 2)执行成本,用于执行Move指令的费用; 3)读取成本,用于从持久存储读取数据; 4)写入成本,用于将数据写入持久存储。 这个模型将区块链合约执行的流程充分细化,从执行任务的金融价值、数据量、算力资源消耗等角度充分考虑到合约执行的市场价值。除此之外,考虑到进一步降低系统I/O的成本负担,Aptos团队还将会提供支持存储费用返还的框架,进一步降低存储的负担。 这种将执行费用和存储费用分离的做法很有想象空间,这更符合当前区块链网络的资源消耗需求。举一个最简单的例子,在以太坊网络,用户想要发步一篇文章写入去中心化的区块中,必然需要发送一笔交易——当然,这笔交易转账金额可以是0ETH,但仍旧需要承担GAS费;而GAS费则与当前网络的负担有关。无论如何,转账金额和GAS费都不能体现文章的价值、存储空间的消耗和用户的需求价值。无意义的文章和有一定价值意义的文章,在不同网络负担状态下,GAS费可能是不同的。而Aptos将执行费用和存储费用分开则很方便用户对自身事务执行的价值作出很好地衡量。以太坊生态在后续模块化的探索中,也注意到了存储与交易执行分开这一点。 3.共识协议与交易处理 我们所熟悉的区块链如以太坊,通常作为一个去中心化的状态共享机器,随着时间的推移,系统用户状态以区块的方式累加——即绝对的串行交易排序。我们在本系列的前两篇报告层对Move语言并行处理进行过分析,以Aptos、SUI为代表的Move系基础链都有各自的并行处理模式,这依赖新的共识协议——由于Move语言的特点,Aptos的共识协议与交易执行解耦的模式,以及SUI的单一编写者和异步共识协议都为区块链交易的共识提供了更多的灵活性——前者将交易执行流程细分进行独立、批量处理,而后者则充分考虑到验证节点的算力负担,试图将一些简单交易从验证节点解放出来。 图表3:Aptos与SUI在两个维度上创新共识协议 3.1.Aptos:共识协议与交易执行解耦 交易流程批量化执行进一步挖掘扩展性潜力。在Move语言并发执行的基础上,在交易执行流程方面,Aptos尝试进一步挖掘并发执行的吞吐量和扩展性,其区块链上的交易处理被分阶段并行处理——也就是说,交易执行流程被分为几个阶段,每个阶段都是完全独立且单独可并行化、批量化——如果说Move的并行处理相当于把Solidity的一条包装流水线变成了并行的N条流水线,Aptos在此基础上将N条流水线进一步细化分工,包装工序每个阶段都互相独立、在阶段层面进一步批量化处理。带来性能优化的同时,可以在客户端本地快速执行交易,降低验证节点的压力,这种特点带来了更多的互动和灵活性。如在一批交易中,一些特定的、持久有效的交易可以立即提交,且可以在客户端本地执行,而不必等远端的验证节点执行。就好比包装工序中一些确定的、持久有效的流程(比如印logo),可以在流水线排队的时候外部独立进行。 需要说明的是,这里提到的处理方式,与Aptos将共识协议与交易执行分开的特点有关,这将在后面详述。Aptos这种批量化、模块化的并行执行为系统的升级和新版本发布带来更多的灵活性、缩短系统演进周期。因为更新可以仅仅针对单个模块进行,此外这种模块化特点将验证者节点扩展更多的客户端节点算力,这些非验证节点资源可以提供额外的计算、网络和存储资源。 图表4:Aptos区块链在交易周期内每个阶段都是独立、可并行的 不 同于SUI的异步共识协议,Aptos的共识协议本质上是最终同步的平行执行引擎,将相互依赖的执行层和共识层解耦,从而实现扩展。上面提到,交易传播、交易执行、存储和账本认证等环节都是批量、独立运行的,基础便是执行层和共识层解耦。在交易传播过程中,交易被每个验证者分组为批次,而在共识过程中,批次再次被合并为区块——这其中与协议无关的交易流程可以不必通过一般区块链的节点验证过程(根据不可能三角,共识过程会降低效率),极大提升了效率。将这些非协议相关的任务从共识阶段解耦出来,进行排序将消耗极小的算力资源(仅限区块元数据和证明,如前区块哈希值、梅克尔树数据、时间戳等),从而实现交易高吞吐量和最小化延迟。共识协议接受节点提议的交易顺序,在关联性的甄别后,非协议相关的交易验证可以在远离关键路径的不同协议中执行交易,验证节点会对最终交易排序和执行结果达成一致。通过消除共识和执行之间的相互依赖性,可以实现更高的吞吐量和延迟。 上面提到,在批量化执行方面,执行、存储和账本认证阶段也分批工作,以便在重新排序、减少操作(例如,重复计算或签名验证)和并行执行之间权衡机会。目前Aptos区块链利用了Diem项目共识协议BFTv4的最新迭代版本,在执行分发之前等待200毫秒来累积一批交易,并通过领导者信誉机制对有缺陷的验证者进行动态调整。 图表5:Aptos区块链的交易传播和元数据排序互相独立 我们可以这样理解Aptos这种最终同步的平行共识引擎