#admin #reward #contract #group #queries #points #membership

tg4-engagement

由管理员控制的群组成员资格的简单 TG4 实现

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 日

#1717 in 神奇豆

26 次每月下载
5 crates 中使用

Apache-2.0

195KB
4K SLoC

TG4 群组

这是 tg4 规范 的基本实现。它实现了规范的所有要素,包括原始查询查找,并设计为用作 符合 tg3 规范的合约 的后端存储。

它存储一组成员以及一个管理员,并允许管理员更新状态。原始查询(用于跨合约查询)可以检查特定的成员地址和总积分。智能查询(设计用于客户端 API)可以执行相同的操作,还可以查询管理员地址以及分页浏览所有成员。

此外,此合约提供了类似 EIP2222 标准的行为 API,允许按成员积分比例自动分割发送到此合约的奖励。

初始化

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

pub struct InstantiateMsg {
    pub admin: Option<HumanAddr>,
    pub members: Vec<Member>,
    pub preauths: Option<u64>,
    pub halflife: Option<Duration>,
    pub token: Option<String>,
}

pub struct Member {
    pub addr: HumanAddr,
    pub points: u64,
}

成员由地址和积分定义。这被转换并存储在他们的 Addr 下,格式在 tg4 原始查询 中定义。

注意,0 是允许的积分数量。这不会赋予任何投票权,但它定义了这个地址是群体的一部分。这可以用于例如 KYC 白名单,表示他们被允许,但不能参与决策。

token 是一个本地代币名称,它可能通过类似 EIP2222 的接口分发。如果它是 None,则此合约可能无法分配任何奖励。

消息

基本更新消息、查询和钩子由 tg4 规范 定义。请参阅它以获取更多信息。

tg4-engagement 为控制群组成员添加了一个消息

UpdateMembers {add, remove} - 接收成员差异并添加/更新成员,以及删除提供的任何地址。如果地址在两个列表中,则会被删除。如果它在 add 中多次出现,则只使用最后一次出现。

AddHook {addr} - 添加一个新钩子以通知所有成员变更。必须由管理员调用。

RemoveHook {addr} - 删除钩子。必须由管理员调用。

DistributeFunds {sender} - 分发随此消息发送的资金,以及自上次 DistributeFunds 以来通过常规银行消息发送的资金。 sender 是可选信息,覆盖生成的活动上 sender 字段。资金按成员的积分比例分配给成员。资金不会直接发送给成员,而是分配给未来的提款。

WithdrawFunds {receiver} - 提取在资金分配期间分配给消息发送者的先前资金。可选的 receiver 字段是一个地址,其中资金应该被发送,默认为消息发送者。

DelegateWithdrawal{delegated} - 将 delegated 地址设置为允许提取分配给 sender 的资金。任何地址只能委托一个地址,因此委托新地址会覆盖以前的地址。要禁止任何地址提取资金,请发送带有 delegated 发送到 senderDelegateWithdrawal

查询

Hooks {} - 返回所有注册的钩子。

Preauths {} - 返回当前的预认证数量。

WithdrawableRewards {owner} - 返回所有者分配的可以提取的奖励数量。

DistributedRewards {} - 返回此合约在其生命周期内分配的奖励数量。

UndistributedRewards {} - 返回此合约等待分配的奖励数量。

Delegated {owner} - 返回允许提取分配给给定 owner 的资金的地址。如果没有设置,则返回 owner

依赖项

~4–5.5MB
~121K SLoC