Strict encoding library
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.
Detailed developer & API documentation for the library can be accessed at https://docs.rs/strict_encoding/
To use the library, you just need to reference a latest version, in
[dependencies] section of your project
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 [
which should be implemented on each type that requires to be represented
Library exports derivation macros
which are a part of
strict_encoding_derive sub-crate and controlled by a
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
chrono(used by default): date & time types from
miniscript: types defined in bitcoin Miniscript
crypto: non-bitcoin cryptographic primitives, which include Ed25519 curve, X25519 signatures from
ed25519-daleklibrary and pedersen commitments + bulletproofs from
grin_secp256k1zkplibrary. 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
Contribution guidelines can be found in CONTRIBUTING
The libraries are distributed on the terms of Apache 2.0 opensource license. See LICENCE file for the license details.