0x0 Sui名字的由来
Sui,发音swē,这个单词是来自日本哲学里的一个水元素,类比sui的力量就像水一样,可以在任何环境下自由适应变换。因此Sui blockchain的追寻就是提供一个灵活多变的Web3.0土壤,对其加以利用和塑性。
0x1 Sui Move和Move
Sui Move源自于Move。具体的不同点将在以后的编写示例中标出。
不同点类别:
- 1.Global Storage Operators(全局存储操作符)
- 2.Key Abilities(关键能力)
关键的不同点:
- 1.Sui使用基于对象为中心的全局存储
- 2.地址表示对象ID
- 3.Sui对象有全局唯一ID
- 4.Sui有模块初始化器
- 5.Sui的程序进入点以对象引用作为输入
0x2 Modules和Scripts
Move有两种类型的程序,分别是module和script
Modules: 是一种library(库),可以定义struct类型,struct里可以定义函数并操作数据,在struct里定义的数据是global storage的,并且module里的函数定义是用来更新global storage的数据的;Module本身也是在全局存储的。
Scripts: 是可执行进入点,类似其他语言中的main函数。一般script调用一个已经部署的module的函数是可以更新global storage的,并且script是短时效的代码,因为它没有在global storage里发布。
一个Move源文件,或者编译后单元(compilation unit)可能包含多个module和script,并且发布一个module或者执行一个script是独立的VM操作。
0x3 Script
script存在的主要目的是调用module函数。
script本身不能定义struct和friends,也不能访问global storage。
例如:
script {
// 1.可以使用use指令
use std::debug;
// 2.可以声明constant
const ONE: u64 = 1;
// 3.仅有一个函数,参数类型和个数不限,无返回值,函数名也可以不叫做main
fun main(x: u64) {
let sum = x + ONE;
debug::print(&sum)
}
}
0x4 Module
例如:
module 0x42::test {
struct Example has copy, drop { i: u64 }
use std::debug;
friend 0x42::another_test;
const ONE: u64 = 1;
public fun print(x: u64) {
let sum = x + ONE;
let example = Example { i: sum };
debug::print(&sum)
}
}
第一行代码指定了test的module会被发布到0x42账户下,并存储到global storage里。
- 一个module就可以是作为包含types和functions的集合。
use
关键字表示导入其他的modulefriend
关键字表示一组完全可信的module导入const
关键字表示定义私有常量
0x5 安装Move
下载/克隆move语言核心库
git clone https://github.com/move-language/move.git
直接安装
// 运行安装
cd move
./scripts/dev_setup.sh -ygt
或者通过docker安装
docker build -t move/cli -f docker/move-cli/Dockerfile .
或者通过二进制安装包安装SUI命令行工具
cargo install --locked --git https://github.com/MystenLabs/sui.git --branch devnet sui
Reference
- https://docs.sui.io/learn/sui-move-diffs
- https://docs.sui.io/learn
- https://move-language.github.io/move/modules-and-scripts.html
- https://docs.sui.io/build/install#prerequisites