#length #fixed-length #bit-fields #ssz #bit-vector #heap-allocated #type

已删除 sean_test_eth2_ssz_types

Eth2 ssz 类型

0.2.0 2021年7月16日

#16 in #ssz

Apache-2.0

86KB
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
~264K SLoC