#primitive #utilities #everscale #blockchain #type #status #ton-labs-types

everscale-types

A set of primitive types and utilities for the Everscale blockchain

18 releases

0.1.0-rc.7 Jun 10, 2024
0.1.0-rc.6 Oct 24, 2023
0.1.0-rc.5 Sep 25, 2023
0.1.0-rc.0 Jul 27, 2023
0.1.0-pre.2 Dec 28, 2022

#806 in Magic Beans

Download history 54/week @ 2024-02-26 38/week @ 2024-03-04 30/week @ 2024-03-11 34/week @ 2024-03-18 29/week @ 2024-03-25 85/week @ 2024-04-01 38/week @ 2024-04-08 17/week @ 2024-04-15 18/week @ 2024-04-22 18/week @ 2024-04-29 20/week @ 2024-05-06 16/week @ 2024-05-13 20/week @ 2024-05-20 13/week @ 2024-05-27 15/week @ 2024-06-03 153/week @ 2024-06-10

204 downloads per month
Used in 6 crates (4 directly)

MIT/Apache

1.5MB
31K SLoC

Logo

Everscale types   crates-io-batch docs-badge rust-version-badge workflow-badge

Status: WIP

About

A set of primitive types and utilities for the Everscale blockchain.

Heavily inspired by ton-labs-types, but with much more emphasis on speed.

Basic usage

Get Cell from Vec<u8> representation of bytes

use everscale_types::boc::Boc;

let cell: Cell = Boc::decode(bytes)?;

Encode any model e.g.MerkleProof to base64 BOC representation and vice versa

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>()?:

Get specific everscale type from Cell

use everscale_types::models::BlockProof;

let proof: BlockProof = cell.parse::<BlockProof>()?;

Same usage for virtualized cell

use everscale_types::prelude::DynCell;
use everscale_types::models::Block;

let virt_cell: &DynCell = cell.virtualize();
let block = virt_cell.parse::<Block>()?;

You can also use CellBuilder to create any 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()?;

Development

How to bench

cargo bench boc
cargo bench dict

How to miri check

# Add Miri component
rustup +nightly component add miri

# Run all tests with Miri
cargo +nightly miri test

How to fuzz

# 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

Contributing

We welcome contributions to the project! If you notice any issues or errors, feel free to open an issue or submit a pull request.

License

Licensed under either of

at your option.

Dependencies

~1.9–9MB
~78K SLoC