#cosmwasm #cosmos #set #items #store #smart-contracts #contract

cw-item-set

智能合约存储的非重复项目集合

9 个版本 (1 个稳定版)

2.0.0 2024年8月12日
0.7.1 2023年2月28日
0.7.0 2022年12月6日
0.6.0 2022年10月29日

#502 in 神奇豆

Download history 30/week @ 2024-04-27 26/week @ 2024-05-04 27/week @ 2024-05-11 10/week @ 2024-05-18 2/week @ 2024-05-25 12/week @ 2024-06-01 6/week @ 2024-06-08 15/week @ 2024-06-15 16/week @ 2024-06-22 1/week @ 2024-06-29 11/week @ 2024-07-13 3/week @ 2024-07-20 45/week @ 2024-07-27 53/week @ 2024-08-03 169/week @ 2024-08-10

272 每月下载量
3 个 crate 中使用 (2 个直接使用)

Apache-2.0

17KB
272

CW Item Set

CosmWasm 智能合约存储的非重复项目集合。

使用方法

在这个示例中,我们创建了一个用户白名单。这可能适用于例如 NFT 发行白名单。

use cosmwasm_std::{DepsMut, Order, StdResult};
use cw_item_set::Set;

// "whitelist": namespace under which the items are to be stored
// "whitelist__counter": key for storing the total number of items in the set
const WHITELIST: Set<&str> = Set::new("whitelist", "whitelist__counter");

fn example(deps: DepsMut) -> StdResult<()> {
    // Add a new user to the whitelist
    WHITELIST.insert(deps.storage, "larry")?;

    // Remove a user from the whitelist
    // Note that we don't check whether the user already exists in the whitelist.
    // Attempting to remove a non-existent user won't result in error.
    WHITELIST.remove(deps.storage, "jake")?;

    // Check whether a user is in the whitelist
    let is_whitelisted = WHITELIST.contains(deps.as_ref().storage, "pumpkin");

    // Check the total number of users in the whitelist
    let num_users = WHITELIST.count(deps.as_ref().storage)?;

    // Enumerate all users in the whitelist
    for res in WHITELIST.items(deps.as_ref().storage, None, None, Order::Ascending) {
        let user = res?;
        println!("{} is whitelisted!", user);
    }

    // Delete all users in the whitelist
    WHITELIST.clear(deps.storage);

    Ok(())
}

功能

有两种可选功能,默认都启用

  • iterator:需要此功能的 rangeprefixclear 函数。

  • counter:需要此功能的 count 函数。如果启用,将创建一个 Item<u64> 来存储集合中的项目总数。在这种情况下,声明集合时需要提供一个计数器的存储键。

    // `counter` feature ENABLED
    
    // The `new` function takes two parameters, the namespace for the set, and the
    // key for the counter.
    const WHITELIST: Set<&str> = Set::new("whitelist", "whitelist__counter");
    
    // Use the `count` function to get the total number of items in the set.
    let num_users = WHITELIST.count(deps.storage)?;
    

    如果不需要计算集合中项目的总数,建议禁用此功能,这样可以节省燃气,因为不需要在每次添加或删除项目时更新计数器。

    在这种情况下,创建集合时不再需要存储键参数。

    // `counter` feature DISABLED
    
    // Only the set namespace is required
    const WHITELIST: Set<&str> = Set::new("whitelist");
    
    // This won't compile: `count` function is not supported
    let num_users = WHITELIST.count(deps.storage)?; // ERROR!
    

许可证

本仓库在或早于版本 0.7.0 的内容遵循 GNU Affero General Public License v3 或更高版本发布;该版本之后的内容遵循 Apache-2.0 许可协议发布。

依赖项

~4–7MB
~149K SLoC