Skip to main content

An easy-to-use and fully featured bitcoin library written in pure python (no dependencies).

Project description

buidl Bitcoin Library

buidl is a python3 bitcoin library with 0 dependencies. It is easy-to-read, has extensive test coverage, simple to install on airgapped computers (just copy over this directory).

buidl has extensive feature support for the bitcoin blockchain:

  • Trust-minimized - easy-to-read cryptography implemented in straightforward/way with no third-party dependencies
  • Performant - optional secp256k1 library bindings offers a ~100x speedup, see performance section below
  • Wallet tools for various script types (p2pkh, p2sh, p2sh-wrapped-p2wsh, p2wsh and p2tr (coming soon) ), compressed/uncompressed pubkeys, address encodings, HD support (BIP32, BIP39, BIP44, seedpicker, etc), PSBT generation/decoding/validation, etc
  • Extensive multisig support/tooling for output descriptors, receive address validation, change address detection, fee verification, blinding xpubs, PSBTs, BCUR v0 (v1 coming soon), airgap signing, etc
  • SPV proofs and compact block filters (Neutrino) - build powerful trust-minimized apps without scanning the whole blockchain
  • P2P gossip network - connect directly to the bitcoin network
  • Footgun protection - from elegantly structured OOP classes to RFC6979 deterministic k-values, buidl is designed to be usable for non-cryptographers
  • 0 altcoins - for maximum readability/focus. The only other supported coins are bitcoin's testnet and signet, which intentionally have no value.

This repository comes with zero guarantees, use at your own risk.

Installation

Online

$ pip3 install buidl --upgrade

Offline

Download this repo and then run:

$ python3 setup.py install

(alternatively, because buidl has no dependencies you can just cd into this root directory and call buidl without installation)

Multiwallet

multiwallet is a stateless CLI multisig PSBT wallet. Since buidl has no dependencies, you can run multiwallet by just cding to the root directory of this project:

$ python3 multiwallet.py
Welcome to multiwallet...

If you have installed buidl, you can run multiwallet.py from any directory:

$ multiwallet.py
Welcome to multiwallet...

For more information on installing multiwallet, see multiwallet.md or check out this demo.

singlesweep.py works the same way for sweeping out of paper wallets, but is intentionally undocumented.

Tests

Run tests with pytest:

$ git clone https://github.com/buidl-bitcoin/buidl-python.git && cd buidl-python
$ pytest -v

(these will be 1-2 orders of magnitue faster with libsec bindings, see performance section below)

Run black:

$ black . --diff --check

Run flake8:

$ flake8 .

Performance

You can speed this library up ~100x by using C-bindings to bitcoin core's libsecp256k1 library.

libsec256k1 Dependency Installation

Note that you'll have to compile libsecp256k1 from scratch with experimental modules enabled to make Schnorr signatures work.

Here are the instructions on Linux/Mac:

$ git clone https://github.com/bitcoin-core/secp256k1
$ cd secp256k1
$ ./autogen.sh
$ ./configure --enable-module-extrakeys --enable-module-schnorrsig --enable-experimental
$ make
$ sudo make install

buidl Installation

$ git clone git@github.com:buidl-bitcoin/buidl-python.git && cd buidl-python && python3 -m pip install -r requirements-libsec.txt && python3 -m pip install --editable . && cd buidl && python libsec_build.py && cd ..

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

buidl-0.2.30.tar.gz (205.8 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

buidl-0.2.30-py3.9.egg (457.8 kB view details)

Uploaded Egg

buidl-0.2.30-py3-none-any.whl (218.4 kB view details)

Uploaded Python 3

File details

Details for the file buidl-0.2.30.tar.gz.

File metadata

  • Download URL: buidl-0.2.30.tar.gz
  • Upload date:
  • Size: 205.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.7

File hashes

Hashes for buidl-0.2.30.tar.gz
Algorithm Hash digest
SHA256 44ed8ea0ffd83419104c4158fedcaa8234c09976469a6eab1b8536d64a40bf5b
MD5 96fee35c2639b400212202caef9f40a0
BLAKE2b-256 5999a53938f13a2fe4b7400ef8d00c3a9da7232c780778ee7dfe0ac2e8bb61f7

See more details on using hashes here.

File details

Details for the file buidl-0.2.30-py3.9.egg.

File metadata

  • Download URL: buidl-0.2.30-py3.9.egg
  • Upload date:
  • Size: 457.8 kB
  • Tags: Egg
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.7

File hashes

Hashes for buidl-0.2.30-py3.9.egg
Algorithm Hash digest
SHA256 47bf85a41fbda26ad26c252ff2de36b5983e3af32a350fe63052e28018b1ecd2
MD5 96c2477a99ee94aef9996e1859318e40
BLAKE2b-256 55395a90f190c38d023c1aae3be6d976df09bfa7a7483bf1cbc8cd9722660da1

See more details on using hashes here.

File details

Details for the file buidl-0.2.30-py3-none-any.whl.

File metadata

  • Download URL: buidl-0.2.30-py3-none-any.whl
  • Upload date:
  • Size: 218.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.7

File hashes

Hashes for buidl-0.2.30-py3-none-any.whl
Algorithm Hash digest
SHA256 e89088f9d56b86f114fd2e61d91812230df4c8288b754c2b2cf3d104b9a39203
MD5 a3630fedc4e72dc513b7cd6a69ec9abb
BLAKE2b-256 90b91ec856e4ac7496ab356ee6ad70f45180c15bcf4105af00c5487af25f4a29

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page