2 个版本
0.1.1 | 2022年11月22日 |
---|---|
0.1.0 | 2022年11月10日 |
#11 in #保险库
44KB
355 行
CosmWasm Vault Standard
CosmWasm 编写的代币保险库的标准接口。本仓库包含一系列应实现本标准的保险库合约的 ExecuteMsg
和 QueryMsg
变体。
保险库标准基础
关于保险库标准,有一些事项需要注意
- 每个保险库都有一个用于存款、取款和账目的特定代币,这个代币被称为
base token
。 - 每个保险库都有一个
vault token
,它代表了用户在保险库中的份额。用户收到的保险库代币数量应基于他们存入的基代币数量。
如何创建符合该标准的保险库合约
要创建符合标准的保险库合约,您只需要导入 VaultStandardExecuteMsg
和 VaultStandardQueryMsg
枚举,并在合约的入口点中使用它们。
VaultStandardExecuteMsg
和 VaultStandardQueryMsg
枚举定义了一系列变体,这些变体足以覆盖大多数保险库合约用例,所有符合标准的保险库都必须实现所有提供的默认变体。但如果您的用例需要额外的变体,请参阅有关 如何使用扩展 的部分。
ExecuteMsg 变体的描述和规范
有关每个变体的完整描述,请参阅 API 文档。
如何使用扩展
如果标准的 ExecuteMsg
和 QueryMsg
变体不足以满足您的用例,您可以通过定义扩展来包含额外的变体。首选的方法是创建一个新的枚举,它扩展了导出的 VaultStandardExecuteMsg
和 VaultStandardQueryMsg
枚举。例如
pub enum MyExtensionExecuteMsg {
MyVariant1 { ... },
MyVariant2 { ... },
}
这个枚举可以包含一个包含您的保险库使用的所有扩展的枚举,然后作为泛型参数 T
传递给 VaultStandardExecuteMsg<T>
。例如
pub enum ExtensionExecuteMsg {
MyExtension(MyExtensionExecuteMsg),
Lockup(LockupExecuteMsg),
}
pub type ExecuteMsg = VaultStandardExecuteMsg<ExtensionExecuteMsg>;
现在您可以在合约入口处使用 ExecuteMsg
枚举,而不是默认的 VaultStandardExecuteMsg
枚举。
包含的扩展
以下扩展包含在本存储库中
这些扩展均通过 cargo 功能在本存储库中可用。要使用它们,您可以像这样导入带有功能标志的 crate:
cosmwasm-vault-standard = { version = "1.0.0", features = ["lockup", "force_unlock"] }
每个扩展的简要说明如下。
Lockup
Lockup 扩展可用于创建无法立即赎回的 vault 代币的 vault。而不是通常调用 VaultStandardExecuteMsg::Redeem
变体,用户必须在 Lockup 扩展的 ExecuteMsg
上调用 Unlock
变体,并在指定的时间段后才能通过 WithdrawUnlocked
变体提取其基础代币。
ForceUnlock
强制解锁扩展可用于创建实现 Lockup
扩展的 vault,但某些白名单地址允许在扩展的 ExecuteMsg
上调用 ForceUnlock
变体,并立即解锁指定用户的 vault 代币。当 vault 与杠杆一起使用,并且清算者需要能够清算 vault 中锁定的代币时,这非常有用。
Keeper
Keeper 扩展可用于添加功能,让白名单地址或任何人充当 vault 的 "keeper",并调用执行以保持 vault 运行所需的工作的函数。
Cw4626
Cw4626 扩展是本存储库中唯一不通过将变体放在 VaultExtension
变体中来扩展标准 VaultStandardExecuteMsg
和 VaultStandardQueryMsg
枚举的扩展。相反,它将更多的变体添加到顶层,即来自 CW20 标准 的变体。这受到 以太坊上的 ERC-4626 标准 的启发,允许 vault,而不是使用 Cosmos 原生代币作为 vault 代币,通过实现 CW20 标准使其合约成为自己的 vault 代币。如果您正在编写一个没有 TokenFactory 模块 可用的链上的 vault,因此无法发行 Cosmos 原生代币作为 vault 代币,这将非常有用。
依赖项
~3.5-5MB
~111K SLoC