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