在区块链技术的发展中,不同的开发语言争相崛起,争夺开发者的青睐,究竟谁才是区块链开发语言之王呢?Move、Solidity和Rust备受瞩目,Move是Facebook推出的开发语言,专门用于Libra区块链的智能合约开发,它注重安全性和可验证性,提供强大的类型系统和资源管理,为区块链开发带来了更高的可靠性,Solidity则是以太坊的官方语言,被广泛应用于智能合约的开发,它易于学习和上手,并且支持大量的开发工具和库,使得开发者能够更加快速地构建应用,而Rust则以其优秀的性能和安全性而备受赞誉,逐渐在区块链领域崭露头角,许多新兴的区块链项目开始采用Rust作为其开发语言,区块链开发语言之王究竟谁将拔得头筹,还有待时间的验证和市场的认可,下面看下详细内容。
详解区块链开发语言之王
1、简介
在Web3行业,重点是为用户提供无缝的体验。从这个角度来看,dApp构建在哪个区块链上并不那么重要,比起确保在不同区块链之间实现平稳用户体验的互操作性更为关键。在2021年和2022年,关于单体区块链和多链之间的激烈辩论不断发展。值得注意的是,Solana和Luna曾一度崭露头角,然后逐渐淡出,为Aptos和Sui抢占市场的关注创造了机会。
Aptos 和 Sui 都是 Meta 区块链项目 Diem(以前的 Libra)的后继者,有一个共同点——他们都使用 Move 编程语言。 本文重点介绍 Aptos,深入探讨其使用的 Move 语言和 MoveVM 状态机的特性,以及它如何与现有的编程语言和状态机(例如 Solidity/EVM 和 Rust/WASM)进行比较。
2、什么是Move?
2.1 Move 是如何诞生的
Facebook(现为 Meta)的 Diem 团队发现了区块链行业广泛采用的 Solidity 编程语言的两个局限性。 首先,Solidity 存在重入攻击和双花攻击等漏洞。 虽然采用 Solidity 的区块链网络(例如以太坊)通过共识算法减轻了这些攻击,但不可否认的事实是,该语言本身蕴藏着潜在的攻击向量。
其次,Solidity 无法并行化事务处理导致瓶颈。 为了防止双重支出,Solidity 要求顺序执行智能合约等交易。 这种顺序处理限制了速度,进而阻碍了区块链的可扩展性。
在这些担忧的推动下,Diem 团队(Meta 的区块链部门)受 Rust 的影响,开发了 Move 语言,以解决上述缺点。 虽然 Rust 是一种值得称赞的编程语言,但在用于编写智能合约时可能会导致冗长的代码。 随后,Aptos保留了原来的Move语言,同时融入了面向对象的编程模型,演变成Aptos Move。 同时,Sui 采用了一种称为 Sui Move 的面向对象语言。
2.2 Aptos Move/MoveVM 功能
Aptos 的 Move/MoveVM 经过精心设计,主要关注安全性。 此外,Aptos 简化了 Move 的合约代码并启用了并行处理,最大限度地减少了区块链攻击的可能性并最大限度地提高了可扩展性。 在本节中,我们将深入探讨 Move 如何实现这些功能。
通过 Move Prover 和资源模型增强安全性
形式验证涉及以数学方式证明软件的代码遵守特定的规则或属性。 Aptos 通过 Move Prover 工具利用形式验证来验证其智能合约的安全性。 Move Prover 可以通过应用形式验证来防御智能合约中潜在的攻击媒介,例如双花和重入攻击,同时还可以识别其他代码错误并确保稳定性。 与其他依靠共识算法来抵御双花和重入攻击的区块链不同,Move 通过其语言和工具主动解决这些问题。
静态调度 VS 动态调度
此外,MoveVM采用静态调度来调用函数,以防止函数调用的重入攻击。 相比之下,传统的以太坊虚拟机(EVM)使用动态调度。 这两种方法的不同之处在于程序执行序列中函数调用的时序,通常按如下顺序进行:编译→链接→加载→运行→终止。 静态调度涉及在编译时调用函数,使智能合约能够在此经历初步的错误检查阶段。 因此,在MoveVM中,智能合约提前进入验证阶段,从源头上有效预防重入攻击。
事务并行处理
Aptos MoveVM 通过事务并行处理增强可扩展性。 为了实现这一目标,MoveVM 采用 Block-STM(块级软件事务内存)将数据库事务分布在多个线程之间以进行并行执行。 仔细观察 Block-STM 可以发现以下主要特征:
-
Block-STM 利用乐观并发控制并行执行交易并随后验证它们。 遇到冲突的事务会重新执行。
-
Block-STM采用多版本数据结构来防止写入冲突。 所有写入以及事务 ID 和重新执行的次数都存储在同一位置。 这确保了即使交易被重新执行,交易也会按照预定义的顺序进行处理。
-
Block-STM引入了协作调度程序来优先考虑子事务的执行和验证,从而指定事务线程之间的处理顺序。 Move 使用这种协作调度程序来防止事务之间的冲突并防止其失效。
-
最后,动态依赖性估计用于通过估计事务的依赖性并识别相关事务来对事务进行分组。
通过Block-STM,Aptos通过以下方式实现并行交易处理。 此外,虽然验证器之间的验证是统一的,但每个验证器之间的执行是并行发生的,从而进一步增强了可扩展性。 Aptos的事务并行处理总结如下:
1. 用户生成交易并将其发送到网络。
2. 验证器验证交易。
3. 经过验证的交易根据动态依赖估计进行分组,同时每个交易组由验证器进行并行处理。
4. 处理后的交易被编译成区块并在整个网络中传播。
Aptos 代币标准增强了开发人员和用户的便利性
Aptos 还使用 Move 构建了自己的代币标准,即 Aptos Coin Standard。 在此过程中,Aptos 改进了与传统 EVM 相关的限制。 MoveVM 无需为代币发行单独发行智能合约,只需少量的 Gas 费用即可发行代币。 然而,这并不是一个显著的优势,因为 Solana 和 Algorand 等非 EVM 区块链也使用自己的代币标准。
尽管如此,从 2023 年 8 月开始,Aptos 推出了 FT 和 NFT 两个新标准。 值得注意的是,新的 FT 标准使开发者可以根据自己的开发目标选择和发行以下其中一种:常规代币资产、代币化 RWA 或游戏内代币。 这似乎符合 Aptos 进军不断增长的 RWA 相关市场的战略。 在实践中,Web 2.0 公司在对 RWA 进行代币化时通常会寻求对资产的控制权,但以太坊的局限性使得实现这一目标具有挑战性,导致许多公司开始创建自己的区块链。 相比之下,Aptos 通过代币标准设置在协议层面实现了这一目标。
3. 与其他语言和虚拟机的比较
比较Aptos Move/Move VM &其他语言和虚拟机
3.1. Move vs. Solidity
Move/MoveVM 的创建是为了弥补 Solidity 的局限性,因此它比 Solidity 更安全且可扩展。 如前所述,Move/MoveVM 的功能增强了 Aptos 的安全性和可扩展性。 正如2.1中提到的,MoveVM在语言阶段防止了重入和双花攻击,而Solidity/EVM已经出现了大量的重入攻击。 2016年以太坊的DAO攻击就是一个很好的例子,虽然以太坊基金会已经出台了防范措施,但DeFi中仍然存在大量的重入攻击。 黑客仍在尝试重入攻击,希望将错误的合约部署在 EVM 生态系统的 DeFi 中。
如上所述,Move/MoveVM 还具有高度可扩展性,由于能够并行处理事务,理论上最高可达 160,000 TPS。 这使得 Aptos 摆脱了瓶颈。 同时,由于存在双花和重入攻击的风险,EVM 必须顺序处理交易。 因此,EVM 链遇到了瓶颈,当大量交易同时发生时,gas 成本迅速上升,交易陷入停滞。
在灵活性方面,Solidity/EVM 比 Move/MoveVM 有优势。 Solidity/EVM 使用动态调度,而 Move/MoveVM 使用静态调度。 Move 使用静态调度增强了智能合约的安全性,但与 Solidity 相比限制了其功能。 此外,Solidity 允许随时升级协议和合约代码,而 Move 对这些升级施加了限制。 在区块链之间的互操作性方面,Solidity 比 Move 表现出更大的灵活性和可扩展性,主要是因为 Team EVM(包括以太坊)偏向模块化区块链,而 Team Move 则倾向于整体区块链。
3.2. Move vs. Rust
Move 源自 Rust,与 Rust 有许多性能和功能相似之处,例如效率和安全性。 关键区别在于它们的预期目的:Rust 作为通用编程语言,而 Move 专门从事智能合约开发。 Rust 是为更广泛的应用而设计的,并广泛应用于各种开发环境中,包括与区块链无关的开发环境。 因此,使用 Rust 编写智能合约代码可能会导致代码更长、更复杂。 相比之下,Move 被定制为专用于智能合约的区块链专用语言。 虽然这限制了它在区块链开发中的使用,但在编写智能合约时,它会导致相对简洁且不太复杂的代码。
<Move 与 Rust:智能合约比较,来源:Krešimir Klas>
上图是 Solana 和 Sui 开发同一个智能合约时的代码长度对比。 显然,更长的代码意味着更多潜在智能合约攻击的机会。 较长的代码还会增加开发人员犯错误的机会,而这些错误在代码检查期间可能会被忽视。 相比之下,Move 的优势在于其代码开发更简单,减少了开发人员出错的可能性并促进更有效的检查。
3.3. Aptos Move vs. Sui Move
Aptos Move 和 Sui Move 都源自同一个 Diem 团队,因此有很多相似之处。 它们最初受到 Rust 的影响,这赋予了它们相似的语法和功能。 此外,这两个项目都使用 Move Prover 来验证智能合约。
然而,Aptos Move保留了原始的Diem区块链并采用了面向对象的编程模型,而Sui Move则引入了面向对象的Sui区块链作为Diem的演变。 Sui 过渡到面向对象的区块链以支持并行性,这取决于了解要读取和写入的数据。 因此,Aptos 利用资源模型将应用程序构建块分为三个不同的单元:唯一标识符、属性和方法。 另一方面,Sui 采用面向对象的模型,将应用程序的构建块划分为状态和行为。 这导致 Aptos Move 为开发人员提供了相当大的灵活性,而 Sui Move 则相对固执己见。
Aptos Move 和 Sui Move 在区块链上的操作方式上表现出差异。 首先,两个区块链都支持并行处理,尽管方法不同。 如前所述,Aptos 通过 Block-STM 实现并行交易处理,而 Sui 采用有向无环图(DAG)结构来存储交易。 DAG结构切断了交易互连,实现了并行交易处理。
另一个区别在于如何防止重入攻击。 如前所述,Aptos 通过在执行前使用静态调度来验证智能合约的状态来防止重入攻击。 相比之下,Sui 通过在交易执行期间仅更新一次智能合约的状态来阻止重入攻击,确保即使攻击者中断交易,状态也保持不变。 此外,由于Sui的DAG结构不依赖于交易顺序,因此一笔交易的中断不会影响其他交易的独立处理,从而为防止重入攻击提供了额外的保护。
4.下一步:建立强大的开发者生态系统和杀手级 DApp
Move/MoveVM 为区块链开发提供了一个有前景的平台,但它面临着两个重大挑战。 1)在拥有成熟的开发者生态系统方面,Move 仍然落后于 Solidity。 Aptos 已经存在近一年了,而 Sui 最近才推出其主网。 因此,与拥有成熟开发者社区的 Solidity 相比,Move 有着相当长的路要走。 Solidity 拥有八年历史,提供广泛的开发人员工具和专门的培训计划。 对于开发人员来说,拥有一个支持性社区来为其工作提供反馈至关重要,Solidity 已经拥有一个在全球范围内举办黑客马拉松的庞大开发者社区。 Turing 估计 Solidity 开发者社区约有 200,000 名。
相比之下,Move 自 Facebook 以来一直在发展,但大部分都是 Diem 团队的内部努力。 因此,Move 的开发者生态系统既不像 Solidity 那样成熟,也不像 Solidity 那样广泛。 虽然存在 Aptos 开发者社区,包括 Aptos 论坛,但它缺乏 Solidity 中的结构化培训计划、开发者工具和开放反馈机制。 Sui 背后的公司 Mysten Labs 估计 Move 开发人员的数量为 10,000 人,尽管 Aptos 没有提供官方数字。
其次,2)Move 缺乏出色的杀手级 dApp。 许多 EVM 链(例如以太坊和 Arbitrum)托管着众多在加密用户中广泛使用的 dApp。 然而,Move 生态系统尚未产生类似的出色应用程序。 截至 9 月 26 日,Aptos 的总锁定价值 (TVL) 为 4350 万美元,明显小于主要 EVM 第 2 层,后者的基础超过 3 亿美元(来源:DeFiLlama)。
Aptos 基金会承认其面临的挑战,并正在积极采取措施克服这些挑战。 首先,Aptos基金会高度重视开发开发者工具,以培育繁荣的开发者生态系统。 他们推出了 Aptos 教程来帮助早期开发人员入门,并正在创建像 Move Spider 这样的教育项目。 此外,Aptos 基金会正在通过在世界各地(包括美国、韩国和中国)组织聚会小组来培育开发者社区,以进一步增强开发者生态系统。
在业务方面,Aptos 正在积极与知名实体和在各个领域拥有大量分销的实体建立合作伙伴关系,例如 NBCUniversal、微软、谷歌、Netmarble(Marblex)、Neowiz 和 Chingari 等。 另一方面,Aptos 正在努力通过 AIP-41 内部化链上随机性,以促进游戏公司整合。 Aptos 采用 AIP-41 为游戏公司提供了一种经济高效的中间件替代方案,可替代 Chainlink 的 VRF 等中间件,以确保 EVM 链内的项目随机化,使 Aptos 成为一个有吸引力的选择。
5. 结束语
本文以 Aptos 的 Move/MoveVM 为中心,与现有的区块链开发语言进行功能对比。 研究结果表明,Move 是专门为开发区块链智能合约而构建的,并且比现有语言具有明显的技术优势。 然而,就开发者和 dApp 生态系统而言,Move 仍处于早期阶段。 目前,Solidity 的开发者数量是 Move 的约 20 倍,在总锁定价值(TVL)和影响力 dApp 方面,Solidity 占据着稳固的地位。 尽管如此,Move 才诞生一年,是少数专门用于区块链开发的编程语言之一,这表明它具有巨大的未开发潜力。 此外,Diem 团队开发的该语言的声誉增加了 Move 生态系统增长的前景。 因此,如上图所示,作为一种综合性区块链编程语言的Move是否能够发展到与Solidity竞争是值得关注的。