开发者如何快速入门 Move 语言

MoveDao助手
发布于 阅读 767

内容目录

Move 语言简介
Rust 开发者入门 Move 语言
Solidity 开发者入门 Move 语言
四 非智能合约开发者入门 Move 语言


一. Move 语言简介

  1. Move 语言是什么,不是什么

Move 语言是为「数字资产」而生的智能合约(Smart Contract)平台型语言,是一门具有静态类型系统的编译型语言,一般我们口中的 Move 语言会包括 Move 语言本身和 Move 虚拟机,例如说 Java的时候,也都指 Java 语言及 Java 虚拟机。

Move 语言目前只是智能合约语言,并不是通用开发语言。

  1. Move 给人感觉:安全,高性能

Move 语言和其他语言一样,有一些内置的基本类型,bool,各种不同大小的无符号整数,地址,数组,可以定义结构体,也就是对象,也支持循环,函数,条件语句,泛型等基本要素。

特有的:引用(Reference)和能力类型(Abilities)。其中引用有两种,不可变(&T)和可变(&mut T), 不可变引用是只读的,可变引用可读写补引用的对象或资源;

能力类型是 Move 语言中定义资源的语法,目前有四种能力类型 copy, drop, key, 'store``,定义资源时,相应的结构体不能有 copydrop` 能力。

Move 语言自带全局存储(Global Storage),全局存储类似kv数据库,存储链的全局状态,保存所有链上数据,同时全局存储提供了读写资源的5种操作方法: move_to, move_from, borrow_global_mut, borrow_global, `exists``等。

  1. Move 语言主要特性

Move 语言最大是语言层支持面向资源,资源是一等公民,资源有稀缺性,只能被消耗,转移,不能被复制,不能凭空产生或消失。

Move 语言使用静态类型系统,不支持动态分发,在编译期间就确定指令的执行顺序,不会产生不确定性,有效减少各种安全隐患,例如可避免重入攻击。

Move 语言模块(Module) 与其他链的智能合约类似,但又不一样, Move 语言中的模块是无状态的,状态保存在全局存储中,模块将资源(或数字资产)严格封装,只有模块内部才能对其中的资源进行操纵。

Move 语言的模块设计与函数式编程比较相似,在模块中定义数据抽象和功能函数,强调不变性,各种模块可以灵活组合,通过类似搭积木的方式,构建出实现更强大的功能。

Move 语言支持形式化验证, 形式化验证的含义是根据某个或某些形式规范或属性,使用数学的方法证明其正确性或非正确性(https://en.wikipedia.org/wiki/Formal_verification), Move Prover 就是 Move 语言提供的形式化验证工具。

Move 虚拟机支持并行执行,使用 Move 语言的公链都具有并行执行能力。

Move 语言的公链有 FrameworkFramework相当于操作系统,链通过 Framework 运行 Move 虚拟机来执行智能合约。

使用 Move 语言的公链,除了 Move std 标准库之外,还有每个链上各自 chain lib raryFramework,除了 Move std是一样的,其他两个有可能不一样。


二. Rust 开发者如何入门 Move 语言

Rust 开发者对 Move 应该有熟悉的感觉,在 Move 语言中也有同样的所有权,Move 语言在所有权的基础上,通过能力类型明确了某类对象是资源(资产),不能任意复制,丢失。

使用 Rust 开发智能合约一般是用 wasmwasm Rust 程序相对于标准 Rust 来说,只会用到其中的一小部分功能,很少用到生命周期,系统库,网络,多线程等复杂功能。

Rust 写智能合约的难度一般不到普通 Rust 程序的 30%,而 Move 的语言要素比这个还要低,难度约为标准 Rust10%Rust开发者在学习 Move 语言时,重点注意能力类型的含义和运用。

学习周期 < 2


三. Solidity 开发者如何入门 Move 语言

Solidity 中的资产是数据的含义,在语言层面没有资产的表达能力,在迁移到 Move 语言时,重点要学习 Move 语言的面向资源的特性和数据存储到全局存储,语法上虽然有差异,但问题不大。

Solidity在智 能合约中定义数据结构,功能接口(Interface),并且还智能合约还保存相关数据,而使用 Move 语言的模块(module)相当于其他公链的智能合约,但模块只是定义了数据结构和逻辑功能,数据保存在全局存储中,在 Move 语言中,数据(资源)的定义和存储是完全分离的。

Solidity 交易模式就象用账本记账,有某个智能合约记录相关资产,智能合约相当于仓库,把资产和用户通过记账的方式关联起来,一旦智能合约被黑,记录被删改,资产就丢失了。

使用 Move 语言公链的交易模式类似以物换物或现金交易,资产保存在个人的账户下,相当于个人保管箱,只有个人签名才能修改,有更好的安全保障。

SolidityMove 都是智能合约语言,有很多方知识是相通或者一样的,在学习 Move 语言的过程中,相通的知识是可以迁移的,再重点学习 Move 语言的独有语法和特点。

Move 语言自身的要素比 Solidity要复杂一些,学起来也更难一些。写出一个正确,安全的智能合约的总复杂度是一样的,掌握 Move 语言后,之后写好智能合约会更简单,而 Solidity 则相反。

现在新出的几个智能合约语言,例如 FuelSwayFlowCadence,都把资源(数字资产)当成一等公民,如果你觉得 Solidity 不是智能合约语言的终点,那 Move 是个好的学习标的。

学习周期 < 1 个月


四. 非智能合约开发者入门 Move 语言

区块链是复制状态机,事件驱动平台,如果不熟悉区块链和智能合约架构范式,打个比方区块链 + 智能合约相当于无服务器架构 Serverless + FaaS,区块链是无服务器 Serverless

智能合约就是FaaS ,函数就是服务,智能合约是专门写业务逻辑的地方。

如果之前不太了解区块链,在学习智能合约语言时,也要深入学习和研究区块链的其他知识,例如 P2P通讯,共识算法及机制等,只有对区块链有了深入理解,才好写好智能合约。

后台业务逻辑开发一般有两种模式:一种是 CRUD 的模式,对数据进行增,删,改,查;

另一种是 CQRS 模式,叫命令与查询责任分离(Command Query Responsibility Segregation),这种模式通过命令事件流来不停改变系统状态,状态只提供简单查询,而查询服务是由另外的服务提供。

写智能合约的模式和 CQRS 很相似,链上的每笔交易就是一个命令,智能合约就是根据业务功能编写代码对相应的交易(命令事件)进行处理,定义一些数据类型,以及操纵这些数据的函数或方法。

Move 语言是专门写智能合约的语言,用 Move 语言写智能合约就象用 Java 开发后台业务逻辑功能类似。

Move 语言提供了全局存储,类似传统开发的 KV 数据库,区块链的数据(全局状态)是保存在全局存储中,其中 K 是个人账户的地址,V 可以是 Move 语言中的模块和资产或对象。

然后把修改的结果保存到 Move 的全局存储中。一般的区块链本身的查询功能都比较弱或简单,只支持链上当前状态的相关简单查询,复杂查询通过另外的 REST/RPC API 查询提供。

或者由社区开发者收集链上数据到中心化服务器上,然后做成一个链上数据分析平台。

如果你之前没有开发过智能合约,就把 Move 语言当成一普通的新语言学习就好,多写代码,多看资料,多交流,如果一个月没学会,那就两个月,唯手熟尔

学习周期 < 3 个月

最后,如果你还没决定学习 Solidity 或某一门智能合约语言,不知道选择 solidity 还是 Move,那就选择更难的那一个:Move ,因为更难的那一个在未来会给你带来更强的竞争力。

只要你有3年左右的开发经验(不是一年经验用3年), 入门 Move 语言最长也就 3 个月,马上行动,也欢迎加入 MoveDAO 社区,有需要的可以翻阅我们翻译的电子书 Move Book [中文版] 已经合并到Move官方仓库),一起前行,一个可能走得更快,但一群人会走得更远!


MoveDAO 社区介绍:

MoveDAOMove 生态第一个由中文社区率先发起的专注于关于Move语言的人才培育,语言发展和项目孵化的去中心化组织。

MoveDAO 通过汇聚和培育 Move 语言人才,让更多的资深程序员,软件工程师知道 Move,学习Move ,并给 AptosSui 等公链生态输送价值,解决市场的人才供需不平衡问题。

同时,我们将以项目提案的形式,组织项目成员进行项目孵化、Web3 项目开发推广,Move 语言插件工具及项目开发等业务,为生态的项目方提供一揽子解决方案


author:廖师虎(lshoo)
出品方:@MoveDAO

标签: Move学习 #Move
评论