created_at2021-08-29 20:11:30.218006
updated_at2024-02-15 23:17:11.674666
descriptionHelper functions for testing strict encodings
Dr. Maxim Orlovsky (dr-orlovsky)



# Strict encoding library ![Build]( ![Tests]( ![Lints]( [![codecov](]( [![](]( [![Docs](]( [![Apache-2 licensed](](./LICENSE) Deterministic binary serialization for client-side-validation. This library implements **strict encoding** standard, defined by [LNPBP-7]( Strict encoding is a binary conservative encoding extensively used in client-side-validation for deterministic portable (platform-independent) serialization of data with a known internal data structure. Strict encoding is a schema-less encoding. As a part of strict encoding, crate also includes implementation of network address **uniform encoding** standard ([LNPBP-42](, which allows representation of any kind of network address as a fixed-size byte string occupying 37 bytes. This standard is used for the strict encoding of networking addresses. Client-side-validation is a paradigm for distributed computing, based on top of proof-of-publication/commitment medium layer, which may be a bitcoin blockchain or other type of distributed consensus system. The development of the library is supported by [LNP/BP Standards Association]( The library is designed after Peter Todd concepts of proofmarshall and serialization principles for client-side-validated data and Dr Maxim Orlovsky idea of universal network encodings. Both were shaped into the standards and implemented as a part of this library by Dr Maxim Orlovsky. ## Documentation Detailed developer & API documentation for the library can be accessed at To learn about the technologies enabled by the library please check [slides from our tech presentations]( and [LNP/BP tech talks videos]( ## Usage To use the library, you just need to reference a latest version, in `[dependencies]` section of your project `Cargo.toml`. ```toml strict_encoding = "2.5" ``` If you are using other client-side-validation libraries, consider importing just a single [`client_side_validation`] library which re-exports all of them, including the current one. Library defines two main traits, [`StrictEncode`] and [`StrictDecode`], which should be implemented on each type that requires to be represented for client-side-validation. Library exports derivation macros `#[derive(StrictEncode, StrictDecode)]`, which are a part of [`strict_encoding_derive`] sub-crate and controlled by a default feature `derive`. Finally, it implements strict encoding traits for main data types defined by rust standard library and frequently used crates; the latter increases the number of dependencies and thus can be controlled with feature flags: - `chrono` (used by default): date & time types from `chrono` crate - `miniscript`: types defined in bitcoin Miniscript - `crypto`: non-bitcoin cryptographic primitives, which include Ed25519 curve, X25519 signatures from `ed25519-dalek` library and pedersen commitments + bulletproofs from `grin_secp256k1zkp` library. Encodings for other cryptography-related types, such as Secp256k1 and hashes, are always included as a part of the library - see NB below. This crate requires `bitcoin` as an upstream dependency since many of strict-encoded formats are standardized as using *bitcoin consensus encoding*. ## Contributing Contribution guidelines can be found in [CONTRIBUTING](../ ## Licensing The libraries are distributed on the terms of Apache 2.0 opensource license. See [LICENCE](LICENSE) file for the license details. [`client_side_validation`]: [`strict_encoding_derive`]:
Commit count: 313

cargo fmt