参考资料:
主要区别
Coin
含义: 可以自由转让,自由流动,可包装(store)
类似于rmb,拥有者可以自由地支配他,同时只要拥有TreasuryCap对象,就可以拥有铸造和销毁Coin的权利
怎么理解可包装
struct Foo has key {
id: UID,
bar: Bar,
}
struct Bar has store {
value: u64,
}
Balance
比较简单,这里就不说了
Token
当你相对用户的权限做一些限制的时候,可以发布一个Token,制定自己的代币经济模型
含义:transfer,spend,conversion
通过TokenPolicy自定义规则
public -公共操作
Token有一系列公共和保护操作用来管理代币。公共操作对所有人可用,不需要任何授权。
- token::keep - 将代币发送给交易发送者
- token::join - 合并两个代币
- token::split - 将一个代币分成两个,指定分割的金额
- token::zero - 创建一个空(零余额)的代币
- token::destroy_zero - 销毁一个零余额的代币
Protected - 保护操作
注:默认是禁用的,可以在TokenPolicy中启用,并自定义规则
保护操作是那些发出ActionRequest的操作。有三种主要的方法来解决ActionRequest,最常见的是通过TokenPolicy。
- token::transfer - 将代币转账到指定地址
- token::to_coin - 将token转换为coin
- token::from_coin - 将coin转换为token
- token::spend - 在指定地址花费代币
💡Hot_Potato
ActionRequest是一个没有任何能力的结构体也称作”Hot-Potato”,它涉及一个没有任何能力的结构体,称为 “hot potato”。这种结构体只能在其模块内进行打包和解包。Hot Potato Pattern 利用 PTB(Programmatic Transaction Block)机制,通常用于在交易结束之前强制用户完成特定业务逻辑的场景。
简单来说,如果一个交易命令 A 返回一个 hot potato 值,则必须在同一个 PTB 中的任何后续命令 B 中消费它。最常见的用例是闪电贷(flashloan)。