This is an implementation defining standard for client-side-validation

Overview

Client-side-validation Foundation Libraries

Build Tests Lints codecov

crates.io Docs unsafe forbidden Apache-2 licensed

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.

Documentation

Detailed developer & API documentation for all libraries can be accessed at https://docs.rs/client_side_validation/

To learn about the technologies enabled by the library please check slides from our tech presentations and LNP/BP tech talks videos

Components

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:
    • consensus commitments (part of LNPBP-8 standard)
    • multi-commitments (LNPBP-4 standard)
    • merklization for client-side-validation (LNPBP-81 standard)
  • Single-use-seals API (LNPBP-8 standard)
  • Client-side-validation API from the library root, linking those components together according to LNPBP-9 standard.

Usage

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

"Umbrella" 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 Slice32 type, 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.

Contributing

Contribution guidelines can be found in CONTRIBUTING

Licensing

The libraries are distributed on the terms of Apache 2.0 opensource license. See LICENCE file for the license details.

Issues
Releases(v0.5.0)
  • v0.5.0(May 14, 2021)

    This version for the first time represents reference implementation for R1 version of client-side-validation standards, organized in separate sublibraries/rust crates:

    The library represents generalized client-side-validation APIs, abstracted from its bitcoin-specific applications and RGB, with detailed documentation and test coverage.

    This release finalizes all pending work on client-side-validation and is a final release before the library will move to v1.0 version, which will be released upon the final audit of the current release. This will define a milestone when client-side-validation can be used in production environments.

    The library is located at https://crates.io/crates/client_side_validation. Library documentation 📖 is at https://docs.rs/client_side_validation/0.5.0/

    Supported & tested platforms: Linux (Ubuntu 20.04 and Ubuntu 21.04), Mac OS (Mac OS Big Sur and Mac OS Catalina), Windows 2020 Server.

    Source code(tar.gz)
    Source code(zip)
Owner
LNP/BP Association
Non-profit supervising layer 2 & 3 protocols on Bitcoin & Lightning Network
LNP/BP Association
Rust implementation of the legacy Master Server Query Protocol

msq-rs Rust library implementation of the legacy Master Server Query Protocol. Documentation crates.io Repository Release Notes Usage Add this to your

mtcw 4 May 24, 2021
client-server notification center for dbus desktop notifications

tsuchita A client-server notification center for dbus desktop notifications. Specifically org.freedesktop.Notifications dbus messages. Motivation I ju

Jeff Zhao 6 May 26, 2021
A lightning fast version of tmux-fingers written in Rust, copy/pasting tmux like vimium/vimperator

tmux-thumbs A lightning fast version of tmux-fingers written in Rust for copy pasting with vimium/vimperator like hints. Usage Press ( prefix + Space

Ferran Basora 376 Jun 12, 2021
Simple ray tracer written in Rust

Simple ray tracer written in Rust from scratch I've just finished my first semester at the Faculty of Applied Mathematics and Computer Science at the

Vladislav 190 Jun 12, 2021
Remote Secret Editor for AWS Secret Manager

Barberousse - Remote Secrets Editor About Usage Options Printing Editing Copying RoadMap 1.0 1.1 Future About A project aimed to avoid downloading sec

Mohamed Zenadi 17 Jun 9, 2021
Rust experiments involving Haskell-esque do notation, state, failure and Nom parsers!

Introduction As a long time Haskell developer recently delving into Rust, something I've really missed is monads and do notation. One thing monadic do

Kerfuffle 21 May 23, 2021
Utilities and tools based around Amazon S3 to provide convenience APIs in a CLI

s3-utils Utilities and tools based around Amazon S3 to provide convenience APIs in a CLI. This tool contains a small set of command line utilities for

Isaac Whitfield 33 May 18, 2021
transmute-free Rust library to work with the Arrow format

Arrow2: Transmute-free Arrow This repository contains a Rust library to work with the Arrow format. It is a re-write of the official Arrow crate using

Jorge Leitao 69 Jun 16, 2021
hado-rshado — A little macro for writing haskell-like do expressions without too much ceremony

hado Monadic haskell-like expressions brought to rust via the hado! macro What? A little macro for writing haskell-like do expressions without too muc

Lucas David Traverso 42 May 3, 2021
Concatenate Amazon S3 files remotely using flexible patterns

S3 Concat This tool has been migrated into s3-utils, please use that crate for future updates. A small utility to concatenate files in AWS S3. Designe

Isaac Whitfield 31 May 22, 2021
A stack-allocated box that stores trait objects.

This crate allows saving DST objects in the provided buffer. It allows users to create global dynamic objects on a no_std environment without a global allocator.

Aleksey Sidorov 3 May 27, 2021
C to Rust translator

Corrode: Automatic semantics-preserving translation from C to Rust This program reads a C source file and prints an equivalent module in Rust syntax.

Jamey Sharp 2.1k Jun 11, 2021
Simple git/hg tui client focused on keyboard shortcuts

verco A simple Git/Hg tui client focused on keyboard shortcuts Screenshots Platforms This project uses Cargo and pure Rust stable and works on latest

Matheus Lessa Rodrigues 159 May 27, 2021
🌲 Open the current remote repository in your browser

gitweb Some of the flags and options are subject to change in the future. Ideas are welcome. Ideas are bulletproof (V). gitweb is a command line inter

Yoann Fleury 20 May 25, 2021