闭环令牌
闭环令牌允许其创建者限制令牌的使用范围,设置转账、花费和转换的自定义策略。它在 sui::token
模块中定义,并是 Sui 框架的一部分。
背景与用例
Sui 上的标准 Coin 实现是一个开环系统的例子 - Coins 自由流动,可包装,可自由转让 并且可以存储在任何应用程序中。最好的现实世界类比是 "现金" - 几乎没有受到监管,可以自由使用和传递。
然而,一些应用程序需要限制令牌的范围到特定目的。例如,仅可用于特定服务的令牌,或仅可由授权帐户使用的令牌,或者其帐户可以被阻止的令牌。现实世界的类比可以是 "银行账户" - 受监管,由银行控制,并符合某些规则和政策。
可以从闭环令牌中受益的特定领域包括:
- 忠诚积分 - 仅可用于特定服务的令牌,例如航空公司 - 授予常客并用于购买机票或升级。
- 合规性令牌 - 一些司法辖区要求对令牌进行某些检查或限制。例如,仅可由经过验证的用户使用的令牌,或者令牌的单个操作可以有限制。
- 游戏中货币 - 类似于移动游戏中的 "宝石" 和 "钻石":仅可在游戏中使用的令牌,授予玩家进行操作或购买。这类令牌通常不能转让,并且以预定义的数量铸造,以保持稀缺性和游戏平衡。
与 Coin 的区别
与 Coin 不同,Token 仅具有 key
能力,因此支持封装和公共转账,并且不能被封装、存储为动态字段或自由转让(除非有自定义策略)。由于这一限制,Token 只能由一个帐户拥有,并且不能存储在应用程序中(但是,它可以被 "花费" - 请参阅花费部分)。
// 在 `sui::coin` 中定义
struct Coin<phantom T> has key, store { id: UID, balance: Balance<T> }
// 在 `sui::token` 中定义
struct Token<phantom T> has key { id: UID, balance: Balance<T> }
合规性和规则
闭环令牌允许其创建者为转账、花费和转换设置任何规则。这些规则针对每个动作在 TokenPolicy 中指定。规则 是自定义的可编程限制,可用于实现任何请求授权/验证逻辑。
例如,一个策略可以设置转账的限制 - 每次操作 X 个令牌;或要求用户在花费令牌之前进行验证;或仅允许在特定服务上花费令牌。
规则可以在不同的策略和应用程序之间重用;并且可以自由组合以创建复杂的策略。