Skip to main content

Bitcoin utility functions

Project description

This is a bitcoin library that provides tools/utilities to interact with the Bitcoin network. One of the primary goals of the library is to explain the low-level details of Bitcoin. The code is easy to read and properly documented explaining in detail all the thorny aspects of the implementation. It is a low-level library which assumes some high-level understanding of how Bitcoin works. In the future this might change.

This is an early version of the library (v0.6.1) and currently, it supports private/public keys, all type of addresses and creation of any transaction, incl. segwit and taproot default key path, with all SIGHASH types. All script op codes are included. Timelocks and non-standard transactions are supported. Extra functionality will be added continuously and the documentation will be improved as the work progresses.

The API documentation can be build with Sphinx but is also available as a PDF for convenience. One can currently use the library for experimenting and learning the inner workings of Bitcoin. It is not meant for production yet and parts of the API might be updated with new versions.

Complementary to this library is a CC BY-SA 4.0 licensed Bitcoin programming book.

Notes

  • For schnorr, bech32[m], ripemd160 the python Bitcoin Core reference implementations are used.

  • For making calls to a Bitcoin node a simple node proxy object exists, which wraps the python-bitcoinrpc library.

  • For Hierarchical Deterministic keys we wrap the python hdwallet library. For now we wrap only some very basic functionality to acquire a PrivateKey object that is used throughtout the library.

Installation

Python version 3 is required. Then just install with:

$ pip install bitcoin-utils

Examples

Keys and Addresses

https://github.com/karask/python-bitcoin-utils/blob/master/examples/keys_addresses.py - creates a private key which we use to derive a public key and in turn an address. We also use the private key to sign a message and then verify it using the public key.

Hierarchical Deterministic Keys

https://github.com/karask/python-bitcoin-utils/blob/master/examples/hd_keys.py - creates an extended private key, from an xpriv/tpriv and path, which we use to derive a public key and in turn all different address.

Segwit Addresses

https://github.com/karask/python-bitcoin-utils/blob/master/examples/keys_segwit_addresses.py - creates P2WPKH, P2SH-P2WPKH, P2WSH and P2SH-P2WSH addresses.

Transaction with P2PKH input and outputs

https://github.com/karask/python-bitcoin-utils/blob/master/examples/p2pkh_transaction.py - creates a simple transaction with one input and two outputs.

Create a P2PKH Transaction with different SIGHASHes

https://github.com/karask/python-bitcoin-utils/blob/master/examples/multi_input_sighash_transaction.py - creates a 2-input 2-output transaction with different signature types.

Create a P2SH Address

https://github.com/karask/python-bitcoin-utils/blob/master/examples/send_to_p2sh_transaction.py - creates a P2SH address that corresponds to a P2PK redeem script and sends some funds to it.

Create (spent) a P2SH Transaction

https://github.com/karask/python-bitcoin-utils/blob/master/examples/spend_p2sh_transaction.py - creates a transaction that spends a P2SH output.

Create a non-standard tx

https://github.com/karask/python-bitcoin-utils/blob/master/examples/create_non_std_tx.py - sends funds to an address with a non-standard tx (script: OP_ADD OP_5 OP_EQUAL)

Spend a non-standard tx

https://github.com/karask/python-bitcoin-utils/blob/master/examples/spend_non_std_tx.py - spends funds from script OP_ADD OP_5 OP_EQUAL

Transaction to pay to a P2WPKH

http://github.com/karask/python-bitcoin-utils/blob/master/examples/send_to_p2wpkh_transaction.py - send coins from two P2PKH UTXOs to a native segwit address (P2WPKH)

Spend from a P2SH(P2WPKH) nested segwit address

http://github.com/karask/python-bitcoin-utils/blob/master/examples/spend_p2sh_p2wpkh_address.py - spend a P2WPKH that is nested into a P2SH for old client compatibility

Create a P2SH address with a relative timelock

https://github.com/karask/python-bitcoin-utils/blob/master/examples/create_p2sh_csv_p2pkh_address.py - creates a P2SH address that locks funds (sent to it) with a private key (P2PKH) and a relative locktime of 200 blocks in the future.

Spend from a timelocked address

https://github.com/karask/python-bitcoin-utils/blob/master/examples/spend_p2sh_csv_p2pkh.py - spends from a P2SH(CSV+P2PKH) address as created from above.

Use NodeProxy to make calls to a Bitcoin node

https://github.com/karask/python-bitcoin-utils/blob/master/examples/node_proxy.py - make Bitcoin command-line interface calls programmatically (NodeProxy wraps jsonrpc-requests library)

Spend from a taproot address

https://github.com/karask/python-bitcoin-utils/blob/master/examples/spend_p2tr_default_path.py - single input, single output default key path spending.

Spend a multi input that contains both taproot and legacy UTXOs

https://github.com/karask/python-bitcoin-utils/blob/master/examples/spend_multi_input_p2tr_and_p2pkh.py - three inputs (two taproot and one legacy), single legacy output.

Please explore the codebase or the API documentation (BitcoinUtilities.pdf) for supported functionality and other options.

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

bitcoin-utils-0.6.1.tar.gz (35.5 kB view details)

Uploaded Source

Built Distribution

bitcoin_utils-0.6.1-py3-none-any.whl (39.5 kB view details)

Uploaded Python 3

File details

Details for the file bitcoin-utils-0.6.1.tar.gz.

File metadata

  • Download URL: bitcoin-utils-0.6.1.tar.gz
  • Upload date:
  • Size: 35.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.6

File hashes

Hashes for bitcoin-utils-0.6.1.tar.gz
Algorithm Hash digest
SHA256 18651a76bc9ea90c41373e86eaa212c4bfab6a8725163915b274bafb2787f65a
MD5 7c890ffe2747a07071fea188638b87a6
BLAKE2b-256 92ded789bc10f87db19a03a7534acdcc53a42b97d65a6b7a1560be856707173d

See more details on using hashes here.

File details

Details for the file bitcoin_utils-0.6.1-py3-none-any.whl.

File metadata

File hashes

Hashes for bitcoin_utils-0.6.1-py3-none-any.whl
Algorithm Hash digest
SHA256 fe159dc8b560de0a46ebc341b90214439675fc841dc067f0fa2561aafd3e4b49
MD5 629e8794c68c25e4641efca7da127a6a
BLAKE2b-256 c4dd96b7007a639587f8cce878ffac7d69c0ccad09891461a70a4fca8590528b

See more details on using hashes here.

Supported by

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