55 个版本 (6 个稳定版)

2.0.0 2024 年 3 月 26 日
1.1.2 2023 年 11 月 23 日
1.1.0 2023 年 6 月 20 日
1.0.1 2022 年 12 月 19 日
0.3.1 2020 年 10 月 16 日

#1331魔法豆

Download history 40/week @ 2024-04-01

2,006 每月下载量
2 crate 中使用

Apache-2.0

125KB
2.5K 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

依赖关系

~4–7.5MB
~152K SLoC