入口函数
入口函数是一个允许从链外世界调用的“入口点”,例如 Sui 客户端 CLI、RPC API 或 SDK。
有两种方式将函数暴露给链外世界:
- 添加
entry
修饰符 - 添加
public
修饰符
module move_castle::example {
use sui::transfer;
public struct NFT has key, store {
id: UID,
value: u64
}
/// 从 `entry` 函数领取一个 NFT 对象
entry fun claim_from_entry(value: u64, ctx: &mut TxContext) {
transfer::public_transfer(
NFT {id: object::new(ctx), value: 0},
tx_context::sender(ctx)
);
}
/// 从 `public` 函数领取一个 NFT 对象
public(package) fun claim_from_public(value: u64, ctx: &mut TxContext) {
transfer::public_transfer(
NFT {id: object::new(ctx), value: 1},
tx_context::sender(ctx)
);
}
}
发布示例模块并使用 Sui 客户端 CLI 调用 claim_from_entry
和 claim_from_public
函数进行一些测试。
sui client call --package 0xXXX --module example --function xxx ...
除了将函数设为“入口点”,entry
和 public
的区别还包括:
entry
限制调用必须来自链外世界,而不是其他模块。entry
函数可以有返回值,但其类型必须具有drop
能力。public
函数可以被其他模块调用。
请访问官方文档 入口函数 以获得更详细的介绍。