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 (
0x1CB8→t1…).
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
0x1Efor 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:
- Add its version bytes to
ADDRESS_VERSIONSinconstants.py(p2pkh,p2sh,private). - Add its Bech32 HRP to
BECH32_HRPif it supports native SegWit. - Add its SLIP-44 coin type to
BIP44_COIN_TYPES. - Add a
COIN_CONFIGentry inwallet.pylisting 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.