# 从Move语言角度重新认识Meta系新公链 **Published by:** [ViaBTC Capital](https://paragraph.com/@viabtc-capital/) **Published on:** 2022-08-18 **URL:** https://paragraph.com/@viabtc-capital/move-meta ## Content 作者:Ivy Zhang 2022年7月,Meta系新公链在资本的烘托下,逐渐步入我们的眼帘。豪华团队配置,出色底层技术,以及突破性交易吞吐量,获得一众顶级资本的青睐。即使是在熊市的背景下,Meta系新公链也被赋予了高额的估值,Aptos先后融资3.5亿美元,Sui获得了2.36亿美元的融资,Linera在今年6月也完成了由a16z领投的600万美元的种子轮融资。 在当前公链的竞争格局下,以Aptos和Sui为首的Meta系公链向以太坊等layer1及layer2公链发起了冲击,他们试图采用自成一派的编程语言Move保障安全性和易用性,同时将交易并行化加快事物处理速度,解决不可能三角问题。本文将从Move语言讲起,重新认识Aptos和Sui,为何值得如此多资本的青睐。Move语言起源Move最初由Facebook(后改名为Meta)开发,是Libra链(后改名为Diem)的智能合约编程语言。Move 被设计为一种与平台无关的语言,以支持跨区块链的通用库、工具和开发人员社区,具有截然不同的数据和执行模型。自Libra搁浅后,Move语言的开发者也在不同的方向进行了一些探索:Sui在Move语言上进行了改良,对Move编写的代码施加了额外限制Aptos采用Move语言探索高性能的并行执行Starkcoin在layer2及layer3上探索分层扩展模式Move的起源很大程度上为了改进现有区块链编程语言中的已知问题。图一:智能合约语言的发展如图一所示,区块链编写语言在不断进化。最开始,BTC采用非常轻量级的编程语言Script,能够很好的解决多重签名的问题,但它是图灵不完备的,因此在面临复杂逻辑时难以实现。因此Solidity的出现带来了智能合约的实现,弥补BTC中Script语言图灵不完备的缺点,因Solidity与javascript语言在使用上十分相近,降低了Dapp开发人员的学习成本,开发者无需了解区块链的运行原理,只需会编写Solidity然后部署到EVM上,等矿工打包上链后就是一个可以运行的智能合约或Dapp。 目前大多数layer1替代方案都是建立在EVM上,采用Solidity语言开发。但这些公链的技术也是存在一些缺陷,比如说以太坊的扩容问题,Solidity内存不安全等。于是又出现了一些替代方案,例如Solana,采用Rust语言从基本上解决Solidity内存不安全的问题。Rust能够先编译,编译过程中就可以检查语言的安全性或程序的安全性。并且考虑到生态开发的问题,Rust语言已经存在很久了,有一定的开发者基础,他们愿意到Solana上去进行开发。然后再通过共识算法(POH)对链进行包装,完成对链验证的过程,最后弥补EVM链的缺陷。 但是Solana也会产生很多新的问题。Solana在去中心化上做了妥协,在节点运行网络时都是以中心化的形式去运行的,整个网络的稳定性与以太坊相比是较差的。Solana这样的妥协是考虑到Solana上的用户对价格更敏感,对稳定性的要求却不是那么高。除此之外,Rust语言的学习成本是很高的,大多数开发者还是会选择使用Solidity开发,Rust语言并没有如预期那般有让开发者加入加密开发的吸引力,反而变成了一种阻碍,很多开发者不愿意花时间去学Rust。 因此,Move应运而生。Move语言把协议、资产、NFT的标准等都以Rust作为底层封装成相关模块,再去进行开发。也就是说,开发者不用再去学习Rust底层逻辑,只需要学习Move模块等就可以去开发。Move相当于兼顾了Rust的稳定性和安全性以及Solidity的易用性,开发者可以以比较快的速度开发并且保证安全性。 但是不得不说的是,没有任何一种技术是完美的,Move也是作为一种新的语言出现,目前只是Mysten labs的成员在维护,仍会在发展过程中仍会遇到一些阻碍,还需在未来的技术开展中进行验证。特点在Aptos的开发文档中找到了他们对于Move的介绍: “Move 强调稀缺性(Scarcity)和访问控制。Move 中的资产可以由resource表示或存储在其中。默认情况下会强制执行稀缺性,因为不能复制结构。只有在字节码层明确定义为副本的结构才能被复制。“ 稀缺性是针对Move中内置的数据类型的,比如地址、签名、资产。特别是资产,不可以随意复制和修改数值;而在普通编程语言里,就是用常见的数值类型来表现这些概念的,是可以随意加减,也就不“稀缺”了。而Solidity也没有Move这么完整的封装,所以对Scarcity的支持不够好。 “访问控制来自帐户的概念以及模块访问权限。Move 中的模块可以是库或可以创建、存储或传输资产的程序。Move 确保只有公共模块功能可以被其他模块访问。除非结构具有公共构造函数,否则它只能在定义它的模块内构造。同样,结构中的字段只能在其模块内或通过公共访问器和设置器访问和更改。” 也就是说Move给模块之间做了隔离,做了更严格的限制。这个隔离体现在代码运行层面而非代码层面,比如模块X不能调用模块Y里面的Asset对象的transfer方法,强制把模块之间隔离开了。 稀缺性和访问控制,都是提高了区块链编程的安全性和方便性:本来需要开发者自己小心翼翼的处理转账之类的操作,但在Move语言这边就变得简单了,比如原来A转账100元给B,就要从A账户里减100,B账户加100,这中间如果出错,就无法平账(实际操作更复杂),但Move中直接创建一个Account类型,调用transfer方法就可以了,各种余额不足之类的逻辑都是现成的。简单来说,Move将很多模块封装起来,并且不准许开发者自己拆开来执行,避免了很多手写代码的bug,在开发过程中既安全又简单。当然在一定程度上也牺牲了灵活性。 在 Move 中,交易的发送者由签名者表示,签名者是特定帐户的经过验证的所有者。签名者在 Move 中拥有最高级别的权限,并且是唯一能够将资源添加到帐户中的实体。此外,模块开发人员可以要求签名者在场以访问资源或修改帐户中存储的资产。Move本身语言很简单,它有通用概念,如结构体、整数和地址,但没有区块链特点的概念,如账户、交易、时间、密码学等。可以看出,在Move语言的架构下,基于Move开发的新公链走了一条和其他公链都不同的路,由此给他们赋予了一些独特的地方。与其他语言的对比图二:Move和其他语言的对比图片来源:https://aptos.dev/guides/move-guides/move-on-aptos 将Move和Solidity,以及Solana的Sealevel在以下五个方面做个对比:在数据存储方面,Move是存储在所有者账户中的,即所有者拥有对数据的完全控制权,账户作为基本存储空间;Sealevel则是存储在与Program关联的所有者账户中,Program是特定的基本存储空间;Solidity则是存储在与智能合约关联的账户中,智能合约是基本存储空间。在并行处理上,Move能够在运行时推断并行化;Sealevel则需要在交易中指定所有访问的账户和程序,即是有条件的并发;而Solidity是不支持并发处理的。在保障事务安全上,Move采用序列号,即Move支持的原生数据类型;Sealevel则是事务唯一性加上有状态的事务;Solidity则是采用单次随机数,模拟实现序列号,传统语言都会生成这个临时随机数来达成共识。在类型安全上,Move采用模块结构和泛化,也即上面我们提到的稀缺性和访问控制;Sealevel则是采用程序结构,和普通编程语言相似;Solidity采用智能合约类型,是以合约为单位控制访问权,实际上会存在一些操作困难,并非所有逻辑都是合约。相比之下,Move以账户和模块单位要直观很多。在函数调用上,Move是非泛型函数采用静态分发,Sealevel也是静态分发,而Solidity是动态分发,因为Solidity是基于Javascript的V8引擎魔改,所以也继承了动态语言的所有特性。而通常我们会认为动态分发会更加灵活,缺点是不够安全。从以上对比分析中,可以看出,Move语言是静态的确保资源被保存,不被复制或意外的破坏,在安全性、速度、易用性上较其他语言都有了大幅的提升。Aptos和Sui在了解Move语言的特性之后,我们再来介绍一下Aptos和Sui这两条新公链。在move语言下,他们各自在解决公链不可能三角问题上提出了一个新方案。Aptos团队Aptos的联合创始人兼首席技术官 Avery Ching曾在Meta担任首席软件工程师超过10年,是原 Meta 旗下加密钱包 Novi 团队的技术负责人。另外,Aptos团队中的 Alden Hu、Dahlia Malkhi 等开发和研究人员大部分都参与了 Diem、Novi 的开发。近期,Solana前市场营销主管Austin近期宣布将于下个月正式加入Aptos,担任生态系统总监一职。投资:性能:可实现每秒处理1万笔以上的交易,理想状态下,未来可处理16万笔交易。特点:1. Block-STM并行执行引擎。Aptos设计了一个高效、多线程、内存中的并行执行引擎。设计目标是在内部管理所有冲突并自动适应工作负载。 2. BFT共识协议。Aptos对diemBFT的共识进行了第4次迭代(hotstuff共识)。在最近的系统在BFT协议中添加了一个主动起搏器,可以使用超时来同步验证器,远快于等待增加的超时,区块只需两次网络往返就可以提交,可使用亚秒级的最终确定性。并且Aptos添加了一个信誉系统,可通过检查链上数据并自动更改领导者轮换以解决无响应的验证者。 3. 状态同步。在高吞吐量、低延迟的系统中,有效的状态同步必不可少。Aptos利用验证节点、全节点和其他复制节点提供的经过验证的分类账历史和认证的状态证明,获得灵活的可配置的同步协议。即网络中的参与者可以根据不同的同步策略再优化他们的用例和需求。进展:3月启动测试网,测试网络有超过2万个验证节点6月底,Aptos推出了2亿美元的生态系统资助计划,资助类别包括6类,分别是开发人员工具、SDK、库、文档、指南及教程。资金主要用于开发、治理、DeFi和NFT的工具和框架;核心协议贡献:代币标准、库、协议升级等;开源和公共产品;教育举措;应用程序。目前已有超过100个项目在网络上构建,当期阶段已有很多项目基于测试网进行开发部署,包括超并行CLOB协议Econia、Move多签钱包Hive、自动做市商(AMM)模式的交易应用Pontem Network等。9月份上线主网Sui团队:Mysten labs 由4位前Meta platforms工程师创立。创始人包括 Evan Cheng、Adeniyi Abiodun、Sam Blackshear、George Danezis、Kostas Kryptos,都在 Meta 参与过 Novi 和 Diem 项目。投资:性能:截至3月19日,在8核M1 Macbook Pro上运行的未优化单工Sui节点可以每秒执行和提交120,000个代币传输事务(TPS)。吞吐量与内核数量成线性关系,同一台机器在单核配置中处理25,000 TPS。特点:1. 交易并行化。Sui将事务分为两种,独立的交易与具有从属关系的交易。 独立的交易是指交易彼此没有因果关系,例如,通常用户只是想把资产转移给接收者,其中唯一需要的数据就是发送者的账户,并且与区块链状态的其他任意部分没有相互依赖关系。独立交易采用拜占庭式一致广播达成共识。 从属交易则是与共享对象相互依赖/交织,采用拜占庭容错(BFT)协议的变体作为共识。Sui要求明确说明交易的从属关系,以实现并行处理。使用Narwhal(一种内存池协议)存储为经确认的交易,保持数据可用性的同时广播交易以达成共识,以及Tusk(一种异步共识协议)复责对交易的排序,Tusk使用共享随机性来消除节点之外的额外通讯,并允许每个节点确定交易的总顺序。并且共识子系统还可以扩展,为每个验证者添加更多机器实现对更多交易进行排序。图三:Sui执行交易交互流程图片来源:https://github.com/MystenLabs/sui/blob/main/doc/paper/sui.pdf 上图为client和Sui Authorities之间执行交易的交互流程: a) 拥有私钥的用户创建并签署用户交易,在Sui内改变他们拥有的对象或共享对象。此步骤无需用户签名私钥,由客户端或网关代币用户执行。 b) 用户交易发送到Sui Authority后,每个Authority都会检查它的有效性,并在成功时签署交易后返回给客户端,客户端收集来自授权,如果达到法定人数即可形成交易证书。 c) 交易证书发送给Authorities,如果交易涉及到共享对象,就发送到由Sui Authorities操作的拜占庭协议确认共识。并且等待协议与其他共享对象事务相关的排序,最后执行事务并将其效果汇总为签名进行响应。 d) 一旦有达到法定人数的Authorities执行了证书,就可以确认最终性。 Sui使用对象模型并利用Move语言的强大所有权模型,这些交易可以明确依赖与发送者控制下的多个元素,通过要求明确的依赖关系,Sui将“多通道”方法应用于事务验证,那些独立的事务流可以不受其他事务的阻碍而进行。 2.Gas市场设计。Sui以纪元为单位运行,每个纪元(24小时)验证节点集都会改变,新纪元的验证节点会就整个纪元的参考Gas费进行投票。通过一些激励措施,鼓励验证节点在整个纪元将交易费用保持在接近参考价格的水平。当网络拥挤时,验证节点可根据网络需求的增加按比例增加更多的计算能力,以此使Gas价格接近参考价格。 状态通胀问题:当用户在链上提交数据时,必须同时向Sui的存储基金支付Gas费等费用。这笔资金用于支付验证节点存储用户数据的现实成本。随着网络成熟和存储成本增加,验证节点将由存储基金支付报酬。此外,一旦用户不再需要存储这些数据,就可以删除这些数据并从存储基金中获得回扣。图四:Sui的Gas费设计图片来源:https://docs.sui.io/learn/tokenomics Sui的独特之处,是将存储费和交易执行划分开,原则上,存储成本是以链下美元计价,用于存储任意链上数据,存储成本通过治理民意调查确定的外生定价。但是从用户角度来看,他们不区分支付的费用,当用户提交链上数据时,他们会同时支付Gas和存储成本。而存储成本将存入“存储基金”,用于补贴未来随着网络发展的成熟而增加的存储成本。并且用户还可以删除链上数据从存储基金中获得回扣,以达到经济最优。后续发展:下一阶段,主要目的是使开发人员能够定义和构建: 1.链上DeFi和TradFi原语:实现实时、低延迟的链上交易; 2.奖励和忠诚度计划:部署大规模空投,通过低成本交易惠及数百万人; 3.复杂的游戏和业务逻辑:透明实现链上逻辑,扩展资产功能,提供超越纯粹稀缺性的价值; 4.资产代币化服务:使从财产契约到收藏品,再到医疗和教育记录的一切所有权大规模无缝执行; 5.去中心化社交媒体网络:赋予创作者拥有的媒体、帖子、点赞和网络隐私和互操作性。Aptos和Sui的对比相似点:1. 都是使用Move作为原生编程语言。但Sui对Move引入了一些修改,最明显的是所有权 API,它更干净,更清晰地展示了 IMO 的区块链设计。 2. 采用多线程并行的方式确认区块,并且加入状态同步以优化数据可用性。 3. 基于Block-STM的并行事务执行和共识,而不是其他layer1中设计的有序事务和块的顺序执行。不同点:硬件要求:从上图来看,Sui的硬件要求是最低的,Aptos的硬件要求也能适配大多数节点。并且他们的节点的设备是可以线性扩展的,以适配不同状态下的交易需求。写在最后在如今公链的竞争格局下,专攻技术解决方案的公链的生存空间已经愈发狭窄了。当Aptos和Sui出现时,也会有人质疑,用这种新语言Move开发公链只是一种炒作,最后还是一地鸡毛。但当我们真正了解Move语言后,可以发现,Move语言在安全性和易用性上都较其他语言有大幅度的提升,它从底层语言上巩固安全性,采用并行达到高吞吐的可扩展性,以及动态节点变化提升去中心化。除此之外,Move语言的易用性也给了开发者一次重新选择的机会,目前也有越来越多的开发者加入Move语言的开发中。 其次,Aptos和Sui的优势在哪呢?只有安全和高吞吐吗?其实我们还可以从中看到一些不同的东西,Aptos和Sui设计初衷是构建一个能够满足Web3中下一个十亿用户的体验。在目前公链中,不论是交易的速度还是吞吐量都还远不能承载更多现实世界的用户和资产,即使是在高效的layer2中,领取一次空投都能让二层网络堵得水泄不通。我们从Aptos和Sui的发展路线中可以看出,他们要做的不是简单的复制其他公链的生态项目,他们很明确自己的定位,例如Sui,他们将扩展那些需要安全及高吞吐量的领域,如游戏、社交,资产代币化服务等。逐步缩小区块链和现实世界之间的距离,带入更多的热钱与用户,最后拥抱Web3世界大繁荣。 公链技术的一次次革新都会带来很多令人兴奋的创新。我们也期待在Aptos和Sui上可以带来更多未来世界的发现。 ## Publication Information - [ViaBTC Capital](https://paragraph.com/@viabtc-capital/): Publication homepage - [All Posts](https://paragraph.com/@viabtc-capital/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@viabtc-capital): Subscribe to updates