能力设计模式

在前四章中,我们学习了Sui上的Move基础知识和一些进阶知识,并完成了Move Castle项目。 在本章中,我们将学习一些重要的Sui概念和标准,这些概念和标准通常在常见的Sui智能合约项目中使用。

能力设计模式允许模块对操作进行授权。这是通过在模块初始化时将“能力”对象发送到授权地址, 并在需要授权的函数中要求该“能力”对象作为参数来实现的。然后,只有拥有“能力”对象的函数调用者才有权限调用被授权的函数。

module test::test_cap {
    use sui::transfer;
    
    /// 管理员能力类型。
    public struct AdminCap has key { id: UID }
    
    /// 创建并将管理员能力对象发送给包发布者。
    fun init(ctx: &mut TxContext) {
        transfer::transfer(AdminCap {
            id: object::new(ctx)
        }, tx_context::sender(ctx))
    }
    
    /// 需要AdminCap对象拥有者作为调用者的授权函数
    entry fun authorized_fun(_: &AdminCap, ctx: &mut TxContext) {
        ...
    }
}

典型的能力实现是定义在sui::coin中的TreasuryCap。

如果你感兴趣,可以考虑在core.move中使用AdminCap。定义游戏数据中的可设置属性,并公开一个编辑函数。使用能力设计模式来授权函数调用实现编辑功能。