Move:从何处来,到何处去?
NFT
Solana
Web3
本文重点介绍了 Aptos,深入探讨其使用的 Move/MoveVM 的特点,及其与 Solidity/EVM 和 Rust/WASM 等成熟编程语言和状态机的比较。
撰文:DongHyun Kang,Xangle
编译:Peng SUN,中文版 Foresight News 获独家授权编译发布
一、引言
在 Web3,无缝的用户体验极为重要。在某种程度上,确保用户在不同区块链之间体验流畅的互操作性要比构建 DApp 的区块链重要得多。在 2021 年和 2022 年,行业围绕着单体区块链和多链展开了激烈的辩论。值得注意的是,Solana 和 Luna 曾一度声名鹊起,但后来逐渐衰落,它们为 Aptos 和 Sui 吸引市场关注铺平了道路。
Aptos 和 Sui 都起源于 Meta 区块链项目 Diem(前身为 Libra),它们有一个共同点——都采用了 Move 编程语言。本文将重点介绍 Aptos,深入探讨其使用的 Move 语言和 MoveVM 状态机的特点,及其与 Solidity/EVM 和 Rust/WASM 等成熟编程语言和状态机的比较。
二、什么是 Move?
(一)Move 从何处来?
Facebook (现为 Meta)的 Diem 团队发现区块链行业广泛采用的 Solidity 编程语言存在两个局限性。首先,Solidity 存在重入攻击和双花攻击等漏洞。虽然采用 Solidity 的区块链网络(譬如以太坊)通过共识算法减轻了这些攻击,但不可否认的是,该语言本身存在潜在的攻击向量。
其次,Solidity 无法并行处理交易,因而面临着瓶颈。为了防止双花,Solidity 要求智能合约等交易必须按顺序执行。这限制了交易处理速度,反过来又阻碍了区块链的可扩展性。
基于此,Diem 团队受 Rust 影响开发了 Move 语言,以解决上述问题。Rust 编程语言令人赞不绝口,但用于编写智能合约时可能会导致代码冗长。随后,Aptos 保留了最初的 Move 语言,同时融入了面向对象的编程模型,将其演变为 Aptos Move。与此同时,Sui 采用了一种面向对象的语言 Sui Move。
(二)Aptos Move/MoveVM 有哪些功能?
Aptos 的 Move/MoveVM 经过精心设计,主要侧重于安全性。此外,Aptos 还简化了 Move 合约代码,并启用并行处理功能,从而最大限度地降低了区块链攻击的可能性并提高了可扩展性。在本节中,我们将深入探讨 Move 是如何实现这些功能的。
利用 Move Prover 和 Resource Model 增强安全性
形式化验证涉及以数学方法证明软件代码符合特定规则或属性。Aptos 通过 Move Prover 工具利用形式化验证来验证其智能合约的安全性。Move Prover 可以通过应用形式化验证来抵御智能合约中的潜在攻击向量,如双花和重入攻击,同时还能识别其他代码错误并确保稳定性。与其他依赖共识算法来防止双花和重入攻击的区块链不同,Move 的语言及其工具可以直接解决这些问题。
此外,MoveVM 采用静态调度来调用函数,以防止对函数调用的重入攻击。相比之下,传统的 EVM 采用动态调度。这两种方法在程序执行序列中函数调用的时序上有所不同,通常的顺序是:编译(Compile) → 链接(Link) → 加载(Load) → 运行(Run) → 终止(Terminate)。静态调度涉及在编译时调用函数,在此阶段可以初步对智能合约进行错误检查。因此,在 MoveVM 中,智能合约会提前进入验证阶段,从而从源头上有效防止重入攻击。
交易并行处理
Aptos MoveVM 通过交易并行处理增强可扩展性。为了实现这一目标,MoveVM 采用了 Block-STM(区块级软件交易内存),将数据库交易分配到多个线程中并行执行。仔细观察 Block-STM 可以发现以下主要特点:
- Block-STM 利用乐观并发控制(OCC)来并行执行交易,随后对其进行验证,遇到冲突的交易会重新执行。
- Block-STM 采用多版本数据结构,以防止写写冲突(write-write conflicts)。所有写入都与交易 ID 和重新执行次数一起存储在同一位置。这确保了即使交易被重新执行,也能按照预定顺序依次处理。
- Block-STM 引入了一个协作调度器(collaborative scheduler),用于优先执行和子交易的验证,从而指定交易线程之间的处理顺序。Move 采用这种协作调度器来防止交易之间的冲突,并防止其失效。
- 最后,动态依赖性估算(dynamic dependency estimation)通过估算交易的依赖性和识别相关交易,对交易进行分组。
通过 Block-STM,Aptos 可以通过以下方式实现并行交易处理。此外,虽然验证器之间的验证是统一的,但每个验证器之间的执行是并行的,从而进一步提高了可扩展性。Aptos 的交易并行处理总结如下:
- 用户生成交易并将其发送到网络。
- 验证器验证交易。
- 通过验证的交易根据动态依赖性估算进行分组,同时每个交易组由验证器进行并行处理。
- 已处理的交易被编译进区块,并在整个网络中传播。
利用 Aptos 代币标准增强开发者和用户的便利性
Aptos 还使用 Move 建立自己的代币标准 Aptos Coin Standard,改进了与传统 EVM 相关的限制。MoveVM 无需为代币发行单独发布智能合约,只需支付少量 Gas 费即可发币。但由于 Solana 和 Algorand 等非 EVM 区块链也有自己的代币标准,所以这个特点还不算特别突出。
不过,2023 年 8 月,Aptos 推出了 FT 和 NFT 两种新标准。值得注意的是,新的 FT 标准允许开发者根据其开发目标选择并发行以下其中一种:常规代币资产、代币化 RWA 或游戏内代币。这似乎与 Aptos 进军日益增长的 RWA 相关市场的战略不谋而合。具体来说,Web 2.0 公司在将 RWA 代币化时通常会寻求对资产的控制权,但在以太坊上不太容易实现,因此很多公司开始构建自己的区块链。相比之下,Aptos 通过代币标准设置可以在协议层实现这一点。
三、与其他语言和 VM 的比较
(一)Move vs Solidity
Move/MoveVM 的创建是为了弥补 Solidity 的局限,因此它比 Solidity 更安全,可扩展性也更强。如前文所述,Move/MoveVM 的特性增强了 Aptos 的安全性和可扩展性。MoveVM 在语言阶段就防止了重入和双花攻击,而 Solidity/EVM 已经出现过多次重入攻击。2016 年以太坊 The DAO 攻击就是最好的例子,虽然以太坊基金会已经做了很多预防,但 DeFi 仍存在大量重入攻击。黑客从未停歇,希望在 EVM 生态系统的 DeFi 中部署错误合约。
<EVM ecosystem still suffer from reentrancy attacks, Source: Google>
如上所述,Move/MoveVM 还具有很强的可扩展性,由于能够并行处理交易,理论上最高可达 16 万 TPS,也就是说交易处理效率不受限制。与此同时,由于存在双花和重入攻击的风险,EVM 必须按顺序处理交易。因此,EVM 链受此限制很大,当大量交易同时提交时,Gas 成本迅速上升,交易就要排队、停滞。
在灵活性方面,Solidity/EVM 比 Move/MoveVM 更有优势。Solidity/EVM 使用动态调度,而 Move/MoveVM 使用静态调度。与 Solidity 相比,Move 使用静态调度增强了智能合约的安全性,但限制了其功能。此外,Solidity 允许随时升级协议和合约代码,而 Move 在这方面有些限制。在区块链之间的互操作性方面,Solidity 比 Move 更具灵活性和可扩展性,这主要是因为以太坊等 EVM 团队倾向于模块化区块链,而 Move 团队则倾向于单体区块链。
(二)Move vs Rust
Move 源自 Rust,在性能和功能上与 Rust 有许多相似之处,譬如效率和安全性。关键区别在于其预期目的:Rust 是一种通用编程语言,而 Move 专注于智能合约开发。Rust 是为更广泛的应用而设计的,被广泛应用于各种开发环境,包括与区块链无关的环境。因此,使用 Rust 编写智能合约代码可能会导致代码更长、更复杂。相比之下,Move 是专门为智能合约定制的区块链专用语言。虽然这限制了它在区块链开发中的使用,但在编写智能合约时,它能带来相对简洁且不太复杂的代码。
<Move vs. Rust: Smart Contract Comparison, Source: Krešimir Klas>
以上是 Solana 和 Sui 在开发相同智能合约时代码长度代币。很明显,更长的代码意味着智能合约被攻击的可能性更大,开发者出错的几率也更大,代码检查过程中可能也会忽视这些错误。相比之下,Move 的优势在于代码开发更简单,能够减少开发者出错概率,代码检查也会更有效。
(三)Aptos Move vs Sui Move
Aptos Move 和 Sui Move 都来自 Diem 团队,因此它们有很多相似之处。它们最初都基于 Rust,因此具有相似的语法和功能。此外,这两个项目都使用 Move Prover 来验证智能合约。
不过,Aptos Move 保留了最初的 Diem 区块链,并采用了面向对象的编程模型,而 Sui Move 则推出了面向对象的 Sui 区块链,作为 Diem 的进化版。Sui 过渡到面向对象的区块链是为了支持并行性,而并行性取决于了解要读写的数据。因此,Aptos 采用了一种资源模型(resource model),将应用程序构建模块分为三个不同的单元:唯一标识符(unique identifiers)、属性(properties)和方法(methods)。另一方面,Sui 采用的是面向对象模型,将应用程序构件划分为状态(states)和行为(behaviors)。这就导致 Aptos Move 为开发者提供了相当大的灵活性,而 Sui Move 不具备这样的灵活性。
Aptos Move 和 Sui Move 在区块链上的运行方式也有所不同。首先,这两种区块链都支持并行处理,尽管方法不同。如前所述,Aptos 通过 Block-STM 实现并行交易处理,而 Sui 则采用有向无环图(DAG)结构来存储交易。DAG 结构切断了交易之间的相互联系,从而实现了并行交易处理。
另一个区别在于如何防止重入攻击。前文述及,Aptos 通过在执行前采用静态调度(Static Dispatch)来验证智能合约的状态,从而防止重入攻击。相比之下,Sui 通过在交易执行过程中只更新一次智能合约的状态来阻止重入性攻击,从而确保即使攻击者中断交易,状态也不会改变。此外,由于 Sui 的 DAG 结构不依赖于交易顺序,因此一笔交易的中断不会影响其他交易的独立处理,从而为抵御重入性攻击提供了额外的保护。
四、下一步:建立强大的开发者生态系统与杀手级 DApp
Move/MoveVM 是一个很有前景的区块链开发平台,但也面临着两个重大挑战。(1)Move 还没有成熟的开发者生态系统,这方面还比不过 Solidity 。Aptos 已经存在了将近一年,而 Sui 则是最近才推出主网。因此,与拥有成熟开发者社区的 Solidity 相比,Move 还有很长的路要走。Solidity 有着八年的历史,提供了大量的开发工具和专门的培训计划。对开发者来说,拥有一个支持性社区来为其工作提供反馈至关重要,而 Solidity 已经拥有一个庞大的开发者社区,并在全球范围内举办黑客松。据 Turing 估计,Solidity 开发者社区大约有 20 万人。
相比之下,Move 自 Facebook 推出以来就一直在开发,但大部分都是 Diem 团队的内部工作。因此,Move 的开发者生态系统既不像 Solidity 那样成熟、影响广泛。虽然现在有一个包括 Aptos 论坛在内的 Aptos 开发者社区,但它缺乏 Solidity 生态的结构化培训计划、开发者工具和开放反馈机制。据 Sui 开发公司 Mysten Labs 估计,Move 开发者的数量为 1 万人,但 Aptos 并未提供官方统计数据。
其次,(2)Move 缺乏一个杀手级 DApp。许多 EVM 链(譬如以太坊和 Arbitrum)上都有大量的 DApp,用户在广泛使用它们。然而,Move 生态系统尚未产生类似的应用。截至 9 月 26 日,Aptos 网络 TVL 为 4350 万美元,明显低于主流 Layer2。
<Aptos Move Tutorial created by the Aptos Foundation, Source: Aptos Move Github>
Aptos 基金会已认识到现在遇到的挑战,并正积极采取措施克服这些挑战。首先,Aptos 基金会高度重视开发者工具,以培育繁荣的开发者生态系统。他们推出了 Aptos Tutorial 教程来帮助早期开发者入门,并正创建 Move Spider 等教育项目。此外,Aptos 基金会还通过在全球(包括美国、韩国和中国)组织 Meetup 来促进开发者社区的发展,从而进一步增强开发者生态系统。
在业务方面,Aptos 正积极与知名公司以及在各行业拥有大量分销渠道的公司建立合作关系,譬如 BBCUniversal、微软、谷歌、Netmarble(Marblex)、Neowiz 和 Chingari 等。另一方面,Aptos 正在通过 AIP-41 将实现链上随机性(Onchain Randomness),以促进游戏公司集成。Aptos 采用 AIP-41 为游戏公司提供了一个经济高效的中间件替代方案,譬如替代可确保 EVM 项目随机性的 Chainlink VRF 等,吸引更多项目在 Aptos 上构建产品。
五、结语
<An illustration comparing blockchain development languages to evolution, Source: Krešimir Klas>
本文以 Aptos 的 Move/MoveVM 为中心,与现有的区块链开发语言进行了功能比较。研究结果表明,Move 是专为开发区块链智能合约而设计的,与现有语言相比具有明显的技术优势。不过,就开发者和 DApp 生态系统而言,Move 仍处于早期阶段。目前,Solidity 拥有的开发者数量约为 Move 的 20 倍,而在 TVL 与杀手级 DApp 方面,Solidity 的地位则更为稳固。然而,Move 才诞生一年,是为数不多的专门用于区块链开发的编程语言之一,这表明它还有巨大的潜力尚未开发。
此外,Move 由 Facebook 的 Diem 团队开发,这也为 Move 生态系统的发展前景增色不少。因此,如上图所示,作为一种全面的区块链编程语言,Move 未来能否与 Solidity 竞争值得我们关注。
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表Bi123的观点或立场