#protobuf #serialization #serde #gadt #binary-encoding #byte-string #strict-types

strict_encoding

严格的编码:为严格类型提供的确定性和受限的二进制序列化

93 个版本 (55 个稳定版)

2.7.0-rc.12024 年 8 月 10 日
2.7.0-beta.42024 年 5 月 24 日
2.7.0-beta.32024 年 4 月 18 日
2.7.0-beta.12024 年 2 月 15 日
0.8.1 2022 年 7 月 9 日

#938 in 魔法豆

Download history 869/week @ 2024-05-05 301/week @ 2024-05-12 895/week @ 2024-05-19 633/week @ 2024-05-26 1072/week @ 2024-06-02 478/week @ 2024-06-09 1036/week @ 2024-06-16 974/week @ 2024-06-23 1045/week @ 2024-06-30 778/week @ 2024-07-07 1528/week @ 2024-07-14 777/week @ 2024-07-21 1837/week @ 2024-07-28 1034/week @ 2024-08-04 1616/week @ 2024-08-11 2005/week @ 2024-08-18

每月下载量 6,675
92crate(直接使用66个)中

Apache-2.0

170KB
4.5K SLoC

严格的编码库

Build Tests Lints codecov

crates.io Docs Apache-2 licensed

客户端验证的确定性二进制序列化。

此库实现了由 LNPBP-7 定义的 严格的编码 标准。严格的编码是一种广泛用于客户端验证的二进制保守编码,用于已知内部数据结构的确定性和可移植(平台无关)的数据序列化。严格的编码是一种无模式的编码。

作为严格编码的一部分,该crate还包括网络地址 统一编码 标准(LNPBP-42)的实现,该标准允许将任何类型的网络地址表示为占用 37 字节的固定大小的字节字符串。此标准用于网络地址的严格编码。

客户端验证是一种分布式计算范式,基于证明发布/承诺介质层,这可能是比特币区块链或其他类型的分布式共识系统。

该库的开发得到了 LNP/BP 标准协会 的支持。

该库的设计借鉴了 Peter Todd 的客户端验证数据证明和序列化原则以及 Dr Maxim Orlovsky 的通用网络编码理念。这两者都被塑造成了标准,并由 Dr Maxim Orlovsky 作为此库的一部分实现。

文档

本库的详细开发者文档和API文档可在以下网址访问:https://docs.rs/strict_encoding/

要了解由本库支持的技术,请查看我们的技术演示幻灯片:技术演示幻灯片LNP/BP 技术讲座视频

使用方法

要使用本库,您只需在项目的 Cargo.toml 文件中的 [dependencies] 部分引用最新版本即可。

strict_encoding = "2.5"

如果您正在使用其他客户端验证库,请考虑仅导入一个重导出所有库的单一 client_side_validation 库,包括当前库。

本库定义了两个主要特质,分别为 StrictEncodeStrictDecode,这些特质应在需要客户端验证表示的每个类型上实现。

本库导出派生宏 #[derive(StrictEncode, StrictDecode)],这是 strict_encoding_derive 子库的一部分,并由默认功能 derive 控制。最后,它实现了由 Rust 标准库和常用 crate 定义的常用数据类型的严格编码特质;后者增加了依赖项的数量,因此可以通过功能标志进行控制

  • chrono(默认使用):来自 chrono crate 的日期和时间类型
  • miniscript:比特币 Miniscript 中定义的类型
  • crypto:非比特币加密原语,包括来自 ed25519-dalek 库的 Ed25519 曲线和 X25519 签名,以及来自 grin_secp256k1zkp 库的 pedersen 承诺和 bulletproofs。其他与密码学相关的类型(如 Secp256k1 和散列)的编码始终作为库的一部分包含在内 - 请参阅以下注意事项。

由于许多严格编码格式都采用 比特币共识编码 标准化,因此此 crate 需要 bitcoin 作为上游依赖项。

贡献

贡献指南可在 CONTRIBUTING 中找到

许可

这些库在 Apache 2.0 开源许可的条款下分发。有关许可详情,请参阅 LICENCE 文件。

依赖项

~1.8–2.6MB
~57K SLoC