#保险库 #标准 #扩展 #变体 #cosmwasm #代币 #保险库

cosmwasm-vault-standard

CosmWasm 编写的代币保险库的标准接口

2 个版本

0.1.1 2022年11月22日
0.1.0 2022年11月10日

#11 in #保险库

Apache-2.0

44KB
355

CosmWasm Vault Standard

CosmWasm 编写的代币保险库的标准接口。本仓库包含一系列应实现本标准的保险库合约的 ExecuteMsgQueryMsg 变体。

保险库标准基础

关于保险库标准,有一些事项需要注意

  • 每个保险库都有一个用于存款、取款和账目的特定代币,这个代币被称为 base token
  • 每个保险库都有一个 vault token,它代表了用户在保险库中的份额。用户收到的保险库代币数量应基于他们存入的基代币数量。

如何创建符合该标准的保险库合约

要创建符合标准的保险库合约,您只需要导入 VaultStandardExecuteMsgVaultStandardQueryMsg 枚举,并在合约的入口点中使用它们。

VaultStandardExecuteMsgVaultStandardQueryMsg 枚举定义了一系列变体,这些变体足以覆盖大多数保险库合约用例,所有符合标准的保险库都必须实现所有提供的默认变体。但如果您的用例需要额外的变体,请参阅有关 如何使用扩展 的部分。

ExecuteMsg 变体的描述和规范

有关每个变体的完整描述,请参阅 API 文档

如何使用扩展

如果标准的 ExecuteMsgQueryMsg 变体不足以满足您的用例,您可以通过定义扩展来包含额外的变体。首选的方法是创建一个新的枚举,它扩展了导出的 VaultStandardExecuteMsgVaultStandardQueryMsg 枚举。例如

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 变体中来扩展标准 VaultStandardExecuteMsgVaultStandardQueryMsg 枚举的扩展。相反,它将更多的变体添加到顶层,即来自 CW20 标准 的变体。这受到 以太坊上的 ERC-4626 标准 的启发,允许 vault,而不是使用 Cosmos 原生代币作为 vault 代币,通过实现 CW20 标准使其合约成为自己的 vault 代币。如果您正在编写一个没有 TokenFactory 模块 可用的链上的 vault,因此无法发行 Cosmos 原生代币作为 vault 代币,这将非常有用。

依赖项

~3.5-5MB
~111K SLoC