Skip to content

dogeorg/python-libdogecoin

Repository files navigation

libdogecoin

A Python interface to the libdogecoin C library, maintained by the Dogecoin Foundation. Provides wrappers for all user-facing address and transaction functions via a CFFI extension that links the static library at build time — no shared .so/.dll dependency at runtime.

Supported platforms

Platform Wheel tag
Linux x86_64 manylinux2014_x86_64
Linux i686 manylinux2014_i686
Linux aarch64 manylinux2014_aarch64
Linux armv7l manylinux2014_armv7l
macOS x86_64 macosx_10_9_x86_64
macOS arm64 macosx_11_0_arm64
Windows x86_64 win_amd64
Windows i686 win32

Installation

pip install libdogecoin

Quick start

from libdogecoin import w_context_start, w_context_stop, w_generate_priv_pub_key_pair

w_context_start()
privkey, address = w_generate_priv_pub_key_pair()
print(privkey, address)
w_context_stop()

API

All functions are prefixed with w_ to distinguish the Python wrappers from the underlying C symbols.


w_context_start()

Start the secp256k1 context. Must be called before any key or address operation.


w_context_stop()

Stop the secp256k1 context.


w_generate_priv_pub_key_pair(chain_code=0, as_bytes=False)

Generate a WIF private key and matching p2pkh address.

Parameters:

  • chain_code — 0 for mainnet, 1 for testnet
  • as_bytes — if True, return raw bytes instead of strings

Returns: (privkey, p2pkh_pubkey)


w_generate_hd_master_pub_key_pair(chain_code=0, as_bytes=False)

Generate an HD master private key and matching p2pkh address.

Parameters:

  • chain_code — 0 for mainnet, 1 for testnet
  • as_bytes — if True, return raw bytes instead of strings

Returns: (master_privkey, master_p2pkh_pubkey)


w_generate_derived_hd_pub_key(wif_privkey_master, as_bytes=False)

Derive a child p2pkh address from an HD master private key.

Parameters:

  • wif_privkey_master — HD master private key (WIF-encoded string)
  • as_bytes — if True, return raw bytes

Returns: child_p2pkh_pubkey


w_verify_priv_pub_keypair(wif_privkey, p2pkh_pubkey, chain_code=0)

Verify that a WIF private key and p2pkh address form a valid pair.

Parameters:

  • wif_privkey — WIF-encoded private key
  • p2pkh_pubkey — p2pkh address derived from wif_privkey
  • chain_code — 0 for mainnet, 1 for testnet

Returns: True if valid, False otherwise


w_verify_master_priv_pub_keypair(wif_privkey_master, p2pkh_pubkey_master, chain_code=0)

Verify that an HD master key pair is valid and consistent.

Parameters:

  • wif_privkey_master — WIF-encoded HD master private key
  • p2pkh_pubkey_master — p2pkh address derived from the master key
  • chain_code — 0 for mainnet, 1 for testnet

Returns: True if valid, False otherwise


w_verify_p2pkh_address(p2pkh_pubkey)

Validate that a string is a well-formed Dogecoin p2pkh address.

Parameters:

  • p2pkh_pubkey — p2pkh address string

Returns: True if valid, False otherwise


w_start_transaction()

Create a new empty working transaction.

Returns: tx_index — integer index of the new transaction


w_add_utxo(tx_index, hex_utxo_txid, vout)

Add a UTXO input to a working transaction.

Parameters:

  • tx_index — index of the working transaction
  • hex_utxo_txid — transaction id of the UTXO to spend
  • vout — output index within that transaction

Returns: 1 on success, 0 on failure


w_add_output(tx_index, destination_address, amount)

Add an output to a working transaction.

Parameters:

  • tx_index — index of the working transaction
  • destination_address — recipient p2pkh address
  • amount — amount of Dogecoin to send (string or number)

Returns: 1 on success, 0 on failure


w_finalize_transaction(tx_index, destination_address, subtracted_fee, out_dogeamount_for_verification, changeaddress)

Finalise a working transaction, deducting the fee and routing change back to the sender.

Parameters:

  • tx_index — index of the working transaction
  • destination_address — primary recipient address
  • subtracted_fee — fee to deduct (string or number)
  • out_dogeamount_for_verification — total amount being sent including fee
  • changeaddress — sender's address to receive change

Returns: raw hex string of the transaction, or 0 on failure


w_get_raw_transaction(tx_index)

Return the serialised hex of a working transaction.

Parameters:

  • tx_index — index of the working transaction

Returns: hex string, or 0 if not found


w_clear_transaction(tx_index)

Discard a working transaction.

Parameters:

  • tx_index — index of the working transaction

w_sign_raw_transaction(tx_index, incoming_raw_tx, script_hex, sig_hash_type, privkey)

Sign one input of a raw transaction in place.

Parameters:

  • tx_index — input index to sign (0-based)
  • incoming_raw_tx — serialised hex of the transaction
  • script_hex — scriptPubKey hex of the input being signed
  • sig_hash_type — signature hash type (typically 1)
  • privkey — WIF-encoded signing key

Returns: hex string of the (partially) signed transaction, or 0 on failure


w_sign_transaction(tx_index, script_pubkey, privkey)

Sign all inputs of a working transaction.

Parameters:

  • tx_index — index of the working transaction
  • script_pubkey — scriptPubKey hex associated with the inputs
  • privkey — WIF-encoded signing key

Returns: 1 if all inputs were signed, 0 otherwise


w_store_raw_transaction(incoming_raw_tx)

Store a pre-built raw transaction in the session table.

Parameters:

  • incoming_raw_tx — serialised hex string (max 100 KB)

Returns: index of the stored transaction, or 0 if too large


w_remove_all()

Clear all working transactions from the session table.


w_get_derived_hd_address(masterkey, account, ischange, addressindex, outprivkey=False)

Derive a HD extended key at a given account/change/index path.

Parameters:

  • masterkey — HD master private key (WIF-encoded)
  • account — BIP44 account number
  • ischange — 0 for external chain, 1 for internal/change
  • addressindex — address index
  • outprivkey — if True, return the extended private key; otherwise the extended public key

Returns: extended public key (xpub) string, or extended private key (xprv) when outprivkey=True


w_get_derived_hd_address_by_path(masterkey, derived_path, outprivkey=False)

Derive a HD extended key at an explicit BIP32 derivation path.

Parameters:

  • masterkey — HD master private key (WIF-encoded)
  • derived_path — BIP32 path string (e.g. "m/44'/3'/0'/0/0")
  • outprivkey — if True, return the extended private key; otherwise the extended public key

Returns: extended public key (xpub) or extended private key (xprv) string


w_generate_random_english_mnemonic(size)

Generate a cryptographically random BIP39 English mnemonic phrase.

Parameters:

  • size — entropy bit length as a string: "128", "160", "192", "224", or "256"

Returns: mnemonic phrase string (12–24 words), or None on failure


w_generate_english_mnemonic(entropy, size)

Generate a BIP39 English mnemonic from caller-supplied hex entropy.

Parameters:

  • entropy — hex-encoded entropy string
  • size — entropy bit length as a string (same values as above)

Returns: mnemonic phrase string, or None on failure


w_dogecoin_seed_from_mnemonic(mnemonic, passphrase="")

Derive a 64-byte BIP32 master seed from a BIP39 mnemonic.

Parameters:

  • mnemonic — BIP39 mnemonic phrase
  • passphrase — optional BIP39 passphrase (default "")

Returns: bytes of length 64, or None on failure


w_get_derived_hd_address_from_mnemonic(account, index, change_level, mnemonic, passphrase="", chain_code=0)

Derive a spendable p2pkh address directly from a BIP39 mnemonic phrase.

Parameters:

  • account — BIP44 account number
  • index — address index
  • change_level"0" for external (receiving), "1" for internal (change)
  • mnemonic — BIP39 mnemonic phrase
  • passphrase — optional BIP39 passphrase
  • chain_code — 0 for mainnet, 1 for testnet

Returns: p2pkh address string, or None on failure


w_sign_message(privkey, message)

Sign an arbitrary message with a WIF private key.

Parameters:

  • privkey — WIF-encoded private key
  • message — message string to sign

Returns: base64-encoded signature string, or None on failure


w_verify_message(signature, message, address)

Verify a signed message against a p2pkh address.

Parameters:

  • signature — base64-encoded signature (from w_sign_message)
  • message — the original message string
  • address — the p2pkh address corresponding to the signing key

Returns: True if valid, False otherwise


w_qrgen_p2pkh_to_qr_string(p2pkh)

Return a text-art QR code string for a p2pkh address.

Returns: multi-line string, or None on failure


w_qrgen_p2pkh_consoleprint_to_qr(p2pkh)

Print a QR code for a p2pkh address to stdout.


w_qrgen_string_to_qr_pngfile(filename, data, size_multiplier=4)

Write a QR code as a PNG file.

Returns: 1 on success, 0 on failure


w_qrgen_string_to_qr_jpgfile(filename, data, size_multiplier=4)

Write a QR code as a JPEG file.

Returns: 1 on success, 0 on failure


available()

Return the list of libdogecoin C function names present in this wheel's build.

Returns: list[str]

from libdogecoin import available
print(available())
# ['dogecoin_ecc_start', 'dogecoin_ecc_stop', 'generatePrivPubKeypair', ...]

w_is_testnet_from_b58prefix(address)

Return True if the address has a testnet base58 prefix.


w_is_mainnet_from_b58prefix(address)

Return True if the address has a mainnet base58 prefix.


w_get_address_from_pubkey(pubkey_hex, is_testnet=False)

Derive a p2pkh address from a compressed public key (hex string).

Returns: p2pkh address string, or None on failure


w_get_pubkey_from_privkey(privkey_wif, is_testnet=False)

Derive the compressed public key (hex) from a WIF-encoded private key.

Returns: pubkey hex string, or None on failure


w_gen_privkey(is_testnet=False)

Generate a new private key.

Returns: (wif_privkey, privkey_hex) tuple, or None on failure


w_dogecoin_address_to_pubkey_hash(p2pkh)

Convert a p2pkh address to its pubkey hash hex string (library-allocated).

Returns: pubkey hash hex string, or None on failure


w_dogecoin_private_key_wif_to_pubkey_hash(privkey_wif)

Derive the pubkey hash hex string from a WIF private key (library-allocated).

Returns: pubkey hash hex string, or None on failure


w_dogecoin_p2pkh_address_to_pubkey_hash(p2pkh)

Convert a p2pkh address to its pubkey hash (scripthash) hex string.

Returns: pubkey hash hex string, or None on failure


w_get_addr_from_pubkey_hash(pubkey_hash, is_testnet=False)

Convert a pubkey hash hex string back to a p2pkh address.

Returns: p2pkh address string, or None on failure


w_get_wif_encoded_privkey(privkey_hex, is_testnet=False)

WIF-encode a raw private key given as a 64-character hex string.

Returns: WIF-encoded private key string


w_get_decoded_privkey_wif(privkey_wif, is_testnet=False)

Decode a WIF-encoded private key to its 64-character hex representation.

Returns: privkey hex string, or None on failure


w_get_hd_root_key_from_seed(seed_bytes, is_testnet=False)

Derive an HD master private key from a 64-byte BIP32 seed.

Parameters:

  • seed_bytes — 64 bytes (e.g. from w_dogecoin_seed_from_mnemonic)
  • is_testnet — False for mainnet, True for testnet

Returns: HD master key string (xprv-style), or None on failure


w_get_hd_pub_key(hdkey, is_testnet=False)

Extract the extended public key (xpub) from an extended private key.

Returns: xpub string, or None on failure


w_derive_ext_key_from_hd_key(extkey, keypath, is_testnet=False)

Derive an extended private key from another extended key by BIP32 path.

Returns: derived extended key string, or None on failure


w_derive_ext_pub_key_from_hd_key(extpubkey, keypath, is_testnet=False)

Derive an extended public key from an extended public key by BIP32 path.

Returns: derived extended public key string, or None on failure


w_gen_hd_master(is_testnet=False)

Generate a new random HD master private key.

Returns: HD master key string (xprv-style), or None on failure


w_derive_hd_ext_from_master(masterkey, keypath, is_testnet=False)

Derive an extended key from a master key by explicit BIP32 path string.

Returns: derived extended key string, or None on failure


w_get_hd_node_privkey_wif_by_path(masterkey, derived_path, outprivkey=False)

Derive a WIF private key or p2pkh address from an HD master key by path.

Parameters:

  • masterkey — HD master private key
  • derived_path — BIP32 derivation path string (e.g. "m/44'/3'/0'/0/0")
  • outprivkey — if True return the WIF private key; otherwise return the p2pkh address

Returns: string result (library-allocated), or None on failure


w_derive_bip44_extended_key(masterkey, account, change_level, address_index, path=None, is_testnet=False)

Derive a BIP44 extended private key.

Parameters:

  • masterkey — HD master private key
  • account — BIP44 account number, or None
  • change_level"0" for external chain, "1" for internal/change
  • address_index — address index, or None
  • path — explicit key path override string, or None

Returns: (extended_key, keypath) tuple, or None on failure


w_derive_bip44_extended_public_key(masterkey, account, change_level, address_index, path=None, is_testnet=False)

Derive a BIP44 extended public key.

Parameters: same as w_derive_bip44_extended_key

Returns: (extended_pubkey, keypath) tuple, or None on failure


w_koinu_to_coins_str(koinu)

Convert a koinu integer (1 DOGE = 100000000 koinu) to a decimal coin string.

Returns: decimal string (e.g. "1.00000000"), or None on failure


w_coins_to_koinu_str(coins)

Convert a decimal coin string (e.g. "1.5") to koinu integer.

Returns: koinu value as int


w_sign_transaction_w_privkey(tx_index, vout_index, privkey)

Sign a specific input of a working transaction by vout index.

Returns: 1 on success, 0 on failure


Building from source

Requires a C compiler, autoconf, automake, and libtool (for the source-build fallback).

pip install cffi requests build
python fetch.py --host=x86_64-pc-linux-gnu   # populates lib/ and include/
python -m build -w

fetch.py probes the libdogecoin GitHub releases for a pre-built binary for the requested host triplet and falls back to an autotools source build if none is available.

About

Python language bindings for libdogecoin

Resources

License

Stars

2 stars

Watchers

1 watching

Forks

Packages

 
 
 

Contributors