libwally-core
Blockstream's C library focused on wallet primitives (vs full node code).
Repo: github.com/ElementsProject/libwally-core.
Features
- BIP32 HD derivation.
- BIP39 mnemonic.
- BIP38 password-encrypted private keys.
- PSBT (BIP174).
- Bitcoin Tx serialization.
- Liquid Confidential Transactions.
- Schnorr (BIP340).
- BIP85.
Bindings
- Python:
wallycore. - JavaScript:
libwally-core-js(WebAssembly). - Java:
wally-android,wally-jvm. - Swift: native bindings for iOS.
- C (native).
Quick example (Python)
import wallycore as wally
seed = wally.bip39_mnemonic_to_seed512("abandon abandon ... about", "")
master = wally.bip32_key_from_seed(seed, wally.BIP32_VER_MAIN_PRIVATE)
account = wally.bip32_key_from_parent_path(master,
[84 + 0x80000000, 0 + 0x80000000, 0 + 0x80000000])
xpub = wally.bip32_key_to_base58(account, wally.BIP32_FLAG_KEY_PUBLIC)
Use cases
- Blockstream Green Wallet (uses libwally extensively).
- Cross-platform wallet libraries (one C core, many bindings).
- Liquid integrations.
Compared
| Aspect | libwally | rust-bitcoin | bitcoinj |
|---|---|---|---|
| Language | C (with bindings) | Rust | Java |
| Liquid CT | Yes | No | No |
| HW wallet | No | No | No |
| Performance | Best (C) | Best | Acceptable |
Common pitfalls
- C API is stateful; clean up with
wally_*_freefunctions. - Build with
--enable-elementsfor Liquid CT support. - Bindings sometimes lag C library version.