吐槽 witness-pattern

icodezjb
发布于 阅读 440

关于sui move中的witness-pattern

  1. one-time-witness type
    (1) 被 sui::types::is_one_time_witness 验证通过的类型
    (2) one-time-witness 类型和module同名(按字符串小写比对),这就要求每个module最多只有一个one-time-witness type
    (3) one-time-witness 类型有且只有一个 drop ability
    (4) one-time-witness 类型不是泛型
    (5) one-time-witness 类型要么是空结构体,要么是只有一个bool类型字段的结构体
    (6) one-time-witness 类型能且只能在init(默认初始化函数)中被实例化

  2. witness-pattern
    (1) 被 sui::types::is_one_time_witness 验证
    (2) 应用场景: 函数只能在其它module部署的时候(通过init函数)被调用

  3. weak witness-pattern
    看sui源码中有些所谓的witness-pattern例子(比如transferable-witness),没有被 sui::types::is_one_time_witness 验证,
    这类基本上可以用引用计数替代,硬要套模式,不能说假witness-pattern,那就叫 weak witness-pattern吧

评论