# Bitcoin protocol core library ![Build](https://github.com/LNP-BP/bp-core/workflows/Build/badge.svg) ![Tests](https://github.com/LNP-BP/bp-core/workflows/Tests/badge.svg) ![Lints](https://github.com/LNP-BP/bp-core/workflows/Lints/badge.svg) [![codecov](https://codecov.io/gh/LNP-BP/bp-core/branch/master/graph/badge.svg)](https://codecov.io/gh/LNP-BP/bp-core) [![crates.io](https://img.shields.io/crates/v/bp-core)](https://crates.io/crates/bp-core) [![Docs](https://docs.rs/bp-core/badge.svg)](https://docs.rs/bp-core) [![unsafe forbidden](https://img.shields.io/badge/unsafe-forbidden-success.svg)](https://github.com/rust-secure-code/safety-dance/) [![Apache-2 licensed](https://img.shields.io/crates/l/bp-core)](./LICENSE) The library implements components necessary for [client-side-validation] in bitcoin protocol, specifically - deterministic bitcoin commitments API ([LNPBP-1], [LNPBP-2], [LNPBP-3], [LNPBP-6], [LNPBP-11] & [LNPBP-12] standards) - bitcoin-based single-use-seal API ([LNPBP-10] standards) 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][lnpbp-web] and is performed on its [GitHub page][lnpbp-github]. The original idea of client-side-validation was proposed by Peter Todd with its possible applications designed by Giacomo Zucco. It was shaped into the protocol design by Dr Maxim Orlovsky with a big input from the community. Minimum supported rust version for the library (MSRV) is 1.66 and 2021 rust edition. ## Documentation Detailed developer & API documentation for all libraries can be accessed at: - - - - To learn about the technologies enabled by the library please check [slides from our tech presentations][presentations] and [LNP/BP tech talks videos][lnpbp-youtube]. ## 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](https://crates.io) into `[dependencies]` section of your project `Cargo.toml`. Here is the full list of available libraries from this repository: ```toml bp-primitives = "1" # Bitcoin protocol primitives crate bp-dbc = "1" # Deterministic bitcoin commitments crate bp-seals = "1" # Bitcoin single-use-seals crate bp-core = "1" # Library including both of the previous crates ``` `bp-core` crate is an "umbrella" library containing both deterministic bitcoin commitments and bitcoin seals crates inside. ## Known applications The current list of the projects based on the library include: - [RGB](https://github.com/LNP-BP/rgb-node): Confidential & scalable smart contracts for Bitcoin & Lightning - [Bitcoin-based decentralized identity](https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-February/018381.html) proposal uses single-use-seals ## Contributing Contribution guidelines can be found in [CONTRIBUTING](CONTRIBUTING.md) ## More information ### MSRV This library requires minimum rust compiler version (MSRV) 1.66.0. ### Policy on altcoins Altcoins and "blockchains" other than Bitcoin blockchain/Bitcoin protocols are not supported and not planned to be supported; pull requests targeting them will be declined. ### Licensing The libraries are distributed on the terms of Apache 2.0 opensource license. See [LICENCE](LICENSE) file for the license details. [lnpbp-web]: https://lnp-bp.org [lnpbp-github]: https://github.com/LNP-BP [lnpbp-youtube]: https://www.youtube.com/@LNPBP [presentations]: https://github.com/LNP-BP/FAQ/blob/master/Presentation%20slides/ [LNPBP-1]: https://github.com/LNP-BP/LNPBPs/blob/master/lnpbp-0001.md [LNPBP-2]: https://github.com/LNP-BP/LNPBPs/blob/master/lnpbp-0002.md [LNPBP-3]: https://github.com/LNP-BP/LNPBPs/blob/master/lnpbp-0003.md [LNPBP-6]: https://github.com/LNP-BP/LNPBPs/blob/master/lnpbp-0006.md [LNPBP-10]: https://github.com/LNP-BP/LNPBPs/blob/master/lnpbp-0010.md [LNPBP-11]: https://github.com/LNP-BP/LNPBPs/blob/master/lnpbp-0011.md [LNPBP-12]: https://github.com/LNP-BP/LNPBPs/blob/master/lnpbp-0012.md