MIT license Crates Docs

Bitcoin slices

ZERO allocations parse library for Bitcoin data structures.

Data is accessed by providing visitor structs for the data the user is interested in.

Data structures are read-only and parsed data must be in memory, no streaming API.

Tradeoffs

Check the CONS before using this library, use rust-bitcoin if they are too restrictive for your case.

Pros

Cons

Test

sh cargo test

Bench

sh RUSTFLAGS='--cfg=bench' cargo +nightly bench --all-features

sh test bsl::block::bench::block_deserialize ... bench: 344,768 ns/iter (+/- 683) test bsl::block::bench::block_deserialize_bitcoin ... bench: 1,565,341 ns/iter (+/- 174,542) test bsl::block::bench::block_sum_outputs ... bench: 347,763 ns/iter (+/- 2,027) test bsl::block::bench::block_sum_outputs_bitcoin ... bench: 1,469,288 ns/iter (+/- 143,139) test bsl::block::bench::hash_block_txs ... bench: 4,443,346 ns/iter (+/- 88,908) test bsl::block::bench::hash_block_txs_bitcoin ... bench: 6,303,477 ns/iter (+/- 45,197) test bsl::block::bench::hash_block_txs_sha2 ... bench: 1,012,167 ns/iter (+/- 1,492) test bsl::block_header::bench::block_hash ... bench: 734 ns/iter (+/- 4) test bsl::block_header::bench::block_hash_bitcoin ... bench: 800 ns/iter (+/- 6) test bsl::transaction::bench::tx_deserialize ... bench: 58 ns/iter (+/- 1) test bsl::transaction::bench::tx_deserialize_bitcoin ... bench: 139 ns/iter (+/- 2) test bsl::transaction::bench::txid ... bench: 1,223 ns/iter (+/- 1) test bsl::transaction::bench::txid_bitcoin ... bench: 1,358 ns/iter (+/- 8) test bsl::transaction::bench::txid_sha2 ... bench: 196 ns/iter (+/- 0)

Fuzz

Use cargo fuzz Run fuzzing with transaction as target.

sh cargo +nightly fuzz run transaction

Other target available in fuzz/fuzz_targets

Miniminze corpus: cargo +nightly fuzz cmin transaction

Previous work and credits

TODO