Move on Rooch
Rooch 的目标是让开发者可以快速构建并部署 VApp,而智能合约语言可以保证应用逻辑的可验证性。Rooch 选择了 Move 语言作为开发语言,我们认为它的以下特性,让它成为最适合构建应用的智能合约语言。
- 平台无关性:Move 以及其虚拟机没有和具体的区块链平台实现耦合,不同的区块链平台为了适应不同的应用场景,可以基于 Move 做创新。
- 安全性:Move 自带的安全特性以及对资源的稀缺性的支持,更适合区块链这种资产和应用逻辑深度绑定的应用场景。
- 扩展性:Move 的依赖管理机制,让平台可以提供强大的内置库,同时开发者也可以方便地引入第三方库,更适合构建复杂的应用。
Rooch Move 的特性
Move 语言的特性可以查阅文末的参考资料,这里主要介绍 Rooch 给 Move 带来的新特性。
内置标准库
Rooch 当前内置了四个标准库,分别是 MoveStdlib
、MoveosStdlib
和 RoochFramework
,BitcoinMove
,详细介绍参看内置库。
私有泛型
#[private_generics(T)]
是一个函数注解,它保证了添加该注解的函数,只能在定义 T
的模块内调用,安全模型上遵循和 Move 存储指令类似约束,但把这个能力开放给了开发者。这个特性是后面几个特性的基础条件,详细介绍参看私有泛型。
数据结构体
#[data_struct]
是一个结构体注解,它标志该结构体是一个纯数据结构体,可以直接在合约中反序列化。这个特性是为了方便开发者从外部数据源中获取数据,详细介绍参看数据结构体。
存储抽象
存储抽象的目标是让开发者可以在智能合约中更灵活地定义自己的状态存储结构,而不局限于平台提供的标准化方案。所以 Rooch 在合约中实现了 Move 原来的存储指令,以下是对照表:
Move 存储指令 | Rooch 中的函数 | 说明 |
---|---|---|
move_to<T:key>(&signer,T) | account::move_resource_to<T:key>(&signer,T) | 将 T 类型的资源存储在 signer 的用户状态空间内。 |
move_from<T:key>(address):T | account::move_resource_from<T:key>(address): T | 将 T 类型的资源从用户状态空间中取出来。 |
borrow_global<T:key>(address):&T | account::borrow_resource<T:key>(address): &T | 从用户空间中读取 T 类型的的不可变引用。 |
borrow_global_mut<T:key>(address):&mut T | account::borrow_mut_resource<T:key>(address): &mut T | 从用户空间中读取 T 类型的的可变引用。 |
exists<T:key>(address):bool | account::exists_resource<T:key>(address): bool | 判断用户空间中是否存在 T 类型的资源。 |
account
提供的以上方法,都有 private_generics(T)
注解的约束,保证安全性上和 Move 存储指令一致。
除了 Account Resource, Rooch 还同时提供 Object 存储。关于 Rooch Object 的详细信息参看 Rooch Object。
关于存储抽象的设计,可以参考存储抽象。
获取当前模块的 signer
通过函数 moveos_std::signer::module_signer<T>():signer
可以用来获取当前模块的 signer
,以当前模块的账户身份调用 context::move_resource_to
等需要 signer
的函数。
这里的 T
受 private_generics(T)
约束,保证了调用的安全。
Crypto 算法支持
更多参考资料
- MoveBook (opens in a new tab):Move 语言的基础教程
- Move on Aptos (opens in a new tab):包含 Move 语言的介绍以及 Move 在 Aptos 上的特性
- Move on Sui (opens in a new tab):包含 Move 语言的介绍以及 Move 在 Sui 上的特性