Supported Coins & Networks

libcrypto supports 43 networks from a single secp256k1 key: Bitcoin-style chains (Base58Check / SegWit / CashAddr), Ethereum and 26 other EVM-compatible chains, TRON, and Ripple.

All version bytes are cross-checked against authoritative sources (Trezor coin definitions and cryptocoinjs/coininfo). Every address in this document is generated from the canonical private key 1.

from libcrypto import Wallet

wallet = Wallet("0000000000000000000000000000000000000000000000000000000000000001")
print(wallet.get_address("litecoin", "p2wpkh"))

Bitcoin-style networks

Network coin name Address types P2PKH P2SH WIF Bech32 HRP
Bitcoin bitcoin p2pkh, p2sh-p2wpkh, p2wpkh, p2tr 0x00 0x05 0x80 bc
Bitcoin Testnet testnet p2pkh, p2sh-p2wpkh, p2wpkh, p2tr 0x6F 0xC4 0xEF tb
Litecoin litecoin p2pkh, p2sh-p2wpkh, p2wpkh 0x30 0x32 0xB0 ltc
Dogecoin dogecoin p2pkh 0x1E 0x16 0x9E
Dash dash p2pkh 0x4C 0x10 0xCC
Bitcoin Cash bitcoin_cash p2pkh, cashaddr 0x00 0x05 0x80
DigiByte digibyte p2pkh, p2sh-p2wpkh, p2wpkh 0x1E 0x3F 0x80 dgb
Namecoin namecoin p2pkh 0x34 0x0D 0xB4
Bitcoin Gold bitcoin_gold p2pkh, p2sh-p2wpkh, p2wpkh 0x26 0x17 0x80 btg
Ravencoin ravencoin p2pkh 0x3C 0x7A 0x80
Qtum qtum p2pkh, p2sh-p2wpkh, p2wpkh 0x3A 0x32 0x80 qc
Monacoin monacoin p2pkh, p2sh-p2wpkh, p2wpkh 0x32 0x37 0xB0 mona
Vertcoin vertcoin p2pkh, p2sh-p2wpkh, p2wpkh 0x47 0x05 0x80 vtc
Zcash (transparent) zcash p2pkh 0x1CB8 0x1CBD 0x80

Zcash transparent addresses use a two-byte version prefix (0x1CB8t1…).

Deterministic examples (private key 1)

bitcoin      p2pkh   1BgGZ9tcN4rm9KBzDn7KprQz87SZ26SAMH
bitcoin      p2wpkh  bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4
bitcoin      p2tr    bc1pmfr3p9j00pfxjh0zmgp99y8zftmd3s5pmedqhyptwy6lm87hf5sspknck9
litecoin     p2pkh   LVuDpNCSSj6pQ7t9Pv6d6sUkLKoqDEVUnJ
litecoin     p2wpkh  ltc1qw508d6qejxtdg4y5r3zarvary0c5xw7kgmn4n9
dogecoin     p2pkh   DFpN6QqFfUm3gKNaxN6tNcab1FArL9cZLE
dash         p2pkh   XmN7PQYWKn5MJFna5fRYgP6mxT2F7xpekE
bitcoin_cash cashaddr bitcoincash:qp63uahgrxged4z5jswyt5dn5v3lzsem6cy4spdc2h
digibyte     p2wpkh  dgb1qw508d6qejxtdg4y5r3zarvary0c5xw7kmudfnm
bitcoin_gold p2pkh   GUXByHDZLvU4DnVH9imSFckt3HEQ5cFgE5
ravencoin    p2pkh   RKxTdfmtxtfLDKZBgx6SvNkBtNu9jRYnLh
qtum         p2pkh   QXHFfTBKYXjaaTH1e7Rox8CcdNPGHVhM59
monacoin     p2pkh   MJaRnao1s62a2zAKSkmG582KbLKianqb7v
vertcoin     p2pkh   Vkg6Ts44mskyD668xZkxFkjqovjXX9yUzZ
zcash        p2pkh   t1UYsZVJkLPeMjxEtACvSxfWuNmddpWfxzs
from libcrypto import Wallet

wallet = Wallet("0000000000000000000000000000000000000000000000000000000000000001")

print(wallet.get_address("bitcoin_gold", "p2pkh"))     # GUXBy...
print(wallet.get_address("qtum", "p2wpkh"))            # qc1q...
print(wallet.get_address("monacoin", "p2pkh"))         # MJaRn...
print(wallet.get_address("zcash", "p2pkh"))            # t1UYs...
print(wallet.get_all_addresses("vertcoin"))            # all configured formats

EVM-compatible networks

Every EVM chain derives the same EIP-55 checksummed address from a given key, because they all use keccak256 over the uncompressed public key. Use the default address type (or omit it).

coin name Network
ethereum Ethereum
ethereum_classic Ethereum Classic
bsc / binance_smart_chain BNB Smart Chain
polygon Polygon PoS
polygon_zkevm Polygon zkEVM
avalanche Avalanche C-Chain
arbitrum Arbitrum
optimism Optimism
base Base
fantom Fantom
cronos Cronos
gnosis Gnosis Chain
celo Celo
moonbeam Moonbeam
moonriver Moonriver
harmony Harmony
aurora Aurora
metis Metis
kava Kava EVM
mantle Mantle
linea Linea
scroll Scroll
blast Blast
opbnb opBNB
zksync zkSync Era
sonic Sonic
from libcrypto import Wallet

wallet = Wallet("0000000000000000000000000000000000000000000000000000000000000001")

for chain in ("ethereum", "polygon", "arbitrum", "base", "fantom", "linea"):
    print(chain, wallet.get_address(chain))
# All print 0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf

The address is identical across EVM chains by design. The chain is distinguished by the network you connect to, not by the address itself.

Account-based networks

coin name Network Address types
tron TRON default (Base58Check), hex (0x41 hex)
ripple XRP Ledger default (classic account)
from libcrypto import Wallet

wallet = Wallet("0000000000000000000000000000000000000000000000000000000000000001")
print(wallet.get_address("tron"))          # TMVQGm1qAQYVdetCeGRRkTWYYrLXuHK2HC
print(wallet.get_address("tron", "hex"))   # 417E5F4552091A69125D5DFCB7B8C2659029395BDF
print(wallet.get_address("ripple"))        # rBgGZ9tc4him9KBzD8fKFiQz3fSZpaSwMH

Notes on shared version bytes

Some networks legitimately share Base58 version bytes, so the same key produces identical addresses on those chains (this is correct and expected):

  • Dogecoin and DigiByte both use 0x1E for P2PKH.
  • Qtum P2SH (0x32) matches Litecoin P2SH; Vertcoin P2SH (0x05) matches Bitcoin P2SH.

Use validate_address(address, network) when you need a definitive per-network answer.

Adding a new Bitcoin-style network

The framework is data-driven. To add another single-byte or two-byte Base58 network:

  1. Add its version bytes to ADDRESS_VERSIONS in constants.py (p2pkh, p2sh, private).
  2. Add its Bech32 HRP to BECH32_HRP if it supports native SegWit.
  3. Add its SLIP-44 coin type to BIP44_COIN_TYPES.
  4. Add a COIN_CONFIG entry in wallet.py listing the supported address types.

For EVM chains, add the name to EVM_COMPATIBLE_NETWORKS (in addresses.py) and to COIN_CONFIG — no version bytes are needed.