1 个不稳定版本
0.9.0-alpha.1 | 2022年11月16日 |
---|
#4 in #strict-encoding
105KB
1.5K SLoC
严格编码库
客户端验证的确定性二进制序列化。
本库实现了由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
库,该库重新导出所有这些库,包括当前库。
该库定义了两个主要特性,分别是ConfinedEncode
和ConfinedDecode
,这些特性需要在每个需要客户端验证表示的类型上实现。
库导出了派生宏#[derive(ConfinedEncode, ConfinedDecode)]
,这是confined_encoding_derive
子库的一部分,由默认功能derive
控制。最后,它实现了由Rust标准库和常用crate定义的主数据类型的严格编码特性;后者增加了依赖项的数量,因此可以通过功能标志进行控制。
chrono
(默认使用):来自chrono
crate的日期和时间类型miniscript
:比特币Miniscript中定义的类型crypto
:非比特币加密原语,包括来自ed25519-dalek
库的Ed25519曲线和X25519签名,以及来自grin_secp256k1zkp
库的pedersen承诺和bulletproofs。其他与加密相关的类型,如Secp256k1和哈希的编码始终作为库的一部分包含在内 - 见下文NB。
此crate需要bitcoin
作为上游依赖项,因为许多严格编码的格式都已标准化为使用比特币共识编码。
贡献
贡献指南可以在CONTRIBUTING中找到。
许可
这些库在Apache 2.0开源许可的条款下分发。有关许可详情,请参阅LICENCE文件。
依赖项
~9.5MB
~138K SLoC