1 个不稳定版本

0.9.0-alpha.12022年11月16日

#4 in #strict-encoding

Apache-2.0

105KB
1.5K SLoC

严格编码库

Build Tests Lints codecov

Docs unsafe forbidden Apache-2 licensed

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

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

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

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

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

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

文档

有关本库的详细开发人员和API文档,请访问https://docs.rs/confined_encoding/

要了解库所支持的技术,请查看我们的技术演示文稿幻灯片LNP/BP 技术谈话视频

用法

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

confined_encoding = "1.3"

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

该库定义了两个主要特性,分别是ConfinedEncodeConfinedDecode,这些特性需要在每个需要客户端验证表示的类型上实现。

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

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

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

贡献

贡献指南可以在CONTRIBUTING中找到。

许可

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

依赖项

~9.5MB
~138K SLoC