#gas #cosmwasm #meter #kv #store #estimating #key-value-store

cw-storage-gas-meter

一个简单的CosmWasm存储气表,用于估算从kv存储中的气使用量。

1 个稳定版本

1.0.0 2022年7月28日

#6 in #estimating

GPL-3.0-or-later

11KB
218

简单的存储气表

一个简单的CosmWasm存储气表,用于估算从kv存储中的气使用量。

使用方法

单元测试

使用MemoryStorageWithGas代替MemoryStorageMockStorage

// let mut storage = MockStorage::new();
let mut storage = MemoryStorageWithGas::new();
let map = Map::<u64, Vec<u8>>::new("0");

let data = b"hello";
map.save(&mut storage, 0, &data.to_vec())?;

let gas = storage.last_gas_used();
assert_eq!(gas, 2960);

多测试

使用cw_multi_test::App代替MemoryStorageMockStorage

由于cosmwasm_std::Storage特质的性质,我们不能直接将dyn Storage向下转换为MemoryStorage

因此,我们通过指针将存储作为特质对象传递,并通过该指针访问气日志。

let storage = MemoryStorageWithGas::new();

AppBuilder::new()
    .with_storage(&storage) // <- ref ptr here
    .build(|r, _, storage| {
        r.bank
            .init_balance(
                storage,
                &Addr::unchecked("admin"),
                vec![Coin::new(100, "uluna")],
            )
            .unwrap();
    });

let gas = storage.last_gas_used();
assert_eq!(gas, 3650);

依赖关系

~4.5–6MB
~130K SLoC