8 个重大版本发布

0.9.0 2023 年 7 月 8 日
0.7.0 2021 年 11 月 5 日

#758 in 魔法豆

Download history 20765/week @ 2024-03-14 26309/week @ 2024-03-21 27288/week @ 2024-03-28 32080/week @ 2024-04-04 28745/week @ 2024-04-11 25783/week @ 2024-04-18 20315/week @ 2024-04-25 19531/week @ 2024-05-02 19073/week @ 2024-05-09 18757/week @ 2024-05-16 29917/week @ 2024-05-23 25533/week @ 2024-05-30 18062/week @ 2024-06-06 21097/week @ 2024-06-13 22003/week @ 2024-06-20 15609/week @ 2024-06-27

80,890 每月下载量
18 个crate中使用(通过 snowbridge-beacon-primiti…

MIT/Apache

475KB
3K SLoC

ssz_rs ✂️️

build crates.io docs.rs codecov

共识-specs 仓库中定义的 SSZ 序列化方案的实现。

本仓库旨在保持轻量级和相对独立,而不是与其他以太坊共识代码/依赖项耦合。

🚧 警告 🚧

此实现 经过安全审计,主要用于研发用例。

如果您需要一个经过实战考验的实现(例如,用于共识关键工作),请参阅 Lighthouse 实现

功能

为了符合 SSZ 规范,给定的 Rust 类型应实现 SimpleSerialize 特性。实现此特性的类型将获得

编码/解码

此库提供了通过 SerializeDeserialize 特性将 Rust 类型序列化和反序列化为相应 SSZ 数据的例程。

梅克尔化

此库为实现 Merkleized 的类型提供了 哈希树根 计算功能。

  • 注意:可能存在更复杂的哈希策略,用户可能会遇到当前实现中内存或性能问题。

多重证据

本库提供了对给定SSZ定义的通用索引进行推理的能力,以及在这些索引处生成和验证数据证明的能力,具体参见通用索引

  • 注意:仍在建设中

no-std功能

此库与no-std兼容。若要在不使用标准库的情况下构建,请禁用crate的默认功能。

例如,在Cargo.toml

ssz_rs = { version = "...", default-features = false }

自定义类型

在实现SSZ类型时,本库尽量以最简化的方式提供原生Rust类型的接口。例如,uint64类型由Rust的原生u64类型表示。

此外,该库还提供了符合SSZ规范的ListVectorBitlistBitvector的自定义类型。这些自定义类型的行为大致类似于Rust的Vec类型。一个显著的例外是,迭代底层类型的迭代能力;例如,要迭代一个List,您必须显式调用.iter()

出于安全考虑,构造这些自定义类型的实例方法只有几种

  • 默认::default

  • TryFrom::try_from

  • ssz_rs::Deserialize

此外,ssz_rs_derive包提供宏,用于为SSZ容器和联合(分别表示为Rust的structenum)推导编码和解码例程。

示例

有关本库功能示例用法,请参阅examples

测试

此仓库包含ssz_rs包的集成测试副本,包括ssz_generic共识规范测试以及手写的单元测试。集成测试是通过ssz-rs-test-gen包下的实用工具生成的。有关更多详细信息,请参阅该处的README。

依赖项

~3.5MB
~85K SLoC