Skip to content


Repository files navigation

hal -- the Bitcoin companion

hal is a command line tool that provides all kinds of Bitcoin-related utilities.


$ cargo install --locked hal

Summary of commands:

  • address

    • inspect: get information about addresses
    • create: create addresses using public keys or scripts
  • bech32

    • decode: parse the elements of the Bech32 format
    • encode: encode data in the Bech32 format
  • bip32

    • derive: derive keys and addresses from extended keys
    • inspect: inspect a BIP-32 xpub or xpriv
  • bip39

    • generate: generate a new BIP-39 mnemonic
    • get-seed: get the seed value and BIP-32 master key for a given BIP-39 mnemonic
  • block

    • create: create a binary block from JSON
    • decode: decode a binary block to JSON
  • hash

    • sha256: hash data with SHA-256
    • sha256d: hash data with double SHA-256
  • key

    • generate: generate a random keypair
    • derive: generate a public key from a private key
    • inspect: inspect private keys
    • ecdsa-sign: make ECDSA signatures
    • ecdsa-verify: verify ECDSA signatures
    • pubkey-tweak-add: add a scalar to a point
    • pubkey-combine: add two points together
  • ln

    • invoice
      • decode: decode Lightning invoices
  • merkle

    • proof-create: create a merkle proof
    • proof-check: check a merkle proof
  • message

    • hash: get hashes of Bitcoin Signed Message
    • sign: sign a message using Bitcoin Signed Message
    • verify: verify a Bitcoin Signed Message
    • recover: recover the pubkey or address that signed a message
  • miniscript

    • descriptor: get information about an output descriptor
    • instpect: inspect miniscripts
    • parse: parse a script into a miniscript
    • policy: inspect policies
  • psbt

    • create: create a PSBT from a raw unsigned transaction
    • decode: decode a PSBT to JSON
    • edit: edit a PSBT inline
    • finalize: finalize a PSBT into a fully signed transaction
    • merge: merge multiple PSBTs into one
  • random

    • bytes: generate random bytes
  • script

    • decode: decode a PSBT to JSON
  • tx

    • create: create a binary transaction from JSON
    • decode: decode a binary transaction to JSON

Minimum Supported Rust Version (MSRV)

hal should always compile on Rust 1.41.1. Note that it should be build using the Cargo.lock file, so using --locked.


hal allows the use of extensions that can be installed separately.

Known extensions:


  • optional Trezor and Ledger integration