Module (模块)
-
Move 代码被组织成模块, 可以把一个模块看成是区块链上的一个智能合约
-
可以通过调用这些模块中的函数来与模块进行交互,可以通过事务或其他 Move 代码来实现, 事务将被发送到并由Sui区块链进行处理,一旦执行完成,结果的更改将被保存
-
一个模块由
module
关键字 + 地址 + 模块名组成, 其中地址可以写成 alias (定义在 Move.toml中), 例如 lets_move_suimodule lets_move_sui::sui_fren { }
基本数据类型
- 无符号整数:
u8
,u16
,u32
,u64
,u128
,u256
- Boolean:
bool
- Addresses:
address
- 字符串:
String
- Vector:
vector
, 例如vector<u64>
- 自定义的结构体类型, 例如下面定义的 Struct
Struct (结构体)
-
结构体是 Sui Move 中的一个基本概念
-
结构体可以看成是一组相关字段的组合, 每个字段都有自己的类型
-
Sui Move 可以为结构体添加4 种能力:
key、store、drop、copy
, 这些能力后续会慢慢涉及 -
下面是一个基本的结构体名为 AdminCap, 内部含有一个 num_frens字段
public struct AdminCap { num_frens: u64, }
-
添加一个私有函数 init, 这是一个特殊的函数, 会在 module 部署到区块链时, 自动调用
fun init(ctx: &mut TxContext) { let admin_cap = AdminCap { id: object::new(ctx), num_frens: 1000, }; transfer::share_object(admin_cap); }
Object
Object
是 Sui 中的一个基本概念- 在 Sui 中, 所有数据可以视为不同 Object 内部的字段
- 使用结构体(Struct)来表示Object
- 可以根据 module 中定义的函数进行创建, 读取, 修改,交互 Object
创建一个 Object
-
一个 Object 一般都有
key
能力以及含有一个类型为UID
的id
字段-
sui::object::new
: 创建一个新对象。返回必须存储在 Sui 对象中的UID
public fun new(ctx: &mut TxContext): UID { UID { id: ID { bytes: tx_context::fresh_object_address(ctx) }, } }
-
-
创建 Ticket:
create_ticket
-
示例代码
module lets_move_sui::ticket_module { use sui::clock::{Self, Clock}; use sui::object::{Self, ID, UID}; use sui::transfer; use sui::tx_context::{Self, TxContext}; public struct Tic