8 个重大版本发布
| 0.9.0 | 2023 年 7 月 8 日 |
|---|---|
| 0.7.0 | 2021 年 11 月 5 日 |
#758 in 魔法豆
80,890 每月下载量
在 18 个crate中使用(通过 snowbridge-beacon-primiti…)
475KB
3K SLoC
ssz_rs ✂️️
共识-specs 仓库中定义的 SSZ 序列化方案的实现。
本仓库旨在保持轻量级和相对独立,而不是与其他以太坊共识代码/依赖项耦合。
🚧 警告 🚧
此实现 未 经过安全审计,主要用于研发用例。
如果您需要一个经过实战考验的实现(例如,用于共识关键工作),请参阅 Lighthouse 实现。
功能
为了符合 SSZ 规范,给定的 Rust 类型应实现 SimpleSerialize 特性。实现此特性的类型将获得
编码/解码
此库提供了通过 Serialize 和 Deserialize 特性将 Rust 类型序列化和反序列化为相应 SSZ 数据的例程。
梅克尔化
此库为实现 Merkleized 的类型提供了 哈希树根 计算功能。
- 注意:可能存在更复杂的哈希策略,用户可能会遇到当前实现中内存或性能问题。
多重证据
本库提供了对给定SSZ定义的通用索引进行推理的能力,以及在这些索引处生成和验证数据证明的能力,具体参见通用索引。
- 注意:仍在建设中
no-std功能
此库与no-std兼容。若要在不使用标准库的情况下构建,请禁用crate的默认功能。
例如,在Cargo.toml
ssz_rs = { version = "...", default-features = false }
自定义类型
在实现SSZ类型时,本库尽量以最简化的方式提供原生Rust类型的接口。例如,uint64类型由Rust的原生u64类型表示。
此外,该库还提供了符合SSZ规范的List、Vector、Bitlist和Bitvector的自定义类型。这些自定义类型的行为大致类似于Rust的Vec类型。一个显著的例外是,迭代底层类型的迭代能力;例如,要迭代一个List,您必须显式调用.iter()。
出于安全考虑,构造这些自定义类型的实例方法只有几种
-
默认::default -
TryFrom::try_from -
ssz_rs::Deserialize
此外,ssz_rs_derive包提供宏,用于为SSZ容器和联合(分别表示为Rust的struct和enum)推导编码和解码例程。
示例
有关本库功能示例用法,请参阅examples。
测试
此仓库包含ssz_rs包的集成测试副本,包括ssz_generic共识规范测试以及手写的单元测试。集成测试是通过ssz-rs-test-gen包下的实用工具生成的。有关更多详细信息,请参阅该处的README。
依赖项
~3.5MB
~85K SLoC