18 个版本
0.1.0-rc.7 | 2024 年 6 月 10 日 |
---|---|
0.1.0-rc.6 | 2023 年 10 月 24 日 |
0.1.0-rc.5 | 2023 年 9 月 25 日 |
0.1.0-rc.0 | 2023 年 7 月 27 日 |
0.1.0-pre.2 | 2022 年 12 月 28 日 |
#818 in 神奇豆子
每月下载量 160
在 6 个包中(直接使用 4 个)
1.5MB
31K SLoC
Everscale 类型
状态:WIP
关于
一组用于 EverScale 区块链的原生类型和工具。
深受 ton-labs-types
的启发,但更加注重速度。
基本用法
从字节的 Vec<u8>
表示形式获取 Cell
use everscale_types::boc::Boc;
let cell: Cell = Boc::decode(bytes)?;
将任何模型(例如 MerkleProof
)编码为 base64
BOC 表示形式,反之亦然
use everscale_types::boc::BocRepr;
let cell = MerkleProof::create_for_cell(cell.as_ref(), EMPTY_CELL_HASH)
.build()
.unwrap();
let encoded = BocRepr::encode_base64(&cell).unwrap();
let decoded = Boc::decode_base64(encoded)?.as_ref().parse::<MerkleProof>()?:
从 Cell
获取特定的 EverScale 类型
use everscale_types::models::BlockProof;
let proof: BlockProof = cell.parse::<BlockProof>()?;
虚拟化单元的用法相同
use everscale_types::prelude::DynCell;
use everscale_types::models::Block;
let virt_cell: &DynCell = cell.virtualize();
let block = virt_cell.parse::<Block>()?;
您还可以使用 CellBuilder
创建任何 Cell
let mut builder = CellBuilder::new();
builder.store_bit_one()?;
builder.store_u32(100u32)?
builder.store_slice(slice)?;
builder.store_raw(&[0xdd, 0x55], 10)?;
// store references to another cells
builder.store_reference(cell)?;
builder.store_reference(another_cell)?;
let final_cell = builder.build()?;
开发
如何进行基准测试
cargo bench boc
cargo bench dict
如何进行 miri 检查
# Add Miri component
rustup +nightly component add miri
# Run all tests with Miri
cargo +nightly miri test
如何进行模糊测试
# Install fuzzer
cargo install cargo-fuzz
# Run any of the fuzzer targets
cargo +nightly fuzz run boc_decode -j 12
cargo +nightly fuzz run boc_decode_encode -j 12
cargo +nightly fuzz run boc_decode_pair -j 12
cargo +nightly fuzz run boc_dict -j 12
cargo +nightly fuzz run boc_message -j 12
贡献
我们欢迎对该项目的贡献!如果您发现任何问题或错误,请随时提交问题或发送拉取请求。
许可协议
许可协议为以下之一
- Apache License 2.0(《LICENSE-APACHE》或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可协议(《LICENSE-MIT》或https://opensource.org/licenses/MIT)
由您选择。
依赖项
~1.8–9MB
~78K SLoC