加密后浪强势来袭:Move 将如何书写新篇章

2019 年,Meta(原 Facebook)推出了加密货币项目 Libra,吸引了整个金融市场的关注, 但随后 Libra 因监管限制被迫转型 Diem。今年 1 月底,Diem 以约 1.82 亿美元的价格被 Meta 出售。Meta 的 Libra 和 Diem 计划看起来是无疾而终,但却给加密行业留下了宝贵的遗产——弥补了 Solidity 及 EVM 缺陷的 Move 编程语言以及衍生出的公链团队,比如最具代表性的 Aptos、Sui 和 Linera。

Move 编程语言从最开始被推出以来,便被不少开发者誉为是最适合区块链的语言。随着最近 Aptos 和 Sui 等超新公链的强势出场, Move 语言也被大家广泛的议论,并不断被与 Solidity 和 Rust 做对比。本篇文章我们将 Move 语言的金融属性,智能合约的安全性,灵活性,可组合性,以及 Move 语言和 Solidity, Rust 的 联系和比较进行探讨,并追踪建立在 Move 语言上的新公链们的进展。


一、Move 的两大优势

目前最主流的智能合约语言是 Solidity,和它相比 Move 最大的特点是安全,Move 从语言、虚拟机、合约调用、合约运行等层面为智能合约提供了全方位安全保障,此外在可组合性方面,Move 也提供了更优解决方案。下面将分别介绍 Move 这两个最大优势。

1、从底层确保智能合约的安全性

根据慢雾此前的报告,2021 年区块链安全事件导致损失超 98 亿美元。作为新兴的编程语言,Move 语言在安全性上也做了不同层面的突破和创新。

正如 First-class Resources 的真正含义是「数字资产是一等公民」一样,Move 是为操作数字资产而生的智能合约语言。

相比其他语言,Move 对 Token 资产进行了更为原生,底层的处理。Move 语言专门将资产定义为一种 Resource,与其他的数据区分开来。在区块链语境下,代币就是一种 Resource,同时 Resource 数据必须要存储在账户下面,在交易过程中,资产必须要流向一个地方,要么转移到另一个地址,要么被销毁,代币不可被复制或被“双重使用”。

而 Solidity 和绝大多数编程语言一样将 Token 作为数值变量处理,资产只是可以被加减的数字,一个地址的余额减少,另外一个地址余额增加,通过代码使得减少和增加的数字一致,因此只能通过代码逻辑确保资产的安全性。Resource 则是在语言层面将资产的概念进行了封装,避免了资产凭空产生和随意访问,极大的提高了安全性。

Move 代码示例
Move 代码示例

先字节验证,后执行合约

与 Solidity 采用编译器不同,作为一种可执行的字节码语言,Move 具有内置的安全算法和字节码验证器(Bytecode verifier),可以防止许多常见错误。Move 合约代码要能被执行,必须先被验证,这使得合约可以免受编译器的潜在故障和可能遭遇到的攻击。

Move 从一开始就致力于建立规范文化,每个 Move 模块都有标准库。Move 开发团队已经初步开发出专门的验证器 Move Prover,用于合约的验证。目前,该验证器运行速度已有较大提升,开发人员可以在几分钟内运行测试,使他们能够快速迭代他们的代码。

2016 年造成以太坊的硬分叉的 The DAO 事件,就是因为黑客利用了重入(Re-Entrance) 攻击漏洞,这是智能合约中的经典攻击。有了 Resource 模型和字节验证,则不会发生这种攻击。

以 Solidity 等语言为例,智能合约之间的调用是同一个进程内不同的智能合约虚拟机之间的调用,安全依赖于智能合约虚拟机之间的隔离。

Solidity 等语言下,智能合约的安全依赖于智能合约虚拟机之间的隔离
Solidity 等语言下,智能合约的安全依赖于智能合约虚拟机之间的隔离

Move 的做法则是通过 Move VM 让采用 Move 语言的区块链具备确定性,将合约调用放在同一个虚拟机沙盒中,通过编程语言内部的安全性对智能合约的状态进行隔离,而非依赖虚拟机进行隔离。

Move 通过编程语言内部的安全性对智能合约的状态进行隔离
Move 通过编程语言内部的安全性对智能合约的状态进行隔离

静态调用减少合约调用漏洞

合约的调用方式可以分为静态调用和动态调用。若程序调用必须在运行时才能确定被调用的目标,则称该调用为动态调用;反之,在运行前即可确定被调用目标,且在运行时无法变更该目标,则称该调用为静态调用。

动态调用允许程序里面可以写很多的函数、过程或者子程序,是一个灵活的语言机制。但灵活也意味着更容易出问题,动态调用不利于程序的推理,更不利于形式化验证(Formal verification),也更容易出安全问题,例如恶意用户通过循环调用制造恶意合约,造成多方的损失。

Move 语言采用静态调用,所有的合约执行路径都能在编译的时候确定,然后可以进行非常充分的分析、验证。开发者将问题暴露在合约编译的阶段,而非运行阶段,降低运行时出现宕机的概率。与以太坊 EVM 平台相比,Move 模块系统不支持循环调用,完美解决合约重入漏洞。

2、基于模块的可组合性:效率更高、更灵活

智能合约的可组合性是构建编程语言生态的另一重要特性。Solidity 等语言生态的智能合约的组合基本是基于 Interface 间通过消息传递进行的组合。而在 Move 是基于 Module(模块) 间的组合,通过资源 (Resources)的传递进行交互。

以太坊上,当我们想扩展一些新的行为或者做一些实现上的优化,那我们需要重新定义过往的接口,同时也会影响旧的方法。

而在 Move 中,合约的组合只需要对 Module 进行升级和优化,所有使用过这个 Module 的其他合约都会自动使用最新的版本。Move 的 Module 功能类似于以太坊中的合约,但更类似于使用面向对象编程的银行。Module相当于给智能合约提供了统一的兼容空间,智能合约就像乐高玩具的各个部分,通过任意组合产生新的产品。

按照 3NJOY Lab 创始人 Flex 的解释,如果以建造一个汽车工厂为例,Solidity 的做法是定义了这个工厂的生产标准以及流程,每一个想来造汽车的人都需要先造一个符合生产标准及流程的工厂,然后才能创造汽车。而 Move 的方式是工厂就只有一个,想要造汽车的人使用这一个工厂就能造出来大家都认可的汽车。

Move 通过 Module 间的组合,一方面,节省了合约占用的区块空间,一方面,让升级变得更加容易。同时,由于 Module 系统沿用了线性逻辑,可以很好地将数字资产的概念打包封装,并非常明确的将资源的定义和资源相关的行为进行拆分,这种面向资源的编程带来的表现力与可扩展性是其他语言无法带来的。


二、Move 和 Solidity,Rust 的联系和比较

相较于早在 2014 年就发布的 Solidity,Move 在区块链开发领域还是一种非常年轻的开发语言,需要更多的时间来证明它是一种足够安全并且不容易报错的区块链开发技术选项。

Move 和 Solidity 的主要区别

1、在金融属性上,Move 将资产作为一种 Resource, 对区块链最核心的 Token 资产进行了更为原生,底层的处理。

2、在合约的灵活性上,Move 可以创建一次性指令。

Move 语言中的模块与以太坊智能合约有相似之处,但又不完全一样:比如在基于 Move 编写的 Libra 中,模块包含了代码,而数据则是在 Resource 中。从目标导向来说,任何一个基于 Solidity 的以太坊智能合约就像是一个发布在单一账户地址下的单例对象。而在Move环境下,单一模块充当了一个创建resource的配方,但是任何单独模块都可以用来创建可发布在不同账户地址下任意数量的resource,这也体现出Move的模块性的灵活。

3、在安全性上,Move VM 采用语言层面的隔离,而非虚拟机方面的隔离。

Move 采用了静态调用,形式化验证。同时,为创建数字资产而设计创造的 Move 旨在用于开发出可定制化的交易逻辑,因此基于 Move 的每一笔资产都具有原生稀缺性,是独一无二的,并且拥有对应的访问控制属性。相比之下,Solidity 并没有原生稀缺性检查,当有新代币生成时,开发者必须通过手动查询其稀缺性是否满足,即代币的总供应量是否满足;并且,Solidity 也不具有原生的访问控制检查,开发者必须另外创建像 onlyOwner 这样的修饰器。在 Move 环境中,对于任一智能合约中的数据只能在该合约范围内进行修改,而无法通过外部合约进行修改;而在 Solidity 中,数据修改并不限于所在智能合约内。因此相比 Move 中对于合约内数据的修改范围限制,Solidity 少了一层安全保护。对于所谓的修改范围限制,可以用下面一段代码举例说明:只有在 Currency 模块范围内可以对 Coin 的数值进行修改。

Move 的 Module 属性
Move 的 Module 属性

4、在性能上,Move 作为一种解释性语言,它的每行代码都需要在运行中单独进行评估。

由于 Move 代码需要在运行中进行评估,Move 的性能表现可能不如 Solidity 以及其他编译语言。不过,这也避免了 Solidity 中常见的 bug,是出于安全性考虑的一种折衷策略。目前,完全基于 Move 所构建的区块链生态还十分有限,并且用 Move 所创建的智能合约暂时也无法移植到现有的其他区块链。尽管如此,开发者可以通过在 EVM 中运行大多数应用程序,并在 Move 中做出对应的必要修改来替换旧程序。

Move 和 Rust 之间的联系

另外,在我们比较 Move 和 Solidity 的同时,也需要提及与 Move 十分接近的 Rust,或者更准确的说,Move 是建立在 Rust 的基础上,但又不同于 Rust 的一种新语言。Rust 首次发布于 2011 年,比 Solidity 更早,并且不同于经常出现安全性问题的 Solidity,Rust 的诞生同时兼顾了安全性和运行性能,从代码语法上来看,Rust 接近于传统编程语言 C++,所以具有高效的运行性能,但又为内存提供了安全保障。Rust 是 Solana 生态开发者的必学语言。在开发过程中,Rust 环境中的 bug 可以在程序汇编时被发现并消除,这一点与使用 Move 开发时,在运行中逐行评估代码、避免产生 bug,异曲同工。而且,Move 中的模块与 resource 也和 Rust 环境下内置的依赖项管理器 Cargo 有着相似之处。正因为 Move 与 Rust 的紧密联系,很多 Solana 生态中熟练使用 Rust 语言的开发者都开始往像 Aptos 和 Sui 这样基于 Move 的新兴区块链生态进行迁移。


三、MOVE 生态下的新公链建设

Move 生态下已有Aptos, Sui, Linera, Starcoin 等公链部署,它们都在 Move 语言的基础上做了自身的拓展。本章节将对 Aptos, Sui, Starcoin 进行介绍。

Aptos

  • 项目简介

Aptos 起步于今年 2 月初,团队的开发人员有 Diem 的创始团队成员和核心开发者,团队对于 Aptos 的构想与对 Diem 的构想有高度的相关性,开发 Aptos 一定程度上是对 Diem 开发的延续。Aptos 主打 Layer1 上的交易的并行执行,以及高性能,试图用一条链解决去中心化、安全、高性能这组「不可能三角」。当前该网络每秒可处理 1 万笔以上的交易,理想状态下,Aptos 主网每秒可处理 16 万笔交易。Aptos 此前拿到了 3.5 亿美金的投资,现在属于 Move 系公链中进展最快的。

  • Aptos 上的 Move 语言

Aptos 通过适配器层扩展了核心 MoveVM 的附加功能,其中包括通过 Block-STM 实现的并行性,无需用户输入即可并发执行事务,用于在帐户中大规模存储、存储密钥的表,以及解耦的细粒度存储(fine grained storage)在帐户中的数据量会影响与帐户相关的交易的Gas Fee。

  • 开发进展

今年 3 月 Aptos 启动了开发者测试网,5 月 Aptos 启动激励测试网注册,并将激励测试网分为 4 轮:「去中心化启动」、「质押」、「治理和升级」以及「动态验证器拓扑」。当前其测试网络已经达到了 2 万多个节点,使其成为当今最大的已知权益证明节点社区。

Aptos 第三轮激励测试网活动 AIT-3 将8 月 30 日正式启动,9 月 9 日测试结束,Aptos 主网将于今年秋季上线。

  • 生态发展

今年 6 月底,Aptos 推出了 2 亿美元的生态系统资助计划,吸引了超过 100 个项目在 Aptos 构建。从生态布局来看,Aptos 仍以基础设施建设为主,部署应用的场景多是钱包、DEX 和借贷协议等产品,值得关注的有超并行 CLOB 协议 Econia、移动多签钱包 hive、可集成应用程序的加密钱包 Martian、借贷协议 NjordFinance、交易聚合器 Hippo Labs、AMM 交易应用 Pontem Network 等。


Sui

  • 项目简介

Sui是由前Meta工程师创立的Mysten Labs 建立,引入了不可变状态,试图在 Move 中实现类似 UTXO 的编程模型。Sui专注于高TPS和低延迟, 没有设置TPS上限,具有良好的扩容能力,降低用户的交易成本。在今年3月的测试当中,Sui的TPS达到12万。Sui 正在以20亿美元估值完成至少2亿美元的B轮融资。

  • 项目特性

    • 链上存储及其扩展性。Sui Move 中没有全局存储,存储只发生在 Sui 存储内,而不是 Move 存储中。Sui 的存储低成本且可水平扩展,使开发人员能够定义具有丰富属性的复杂资产。

    • 高性能 & 高扩展性:Sui 横向扩展以满足应用程序的需求。Mysten Labs 表示,Sui authorities(节点)理论上可以有效地无限扩展网络吞吐量,以满足建设者和创造者的需求。截至 2022 年 3 月 19 日,在 8 核 M1 Macbook Pro 上运行的未优化单一 worker(single-worker) Sui authorities 可以每秒执行和提交 12 万个代币传输事务 (TPS)。

    • 开发友好:Mysten Labs 还将发布 Sui Developer Kit 开源工具包,让开发者减少调试智能合约、等待审核或构建基本技术堆栈元素的时间。Sui Developer Kit 的三个构建模块包括游戏 SDK、引导社区的 SDK 和 Handshake SDK。

  • Sui 上的 Move 语言

Sui 在使用 Move 时,它对 Move 的核心功能进行了某些更改,尤其是在全局存储运算符和关键能力方面。这些更改保留了 Move 的安全性和灵活性,但优化了存储和地址机制,从而提高了网络性能并减少了交易确认时间。

  • 开发进展

Sui 于5月上线 Devnet,允许开发者使用 Sui 网络,截至7月已有超5000个节点在 Devnet 上运行。
本月,Sui 将启动激励测试网,目前已启动激励测试网注册。测试网将分为:网络、质押、升级 等不同阶段。

  • 生态进展

目前公开信息的项目有8个,类别涵盖钱包、NFT、链游、元宇宙等。从目前项目布局、Sui对游戏提供解决方案来看,NFT和链游有望成为其生态比较有特色的板块。


Starcoin

  • 项目简介

Starcoin 基于增强版 PoW 共识机制, 是较早在 Move 上部署主网的新公链。Starcoin 在探索 Layer2 乃至 Layer3 的分层扩展模式,具有较好的可扩展性,状态能够安全无缝转移,数据能够轻松快速扩容,拥有较低的延迟和较好的操作性。

  • 开发进展

Starcoin 于2021年5月上线主网,Starcoin 主网目前已稳定运行一年多时间。Starcoin Layer2 将于今年9月提供测试网络。

  • 生态发展

Starcoin 生态包括钱包、CEX、DEX、矿池、稳定币、NFT、链游等七类,主要围绕STC 挖矿,交易等展开。

  • 代币

STC 是 Starcoin 的原生代币,发行总量为 3,185,136,000 STC,总量恒定。主要用途有1.支付交易的 gas 费用 2.支付状态空间费用 3.用于链上治理投票。

STC 的代币经济模型显示,国库是经济模型的中心,国库将区块奖励分发给矿工,将国库资金分给DAO ,矿工和 DAO 将 STC 投入生态,链上生态收益最后回归国库,实现经济模型自举。


结语

总体来说,Move 面向金融属性的智能合约框架使得其与支持去中心化金融应用的部署天然适配。Move 语言在智能合约的安全性,可组合性,以及灵活性上的创新为其生态发展,DeFi、NFT 等去中心化资产的安全等提供了多方位的支持与保障。

我们相信,有着强金融机构背书和强技术背景支撑的 Move 语言以及 Move 系新公链,将会给区块链行业带来全新的叙事。随着越来越多的开发人员,行业资源进入到 Move 生态,我们将不断见证这个面向资产编程的语言的魅力,同时也有更多捕获到新公链们带来价值的机会。

Assembly Partners 将持续更新 Move 生态的相关进展,欢迎加入我们的 Discord 获取最新 Move 生态信息,以及我们对于 Move 生态的研究和思考。如果您有任何想法或建议,欢迎随时和我们一同交流,学习!

Subscribe to asmp.eth
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.