#tokens #native #contract #proxy #cw1 #set #subkeys

bin+lib abstract-cw1-subkeys

实现作为 cw1 代理合约授权原生代币的子密钥

6 个版本 (稳定版)

3.0.0 2024 年 7 月 11 日
2.0.1 2024 年 6 月 17 日
2.0.0 2024 年 5 月 1 日
2.0.0-rc2024 年 4 月 25 日
1.2.2 2024 年 1 月 24 日

340魔法豆

Download history 706/week @ 2024-04-16 614/week @ 2024-04-23 952/week @ 2024-04-30 367/week @ 2024-05-07 431/week @ 2024-05-14 624/week @ 2024-05-21 862/week @ 2024-05-28 513/week @ 2024-06-04 1265/week @ 2024-06-11 704/week @ 2024-06-18 620/week @ 2024-06-25 609/week @ 2024-07-02 926/week @ 2024-07-09 770/week @ 2024-07-16 663/week @ 2024-07-23 537/week @ 2024-07-30

3,114 每月下载量
2 个crate中使用(通过 abstract-cw-plus-interfac…

Apache-2.0GPL-3.0-only

135KB
3K SLoC

CW1 子密钥

这个基于 cw1-whitelist 构建,提供了第一个非平凡解决方案。它仍然像 cw1-whitelist 一样,有一组管理员(通常是 1 个)可以完全控制该账户。然而,您可以从该账户授权多个账户发送原生代币。

这个功能在 2019 年夏季为 Cosmos Hub 提出过,类似于 ERC20(允许和转账)的功能。

详细信息

基本上,任何管理员都可以为 (spender, denom) 对(类似于 cw20 IncreaseAllowance / DecreaseAllowance)添加允许。任何非管理员账户都可以尝试从这个合约执行 CosmosMsg::Bank(BankMsg::Send{}),如果他们有所需的允许,他们的允许将会减少,并发送消息中继。如果他们没有足够的授权,或者如果他们尝试代理其他任何消息类型,那么尝试将会被拒绝。管理员可以给子密钥授权以中继特定类型的消息(目前包括 Delegate, Undelegate, Redelegate, Withdraw)。子密钥在创建时没有权限,可以通过 SetupPermission 消息进行设置。

消息

这比 cw1 规范多了2条消息

enum ExecuteMsg {
    IncreaseAllowance {
        spender: HumanAddr,
        denom: String,
        amount: Uint128,
        expires: Option<Expiration>,
    },
    DecreaseAllowance {
        spender: HumanAddr,
        denom: String,
        amount: Uint128,
        expires: Option<Expiration>,
    },
    SetupPermissions {
        spender: HumanAddr,
        permissions: Permissions,
    }
}

查询

它还添加了一个查询类型

enum QueryMsg {
    Allowance {
        spender: HumanAddr,
    },
    AllAllowances {
        start_after: Option<HumanAddr>,
        limit: Option<u32>,
    },
}

pub struct AllowanceInfo {
    pub spender: HumanAddr,
    pub balance: Balance,
    pub expires: Expiration,
    pub permissions: Permissions,
}

pub struct AllAllowancesResponse {
    pub allowances: Vec<AllowanceInfo>,
}

运行此合约

您需要安装 Rust 1.44.1+ 并具有 wasm32-unknown-unknown 目标。

您可以通过以下方式对此进行单元测试

cargo测试

一旦您对内容满意,您可以通过以下方式将其编译为 wasm

RUSTFLAGS='-C link-arg=-s' cargo wasm
cp ../../target/wasm32-unknown-unknown/release/cw1_subkeys.wasm .
ls -l cw1_subkeys.wasm
sha256sum cw1_subkeys.wasm

或者,对于生产就绪(优化)的构建,在仓库根目录中运行构建命令: https://github.com/CosmWasm/cw-plus#compiling

依赖项

~5–17MB
~190K SLoC