5.0 KiB
16.6: Using Other Functions in Libwally
NOTE: This is a draft in progress, so that I can get some feedback from early reviewers. It is not yet ready for learning.
Libwally is an extensive library that provides a considerable amount of wallet-related functionality, much of it not available through bitcoin-cli
. Following is an overview of some functionality not otherwise covered in this chapter.
Using Cryptographic Functions
A number of cryptographic functions can be directly accessed from Libwally:
wally_aes
— Use AES encryption or decryptionwally_aes_cbc
— Use AES encryption or decryption in CBC modewally_hash160
— Use RIPEMD-160(SHA-256) hashwally_scrypt
— Use Scrypt key derivationwally_sha256
— Use SHA256 hashwally_sha256_midstate
— Use SHA256 to hash only the first chunk of datawally_sha256d
— Conduct a SHA256 double-hashwally_sha512
— Use SHA512 hash
There are also HMAC functions for the two SHA hashes, which are used generate message-authentication-codes based on the hashes. They're used in BIP32, among other places.
wally_hmac_sha256
wally_hmac_sha512
Additional functions cover PBKDF2 key derivation and elliptic-curve math.
Using Address Functions
Libwally contains a number of functions that can be used to import, export, and translate Bitcoin addresses.
Some convert back and forth between addresses and scriptPubKey
bytes:
wally_addr_segwit_from_bytes
— Convert a witness program (in bytes) into a Segwit addresswally_addr_segwit_to_bytes
— Convert a Segwit address into ascriptPubKey
(in bytes)wally_address_to_scriptpubkey
— Convert a legacy address into ascriptPubKey
(in bytes)wally_scriptpubkey_to_address
— Convert ascriptPubKey
(in bytes) into a legacy address
Some relate to the wallet import format (WIF):
wally_wif_from_bytes
— Convert a private key (in bytes) to a WIFwally_wif_is_uncompressed
— Determines if a WIF is uncompressedwally_wif_to_address
— Derivate a P2PKH address from a WIFwally_wif_to_bytes
— Convert a WIF to a private key (in bytes)wally_wif_to_public_key
— Derive a public key (in bytes) from a WIF
Using BIP32 Functions
There are additional BIP32 HD-wallet functions, beyond what was covered in §16.3: Using BIP32 in Libwally.
bip32_key_get_fingerprint
— Generate a BIP32 fingerprint for an extended keybip32_key_serialize
— Transform an extended key into serialized bytesbip32_key_strip_private_key
— Convert an extended private key to an extended public keybip32_key_unserialize
— Transform serialized bytes into an extended key
There are also numerous various depending on you want to allocate memory of have Libwally doing the _alloc
for you.
Using BIP38 Functions
BIP38 allows for the creation of password-protected private key. We do not teach it because we consider inserting this sort of human factor into key management dangerous. See #SmartCustody.
The main functions are:
bip38_from_private_key
— Encode a private key using BIP38bip38_to_private_key
— Decode a private key using BIP38
Using BIP39 Functions
A few BIP39 mnemonic-word functions were just overviewed in §16.2: Using BIP39 in Libwally:
bip39_get_languages
— See a list of supported languagesbit39_get_word
— Retrieve a specific word from a language's word listbip39_get_wordlist
— See a list of words for a language
Using PSBT Functions
Listings of most PSBT functions can be found in 16.4: Using PSBTs in Libwally.
Using Script Functions
§16.5: Using Scripts in Libwally just barely touched upon Libwally's Scripts functions.
There's another function that lets you determine the sort of script found in a transaction:
wally_scriptpubkey_get_type
— Determine a transaction's script type.
Then there are a slew of functions that create scriptPubKey
from bytes, scriptSig
from signatures, and Witnesses from bytes or signatures.
wally_script_push_from_bytes
wally_scriptpubkey_csv_2of2_then_1_from_bytes
wally_scriptpubkey_csv_2of3_then_2_from_bytes
wally_scriptpubkey_multisig_from_bytes
wally_scriptpubkey_op_return_from_bytes
wally_scriptpubkey_p2pkh_from_bytes
wally_scriptpubkey_p2sh_from_bytes
wally_scriptsig_multisig_from_bytes
wally_scriptsig_p2pkh_from_der
wally_scriptsig_p2pkh_from_sig
wally_witness_multisig_from_bytes
wally_witness_p2wpkh_from_der
wally_witness_p2wpkh_from_sig
wally_witness_program_from_bytes
Using Elements Function2
Libwally can be compiled to be used with Blockstream's Elements, which includes access to its assets functions.