#weight #role #contract #nft #dao #voting #on-chain

cw721-roles

不可转让的CW721 NFT合约,包含投票权重和链上角色

4个稳定版本

2.4.2 2024年7月22日
2.4.0 2024年7月21日
2.3.0 2023年10月18日

#53 in 神奇豆

Download history 75/week @ 2024-07-15 318/week @ 2024-07-22 43/week @ 2024-07-29

每月436次下载
用于 2 个包(通过 dao-testing

BSD-3-Clause

45KB
942

cw721-roles

这是一个为DAO使用而设计的不可转让NFT合约。cw721-roles 允许每个NFT与其关联一个 weight,并实现了 cw4-group 合约(感谢 Confio 对此所做的贡献)的大部分功能。

当合约创建时,此合约的所有方法都只能通过可配置的 minter 调用。它主要用于与DAO一起使用。

已覆盖从默认的 cw721-base 版本继承的 mintburnsendtransfer 方法,但它们大致相同,需要注意的是它们只能通过 minter 调用。不支持与批准相关的方法。

扩展

cw721-roles 包含以下扩展

令牌元数据已扩展,增加了权重以及可选的人读链角色,这些角色可用于独立合同以执行额外权限。

pub struct MetadataExt {
    /// Optional on-chain role for this member, can be used by other contracts to enforce permissions
    pub role: Option<String>,
    /// The voting weight of this role
    pub weight: u64,
}

该合同有一个额外的执行扩展,包括添加和删除成员变更事件钩子,以及更新特定令牌的 token_uriweightrole。所有这些操作都只能由配置的 minter 执行。

pub enum ExecuteExt {
    /// Add a new hook to be informed of all membership changes.
    /// Must be called by Admin
    AddHook { addr: String },
    /// Remove a hook. Must be called by Admin
    RemoveHook { addr: String },
    /// Update the token_uri for a particular NFT. Must be called by minter / admin
    UpdateTokenUri {
        token_id: String,
        token_uri: Option<String>,
    },
    /// Updates the voting weight of a token. Must be called by minter / admin
    UpdateTokenWeight { token_id: String, weight: u64 },
    /// Udates the role of a token. Must be called by minter / admin
    UpdateTokenRole {
        token_id: String,
        role: Option<String>,
    },
}

查询扩展实现了与之前提到的 cw4-group 合同 兼容的查询。

pub enum QueryExt {
    /// Total weight at a given height
    #[returns(cw4::TotalWeightResponse)]
    TotalWeight { at_height: Option<u64> },
    /// Returns the weight of a certain member
    #[returns(cw4::MemberResponse)]
    Member {
        addr: String,
        at_height: Option<u64>,
    },
    /// Shows all registered hooks.
    #[returns(cw_controllers::HooksResponse)]
    Hooks {},
}

依赖

~4–6MB
~129K SLoC