hal -- the Bitcoin companion
hal is a command line tool that provides all kinds of Bitcoin-related utilities.
Installation
$ 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
- invoice
-
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
.
Extensions
hal allows the use of extensions that can be installed separately.
Known extensions:
- hal-elements: support for Elements sidechains like Liquid
Ideas:
- optional Trezor and Ledger integration