47 个版本 (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.4.0 2020年12月22日

#1081 in 魔法豆

Download history 6/week @ 2024-05-27 12/week @ 2024-06-10 70/week @ 2024-07-01 233/week @ 2024-07-29

每月下载量 233

Apache-2.0

97KB
1.5K SLoC

CW4 Stake

这是 cw4 规范的第二个实现。它满足了规范的所有要素,包括原始查询查找,并设计为用作符合 cw3 规范的合约的后备存储。

它提供了一个类似于 cw4-group (处理选举成员) 的 API,但它不是通过管理员或多重签名指定成员,而是根据他们质押的代币数量来确定其成员资格和权重。这类似于许多 DAO。

只能使用一个代币类型进行质押,最小质押金额由 min_bond 指定,以及 tokens_per_weight,它可以用来标准化权重(例如,如果代币是 uatom,你希望每个 ATOM 有 1 个权重,你可以设置 tokens_per_weight = 1_000_000)。

还存在一个解绑期(Duration),它设定了代币在解冻前需要冻结多长时间。这些冻结的代币既不能用于投票,也不能被原始所有者索回。只有在解冻期结束后,您才能取回您的代币。这种流动性损失是质押为此合约提供的“游戏中的皮肤”。

实例化

待办事项

要创建它,您必须传递一个成员列表,以及可选的admin,如果您希望它可变。

pub struct InstantiateMsg {
    /// denom of the token to stake
    pub stake: String,
    pub tokens_per_weight: u64,
    pub min_bond: Uint128,
    pub unbonding_period: Duration,
}

成员由地址和权重定义。这些信息在他们的CanonicalAddr下进行转换和存储,格式定义在cw4原始查询中。

请注意,0 是一个允许的权重。这不会赋予任何投票权,但它定义了这个地址是组成员之一,这在某些情况下可能是有意义的。

成员的权重将计算为它们发送的资金(以代币计)除以tokens_per_weight,向下取整到最接近的整数(即使用整数除法)。如果发送的总数小于min_bond,则质押将保持,但它们不会被视为成员。如果min_bond大于tokens_per_weight,则无法有任何0权重的成员。

消息

大多数消息和查询都由cw4规范定义。请参阅它以获取更多信息。

以下消息已添加以处理质押/解绑代币

Bond{} - 将与消息一起发送的所有质押代币进行质押,并更新成员权重

Unbond{tokens} - 开始解绑给定数量的代币的过程。发送者立即失去这些代币的权重,并在unbonding_period后将其索回自己的钱包

Claim{} - 用于在合约定义的等待期(例如1周)后索回之前“解绑”的本地代币

以及相应的查询

Claims{address} - 显示此地址正在解绑过程中的代币

Staked{address} - 显示此地址当前质押的代币数量。

依赖关系

~4–7.5MB
~154K SLoC