入口函数

入口函数是一个允许从链外世界调用的“入口点”,例如 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_entryclaim_from_public 函数进行一些测试。

sui client call --package 0xXXX --module example --function xxx ...

除了将函数设为“入口点”,entrypublic 的区别还包括:

  • entry 限制调用必须来自链外世界,而不是其他模块。
  • entry 函数可以有返回值,但其类型必须具有 drop 能力。
  • public 函数可以被其他模块调用。

请访问官方文档 入口函数 以获得更详细的介绍。