原文:《Web3底层语言(三):Move生态有哪些亮点?

作者:宋嘉吉 任鹤义

摘要

在基于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可以利用单写者本地的算力,且可以同时执行多种任务。

风险提示:区块链商业模式落地不及预期;监管政策的不确定性。

解读MOVE语言:MOVE生态项目都有哪些亮点?

1.核心观点

针对已有的编程语言如Solidity,Move语言在很多细节设计考虑的比较周到,如最为突出的特点是资源类型方面,即面向资源的编程;此外并行处理也会带来扩展性提升。因此,基于Move语言的基础区块链有着不一样的系统逻辑和潜力——突出表现为并行性和更灵活的共识协议。本文从并行处理和共识协议创新两个角度来分析典型的Move基础区块链的特点,如Aptos和SUI。

Aptos的并行处理能够提升扩展性,并行处理的流程充分体现了Move生态的灵活性,进一步地,存储和执行GAS费分开计算的方式会进一步解放网络资源的潜力。SUI对单写者事务进行简单快速处理和异步共识协议在系统效率提升方面也很有特色。

解读MOVE语言:MOVE生态项目都有哪些亮点?

2并行处理提升扩展性

Aptos使用新的并行处理系统和Move编程语言,来拓展单片链的局限。该节主要介绍其共识机制、Move语言、数据模型、移动模块、并行化等方面的改进。

2.1Aptos的并行处理

在交易执行方面,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带来的并发性能是非常突出的。

解读MOVE语言:MOVE生态项目都有哪些亮点?

由此可见,在L2(二层网络)之前,主链的并行处理能力亦是区块链扩容积极考虑的方案。这为Move系基础链的生态带来更多的可能性。

2.2Aptos:存储和执行成本分开的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的单一编写者和异步共识协议都为区块链交易的共识提供了更多的灵活性——前者将交易执行流程细分进行独立、批量处理,而后者则充分考虑到验证节点的算力负担,试图将一些简单交易从验证节点解放出来。

解读MOVE语言:MOVE生态项目都有哪些亮点?

3.1Aptos:共识协议与交易执行解耦

交易流程批量化执行进一步挖掘扩展性潜力。在Move语言并发执行的基础上,在交易执行流程方面,Aptos尝试进一步挖掘并发执行的吞吐量和扩展性,其区块链上的交易处理被分阶段并行处理——也就是说,交易执行流程被分为几个阶段,每个阶段都是完全独立且单独可并行化、批量化——如果说Move的并行处理相当于把Solidity的一条包装流水线变成了并行的N条流水线,Aptos在此基础上将N条流水线进一步细化分工,包装工序每个阶段都互相独立、在阶段层面进一步批量化处理。带来性能优化的同时,可以在客户端本地快速执行交易,降低验证节点的压力,这种特点带来了更多的互动和灵活性。如在一批交易中,一些特定的、持久有效的交易可以立即提交,且可以在客户端本地执行,而不必等远端的验证节点执行。就好比包装工序中一些确定的、持久有效的流程(比如印logo),可以在流水线排队的时候外部独立进行。

需要说明的是,这里提到的处理方式,与Aptos将共识协议与交易执行分开的特点有关,这将在后面详述。Aptos这种批量化、模块化的并行执行为系统的升级和新版本发布带来更多的灵活性、缩短系统演进周期。因为更新可以仅仅针对单个模块进行,此外这种模块化特点将验证者节点扩展更多的客户端节点算力,这些非验证节点资源可以提供额外的计算、网络和存储资源。

解读MOVE语言:MOVE生态项目都有哪些亮点?

同于SUI的异步共识协议,Aptos的共识协议本质上是最终同步的平行执行引擎,将相互依赖的执行层和共识层解耦,从而实现扩展。上面提到,交易传播、交易执行、存储和账本认证等环节都是批量、独立运行的,基础便是执行层和共识层解耦。在交易传播过程中,交易被每个验证者分组为批次,而在共识过程中,批次再次被合并为区块——这其中与协议无关的交易流程可以不必通过一般区块链的节点验证过程(根据不可能三角,共识过程会降低效率),极大提升了效率。将这些非协议相关的任务从共识阶段解耦出来,进行排序将消耗极小的算力资源(仅限区块元数据和证明,如前区块哈希值、梅克尔树数据、时间戳等),从而实现交易高吞吐量和最小化延迟。共识协议接受节点提议的交易顺序,在关联性的甄别后,非协议相关的交易验证可以在远离关键路径的不同协议中执行交易,验证节点会对最终交易排序和执行结果达成一致。通过消除共识和执行之间的相互依赖性,可以实现更高的吞吐量和延迟。

上面提到,在批量化执行方面,执行、存储和账本认证阶段也分批工作,以便在重新排序、减少操作(例如,重复计算或签名验证)和并行执行之间权衡机会。目前Aptos 区块链利用了Diem项目共识协议BFTv4的最新迭代版本,在执行分发之前等待200毫秒来累积一批交易,并通过领导者信誉机制对有缺陷的验证者进行动态调整。

解读MOVE语言:MOVE生态项目都有哪些亮点?

我们可以这样理解Aptos这种最终同步的平行共识引擎,如果区块就像火车车厢,那么在最开始货物包装、分发过程中,都是独立、批量运行的,首先根据货物的包装特点进行分类,如只需要印Logo的流程(类似于非协议相关的流程)可以在外部进行(如客户端本地,分担验证节点的运算压力),然后,这些货物最终都会被再次装入车厢(区块),形成区块链条。

3.2SUI:单写者和异步共识协议

我们在报告《Web3.0程序该跑在哪里?》中提到:“以以太坊为代表的公链在基础性能方面的限制,光靠共识机制方面的创新是不够的,靠多链之间的跨接亦不足以承载web3.0的数据和计算。于是以太坊2.0的分片、L2、波卡平行链等各类扩展方案成为当下现实的解决方案。这些方案细节尽不相同,但最终都传递了一种市场共识:即,Web3.0数据和计算不会都跑在底层区块链这个独木桥上,大量数据和计算处理会在主链之外实现(可以是L2、平行链,甚至可以是其他非区块链方式)。也就是说,脱(主)链计算(off-chain)已经成为行业的共识,尤其是对于大量的数据处理和计算,会在主链之外完成。”

SUI的单写者(Single-Writer)应用正是将那些单独、简单的交易放在客户端本地运行,降低了验证节点的共识压力,提升了系统的扩展性。

链上存在着很多简单交易需求,如用户只是想将资产发送给收件人,这种简单交易通常只与发件人相关。如我们前两篇报告所述,Move的资产是一种资源类型,SUI区分了两种类型的资产: i)只能由其特定所有者修改的资产,如发送资产给收件人;ii)没有特定所有者而是由多个用户修改的共享对象资源——这类资源的操作流程比较复杂。很显然第一类是非常简单的交易类型,这种区别使得SUI可以通过对第一类简单事务简化共识来实现非常低的延迟的设计。

简单的“单写者”发送的交易确定是独立的,与其他用户无关,因此完全可以将计算委托为发送者,而不必浪费验证者算力,这样计算即可在验证者本地进行。来自单写者的单交易会经过以下步骤:

1)发送者向网络广播简单交易事务的数据;

2)验证者将共识协议投票结果发回给发送者;

3)发送者对验证者收到的所有投票进行统计,一旦符合要求,就会创建一个“验证证书”,并发送回验证者;

4)验证者收到证书后会检查其有效性后立即完成交易。

简单来说,这类单写者的简单交易事务就像公司流程的请假会签——类似休年假这种申请只与个人相关的简单事务,请假人可以将申请文档分别发给流程会签的领导,然后将他们的签字统一汇总到一份最终的请假书上,相当于申请者(单写者)自己承担了验证计算过程,而不需要公司各级领导凑在一起开会决定(相当于共识验证计算),这极大提高了效率。区块链共识协议决定验证者之间无需相互通信,因此上述流程几乎不会增加验证者的计算负担,而证书机制也进一步确保交易安全。特别需要注意的是,简单事务的计算负担几乎由发送者本地承担,分担了SUI区块链主网的计算负担,进一步提升扩展性。

解读MOVE语言:MOVE生态项目都有哪些亮点?

为识别简单事物交易,SUI使用基于拜占庭一致性广播算法(Byzantine Consistent Broadcast)。这种简单算法是的SUI在处理非关联的简单交易时,只对相关数据而不是整个链进行锁定(或“停止区块链世界”,如以太坊出块延迟那样),或者简单理解为对这类非关联简单交易事务脱离交易排序进行特别处理——即识别单一作者应用程序( Sui Single-Writer-Friendly (SWF) Apps),官方文档列有24类简单事务的示例列表(如简单的P2P2交易、公共信息公告),这些单一作者事务可以使用该算法进简单快速处理。

解读MOVE语言:MOVE生态项目都有哪些亮点?

Move强大的资源类型模型,助力SUI灵活地处理多种类型的交易,这些交易可能明确以来其他发送者等多个因素。明确交易者的依赖关系,SUI将多通道方法应用于交易验证,确保这些独立的交易流程可以独立进行。SUI的并行性还体现在单独验证交易,而不是将它们分批写入区块中。这种方法的主要优势是低延迟,一笔交易一旦成功即得到网络的确认,而不像以太坊那样需要等整个区块得到全网确认。SIO交易的过程的核心是辨别交易之间是否关联,具体来说需要验证者投票进行辨别交易所是否独立。

SUI除对简单的单写者交易进行了优化,当然也有全局共识机制(类似以太坊状态机的工作模式),可处理更复杂的交易,并定期检查区块链的全局状态。SUI使用名为Narwhal 和Tusk的异步共识协议。这是一种有向无环图数据结构的共识引擎,两个部分的职责分工如下:

1)Narwhal内存池,充当管家角色,负责检查待处理的共识交易,确认数据的可用性;

2)Tusk是确保共识交易有序进行的协议,使数据的特定排序达成一致。

本质上,Narwhal会聚合一批待处理交易(这里有些类似以太坊的交易内存池Mempool),在等待处理时对它们进行“图形化”。即Narwhal会为交易标记上版本号,以及指向先前交易版本号,形成类似文件树的有向无环图(DAG)。Tusk也是HotStuff共识协议(HotStuff 是一个三阶段投票的BFT类共识协议,该算法总结了PBFT、Tendermint等共识算法的特点,实现了一个既有安全性(safety)、活性(liveness),又有响应性(responsiveness)的共识算法)的修改版本,它针对Narwhal提供的DAG结构进行了优化,专注于减少网络验证者之间的通信障碍。Sui 共识引擎算法达到每秒超过125000笔交易的吞吐量,延迟为两秒。

采用这种异步共识协议的好处是:SUI通过使用“因果顺序(causal ordering)”对交易的共识做了筛选,与大部分区块链共识协议不同,SUI并不会对所有交易进行排序,或者说,有些交易并不需要SUI的全网共识——如上面提到的单写者发起的简单事务,SUI只需要对交易进行因果排序。因此SUI可以利用单写者本地的算力,且可以同时执行多种任务。

值得注意的是,SUI也会利用远端的非验证节点执行部分计算,但SUI最终是异步共识,而在Aptos区块链中,这些非验证节点的计算部分最终也会合并进入区块,所以Aptos是最终同步的平行共识。

风险提示

区块链商业模式落地不及预期:区块链、密码学等相关技术和项目处于发展初期,存在商业模式落地不及预期的风险;Move生态发展不及预期。

监管政策的不确定性:区块链项目实际运行过程中涉及到多项金融、网络及其他监管政策,目前各国监管政策还处于研究和探索阶段,并没有一个成熟的监管模式,所以行业面临监管政策不确定性的风险。

本文节选自国盛证券研究所已于2023年2月16日发布的报告《Web3底层语言(三):Move生态有哪些亮点?》,具体内容请详见相关报告。

前两期内容:
Web3底层语言:Solidity问题重重,MOVE如何“乘虚而入”?

Move语言分析:如何避免闪电贷重入攻击?