BP-WG / bp-std

Modern & lightweight implementation of bitcoin standards without rust-bitcoin/miniscript dependencies
Apache License 2.0
16 stars 17 forks source link
bitcoin descriptor-wallet hd-wallet psbt wallet

Bitcoin standards implementation libraries

Build Tests Lints codecov

crates.io Docs Apache-2 licensed

Modern, minimalistic & standard-compliant wallet-level libraries: an alternative to rust-bitcoin and BDK libraries from LNP/BP Standards Association.

The main goals of the libraries are:

FAQs

Why not use rust-bitcoin?

The library doesn't rely on rust-bitcoin crate. The reasons for that are:

As one may see from the list, rust-bitcoin design and maintenance approach contradicts to the major aims of this project - in fact, this project was created by Maxim Orlovsky (who was the most active contributor to rust-bitcoin since Q1 2019 till Q2 2022) in order to address these issues using different set of trade-offs, providing an alternative to rust-bitcoin to those who needs it.

Why not use miniscript?

Miniscript is great for many purposes, but it can't be used for many cases, including representation of BOLT-3 lightning channel transaction outputs, re-use of public key in different branches of pre-taproot scripts [1][ms-1]. Miniscript is also still unstable, having recent changes to the semantic due to discovered bugs [2][ms-2] [3][ms-3]; meaning that the descriptors created with miniscript before may not be able to deterministically reproduce the structure of some wallet UTXOs in a future. Finally, the existing Rust miniscript implementation [rust-miniscript] inherits all rust-bitcoin tradeoffs, and is much more unstable in terms of APIs and semantic. Thus, it was decided to use this library to provide an alternative to miniscript with introduction of [script templates][#script-templates] convertible to and from miniscript representation - but with some externally-provided tools instead of adding miniscript as a direct dependency here.

Why not BDK?

BDK is great, but it relies on rust-bitcoin and rust-miniscript and can't be used outside of that ecosystem, inheriting all tradeoffs described above. Since we try to address those trade-offs, we had to create a BDK alternative.

How this project is related to descriptor-wallet?

Descriptor wallet was an earlier project by the same authors trying to address rust-bitcoin issues by building on top of it. With the recent v0.30 rust-bitcoin release it became clear that the effort of adoption to API-breaking changes is much higher than creating a new independent project from scratch, while at the same time the new project may address rust-bitcoin issues in much more efficient and elegant way. Thus, it was decided to discontinue descriptor-wallet and start the new bp-wallet project instead.

Design

Script templates

Descriptors

Contributing

Contribution guidelines can be found in CONTRIBUTING

More information

MSRV

Minimum supported rust compiler version (MSRV) is shown in rust-version of Cargo.toml.

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 file for the license details.