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 神奇豆
272 每月下载量
在 3 个 crate 中使用 (2 个直接使用)
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
:需要此功能的range
、prefix
和clear
函数。 -
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