关于sui move中的witness-pattern
-
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(默认初始化函数)中被实例化 -
witness-pattern
(1) 被 sui::types::is_one_time_witness 验证
(2) 应用场景: 函数只能在其它module部署的时候(通过init函数)被调用 -
weak witness-pattern
看sui源码中有些所谓的witness-pattern例子(比如transferable-witness),没有被 sui::types::is_one_time_witness 验证,
这类基本上可以用引用计数替代,硬要套模式,不能说假witness-pattern,那就叫 weak witness-pattern吧