26个版本 (12个重大更新)
0.17.1 | 2023年1月26日 |
---|---|
0.16.0 | 2022年12月16日 |
0.15.1 | 2022年9月22日 |
0.13.0 | 2022年7月26日 |
0.8.1 | 2022年3月29日 |
#2290 in 魔法豆
在 2 crate 中使用
195KB
4K SLoC
TG4 Stake
这是 tg4_spec 的第二个实现。它实现了规范的所有要素,包括原始查询查找,并设计为用作符合 tg3 合规合约 的后端存储。
它提供了与 tg4-engagement
(处理选定的成员资格)类似的API,但其成员资格和积分是基于他们抵押的代币数量。这与许多DAO类似。
只能与一个denom绑定,作为进入的最低金额,即 min_bond
,以及 tokens_per_point
,它可以用来标准化积分(例如,如果代币是uatom,并且你希望每个ATOM为1积分,你可以设置 tokens_per_point = 1_000_000
)。
还有一个解绑期(Duration
),它设定了代币冻结多长时间才能释放。这些冻结的代币既不能用于投票,也不能被原始所有者索回。只有在解冻期之后,你才能取回你的代币。这种流动性损失是抵押给此合约的“投入”。
实例化
待办
要创建它,您必须传递一个成员列表,以及可选的 admin
,如果您希望它可变。
pub struct InstantiateMsg {
/// denom of the token to stake
pub stake: String,
pub tokens_per_points: u64,
pub min_bond: Uint128,
pub unbonding_period: Duration,
}
成员由地址和积分定义。这些数据在它们的 CanonicalAddr
下进行转换和存储,格式定义在 tg4 原始查询 中。
注意,0 是一个允许的积分数量。这不会赋予任何投票权,但它定义了这个地址是群组的一部分,这在某些情况下可能是有意义的。
成员的积分将计算为发送的资金(以代币计)除以 tokens_per_points
,然后向下取整到最接近的整数(即使用整数除法)。如果总发送量小于 min_bond
,则赌注将保持不变,但它们将不计为成员。如果 min_bond
大于 tokens_per_points
,则不能有任何积分为零的成员。
消息
大多数消息和查询由 tg4 规范 定义。请参阅它以获取更多信息。
以下消息被添加来处理代币的抵押和赎回
Bond{}
- 将与消息一起发送的所有抵押代币进行抵押,并更新成员积分
Unbond{tokens}
- 开始给定数量代币的赎回过程。发送者将立即从这些代币中失去积分,并在 unbonding_period
之后将其索回。 tokens
是一个结构,格式为 { amount: token_amount, denom: token_denom }
。
Claim{}
- 用于在合约定义的等待期(例如,1 周)后索回先前“解抵押”的本币代币
以及相应的查询
Claims{address}
- 显示此地址正在解抵押过程中的代币
Staked{address}
- 显示此地址当前抵押的代币数量。
依赖项
~4.5–6.5MB
~134K SLoC