从 Move 语言角度重新认识 Meta 系新公链
ViaBTC Capital
2022-08-18 16:21
订阅此专栏
收藏此文章

作者: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 上可以带来更多未来世界的发现。

【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。

相关Wiki
ViaBTC Capital
数据请求中
查看更多

推荐专栏

数据请求中
在 App 打开