#length #fixed-length #required #bit-fields #ssz #serialization #bit-vector

eth2_ssz_types

提供SSZ序列化和Merklization所需具有独特属性的类型

3个不稳定版本

0.2.1 2021年11月23日
0.2.0 2021年8月24日
0.1.0 2021年7月29日

1599Rust模式 中排名

Download history 26/week @ 2024-03-24 93/week @ 2024-03-31 952/week @ 2024-04-07 940/week @ 2024-04-14 518/week @ 2024-04-21 81/week @ 2024-04-28 163/week @ 2024-05-05 384/week @ 2024-05-12 858/week @ 2024-05-19 1383/week @ 2024-05-26 519/week @ 2024-06-02 4578/week @ 2024-06-09 1779/week @ 2024-06-16 608/week @ 2024-06-23 866/week @ 2024-06-30 722/week @ 2024-07-07

每月下载量 4,249
用于 2 crates

Apache-2.0

85KB
2K SLoC

提供SSZ序列化和Merklization所需具有独特属性的类型

  • FixedVector: 编译时大小固定的堆分配列表。
  • VariableList: 无法超过类型级别最大长度的堆分配列表。
  • BitList: 具有类型级别 最大 长度的堆分配位字段。
  • BitVector: 具有类型级别 固定 长度的堆分配位字段。

这些结构体是必需的,因为SSZ序列化和Merklization依赖于类型级别的长度来进行填充和验证。

遵循Ethereum 2.0 v0.12.1的SSZ规范

示例

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]);

依赖项

~6.5–9MB
~263K SLoC