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
918 每月下载量
用于 5 个crate(直接使用2个)
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