8 releases (unstable)

1.0.0-beta.0 Jan 16, 2023
0.8.0 Aug 23, 2024
0.7.0 Aug 20, 2024
0.6.0 Dec 7, 2023
0.5.0 Jan 17, 2023

#4 in #ssz

Download history 2413/week @ 2024-08-03 2089/week @ 2024-08-10 2846/week @ 2024-08-17 2657/week @ 2024-08-24 2686/week @ 2024-08-31 4103/week @ 2024-09-07 4247/week @ 2024-09-14 4245/week @ 2024-09-21 3138/week @ 2024-09-28 3405/week @ 2024-10-05 4345/week @ 2024-10-12 3626/week @ 2024-10-19 4538/week @ 2024-10-26 2049/week @ 2024-11-02 1248/week @ 2024-11-09 1973/week @ 2024-11-16

10,302 downloads per month
Used in 3 crates

Apache-2.0

92KB
2K SLoC

ssz_types

List, vector and bitfield types for SSZ.

Maintained by Sigma Prime for use in Lighthouse, with an eye to being useful in the Rust Ethereum ecosystem more broadly. We welcome new contributors!

Please see the docs for more information.


lib.rs:

Provides types with unique properties required for SSZ serialization and Merklization:

  • FixedVector: A heap-allocated list with a size that is fixed at compile time.
  • VariableList: A heap-allocated list that cannot grow past a type-level maximum length.
  • BitList: A heap-allocated bitfield that with a type-level maximum length.
  • BitVector: A heap-allocated bitfield that with a type-level fixed_ length.

These structs are required as SSZ serialization and Merklization rely upon type-level lengths for padding and verification.

Adheres to the Ethereum 2.0 SSZ specification at v0.12.1.

Example

use ssz_types::*;

pub struct Example {
    bit_vector: BitVector<typenum::U8>,
    bit_list: BitList<typenum::U8>,
    variable_list: VariableList<u64, typenum::U8>,
    fixed_vector: FixedVector<u64, typenum::U8>,
}

let mut example = Example {
    bit_vector: Bitfield::new(),
    bit_list: Bitfield::with_capacity(4).unwrap(),
    variable_list: <_>::from(vec![0, 1]),
    fixed_vector: <_>::from(vec![2, 3]),
};

assert_eq!(example.bit_vector.len(), 8);
assert_eq!(example.bit_list.len(), 4);
assert_eq!(&example.variable_list[..], &[0, 1]);
assert_eq!(&example.fixed_vector[..], &[2, 3, 0, 0, 0, 0, 0, 0]);

Dependencies

~16MB
~379K SLoC