5个稳定版本

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

#5 in #past

Download history 4/week @ 2024-04-28 7/week @ 2024-05-05 4/week @ 2024-05-12 7/week @ 2024-05-19 1/week @ 2024-05-26 8/week @ 2024-06-02 11/week @ 2024-06-09 4/week @ 2024-06-16 12/week @ 2024-06-23 2/week @ 2024-06-30 34/week @ 2024-07-07 77/week @ 2024-07-14 415/week @ 2024-07-21 114/week @ 2024-07-28 125/week @ 2024-08-04 261/week @ 2024-08-11

918 每月下载量
用于 5 个crate(直接使用2个)

BSD-3-Clause

16KB
170

🌀⏱️ CW Wormhole ⏱️🌀

一个允许从过去设置值的CosmWasm键值存储。例如

use cosmwasm_std::{testing::mock_dependencies, Uint128, Addr};
use cw_wormhole::Wormhole;
let storage = &mut mock_dependencies().storage;
let w: Wormhole<Addr, Uint128> = Wormhole::new("ns");
let key = Addr::unchecked("violet");

// increment the value by one at time 10.
w.increment(storage, key.clone(), 10, Uint128::new(1))
    .unwrap();

// increment the value by two at time 9.
w.increment(storage, key.clone(), 9, Uint128::new(2))
    .unwrap();

// the value at time 10 is now three.
assert_eq!(
    w.load(storage, key, 10).unwrap(),
    Some(Uint128::new(3))
);

从映射中加载数值总是常数时间。在映射中更新数值是 O(#未来值)。这会将增加未来值的复杂性移动到当前。

有关此数据结构运行时间的更深入分析,请参阅这篇论文

限制

不能使用引用类型作为键。

考虑以下特质的约束

    for<'a> &'a (K, u64): PrimaryKey<'a>

这个约束意味着对于任何生命周期 'a,对元组 (K, u64) 的引用将是一个有效的 PrimaryKey,生命周期为 'a,因此我们可以在映射中存储此类型的元组。

为了允许 K 有一个生命周期(称为 'k),我们需要编写

    for<'a where 'a: 'k> &'a (K, u64): PrimaryKey<'a>

由于主键的生命周期是 'a' + 'k'(键的生命周期和元组生命周期的最小值)。

不幸的是,Rust 不支持这一点。有一个关于实现它的 RFC 在这里

依赖关系

~4–6MB
~122K SLoC