MCPcopy Create free account
hub / github.com/BP-WG/descriptor-wallet

github.com/BP-WG/descriptor-wallet

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.9.2 ↗ · + Follow · compare 2 versions
551 symbols 929 edges 47 files 133 documented · 24% updated 13mo agov0.9.2 · 2023-04-16★ 5913 open issues

Browse by type

Functions 425 Types & classes 126
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Descriptor wallet library

Build Tests Lints codecov

crates.io Docs unsafe forbidden Apache2 licensed

Library for building descriptor-based bitcoin wallets. Everything a modern cold and hot bitcoin wallet needs, but which is not (yet) a part of rust-bitcoin library.

The library clearly separates parts requiring access to private keys from those which should operate never touching them. It is advised that wallets should be designed in a way assuming zero private key access for all of their operations aside from transaction signing; this part must be separated into other repository/library and be strictly controlled. One may look after command-line btc-hot and btc-cold wallets in bin directory for an example of how this can be done.

Library provides

  • efficient manipulations with BIP-32 derivation paths, separating derivations requiring private key access from those, which will always operate without;
  • miniscript & classical bitcoin descriptors;
  • PSBT constructor using input descriptors, which allow to specify custom information about RBFs, previous public key P2C tweaks and custom hash types on a per-input basis;
  • PSBT signer, supporting RBFs, relative and absolute timelocks, all sighash types, complex scripts, including witness- and taproot-based;
  • script templates allowing embedding extended pubkeys into bitcoin script assembly;
  • lexicographic ordering of transaction & PSBT inputs & oututs;
  • script type system;
  • helper types for working with hash-lock contracts;
  • PSBT utility functions (retrieving previous output, computing fee);
  • transaction resolver API on top of Electrum Server API for convenience computation of already-mined transaction fees etc;
  • support for SLIP-32/132 extended pubkey types (ypub, zprv etc).

Wallet comparison diagram

Command-line wallets

One may install command-line wallets with the following command (requires rust compiler and rustup tools to be already installed on a system):

$ rustup default stable
$ rustup update
$ git clone https://github.com/BP-WG/descriptor-wallet
$ cd descriptor-wallet
$ cargo install --path . --locked --all-features

This will add btc-hot and btc-cold commands to the system.

Install with Docker

Build

Clone the repository and checkout to the desired version (here v0.8.0):

$ git clone https://github.com/BP-WG/descriptor-wallet
$ cd descriptor-wallet
$ git checkout v0.8.0

Build and tag the Docker image:

$ docker build -t descriptor-wallet:v0.8.0 .

Usage

$ docker run descriptor-wallet:v0.8.0 btc-hot --help
$ docker run descriptor-wallet:v0.8.0 btc-cold --help

Examples with files

$ docker run -v $PWD/data:/data descriptor-wallet:v0.8.0 btc-hot seed /data/testnet.seed
$ docker run -v $PWD/data:/data descriptor-wallet:v0.8.0 btc-hot derive --testnet /data/testnet.seed /data/testnet

Extension points exported contracts — how you extend this code

Core symbols most depended-on inside this repo

Shape

Method 377
Enum 57
Function 48
Class 43
Interface 26

Languages

Rust100%

Modules by API surface

slip132/src/lib.rs66 symbols
hd/src/indexes.rs42 symbols
hd/src/standards.rs34 symbols
descriptors/src/descriptor.rs33 symbols
hd/src/ranges.rs31 symbols
src/bin/btc-cold.rs30 symbols
src/bin/btc-hot.rs29 symbols
hd/src/account.rs25 symbols
psbt/src/sign/inmem.rs20 symbols
libbitcoin/src/signer.rs20 symbols
hd/src/xkey.rs19 symbols
psbt/src/global.rs16 symbols

For agents

$ claude mcp add descriptor-wallet \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page