Client-side-validation Foundation Libraries
This is an implementation defining standard of client-side-validation representing a set of its Foundation libraries. The standards covered by the libraries include LNPBP-4, LNPBP-7, LNPBP-8, LNPBP-9, LNPBP-42, and LNPBP-81 (see Components section below for more details).
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 original idea of client-side-validation was proposed by Peter Todd with its possible applications designed by Giacomo Zucco. It was shaped into a protocol- level design by Dr Maxim Orlovsky with a big input from the community and implemented by him as this set of libraries.
Detailed developer & API documentation for all libraries can be accessed at https://docs.rs/client_side_validation/
This library consists of the following main three components, which define independent parts constituting together client-side-validation API and its core functionality. These are:
- Strict encoding (LNPBP-7 and LNPBP-42 standards): binary standard of encoding client-side-validated data and network addresses.
- Commit-verify client-side-validation-specific APIs:
- Single-use-seals API (LNPBP-8 standard)
- Client-side-validation API from the library root, linking those components together according to LNPBP-9 standard.
The repository contains rust libraries for client-side validation.
Use library in other projects
To use libraries, you just need latest version of libraries, published to crates.io into
[dependencies] section of your project
Cargo.toml. Here is the full list of available libraries from this repository:
client_side_validation = "1" # "Umbrella" library including all of the tree libraries below strict_encoding = "1" # Strict encoding API and derivation macros commit_verify = "1" # Consensus and multi-message commitments single_use_seals = "1" # Generic (non-bitcoin-specific) API
client_side_validation library is configured with default set of features enabling all of its functionality (and including all of other libraries from this repository, listed above). If you need to restrict this set, either use specific libraries - or configure main library with a set of features in the following way:
[dependencies.client_side_validation] version = "1" default-features = false features =  # Your set of features goes here
The library has four feature flags, all of which are not used by default:
rand, providing support for generating random 32-byte sequences of
Slice32type, used in many LNP/BP applications (for instance as hash-lock preimages or during LNPBP-4 multi-commitments);
serde, providing support for data structure serialization with serde across all library;
bitcoin, providing implementation of strint encoding for bitcoin data types;
crypto, adding strict encoding support for Ed25519/X25519, Grin Secp256k1zkp Pedersen commitments and bulletproofs data types.
For specific features which may be enabled for the libraries, please check library-specific guidelines, located in
README.md files in each of library subdirectories.
Libraries based on client-side-validation
Most of the developers will be probably interested in a more high-level libraries based on client-side-validation, applying it to a specific commitment mediums (bitcoin transaction graph from blockchain or state channels, or more exotic systems like confidential bitcoin transactions used by elements & liquid, or mimblewimble-based systems). Here is (potentially incomplete) list of such libraries:
- Bitcoin: BP Core Lib, which contains bitcoin UTXO single-use-seal implementations for pay-to-contract and sign-to-contract types of seals, as well as a library for deterministic bitcoin commitments. This library is maintained by LNP/BP Association.
- Mimblewimble: MW Core Lib from Pandora Core – a very early prototypes and proofs of concept applying client-side-validation to mimblewimble-types of blockchains.
- Pandora timechain, an experimental blockchain of Pandora Network, playing with client-side-validation using modified bitcoin consensus rules, extended with eltoo- and covenants-related functionality and with removed native blockchain-level coin.
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.