This package allows generating mnemonics, seeds, private/public keys and addresses for different types of cryptocurrencies. In particular:
- Mnemonic and seed generation as defined by BIP-0039
- Private key encryption/decryption as defined by BIP-0038
- Keys derivation as defined by:
- Derivation of a hierarchy of keys as defined by:
- Mnemonic and seed generation for Substrate (Polkadot/Kusama ecosystem)
- Keys derivation for Substrate (Polkadot/Kusama ecosystem, same of Polkadot-JS)
- Keys and addresses generation for Cardano (Byron-Legacy, Byron-Icarus and Shelley, same of Ledger and AdaLite/Yoroi wallets)
- Mnemonic and seed generation for Monero
- Keys and addresses/subaddresses generation for Monero (same of official Monero wallet)
- Mnemonic and seed generation for Algorand (Algorand 25-word mnemonic)
- Mnemonic and seed generation like Electrum wallet (v1 and v2)
- Keys derivation like Electrum wallet (v1 and v2)
- Generation of keys from a passphrase chosen by the user ("brainwallet")
Other implemented functionalities:
- Parse BIP-0032 derivation paths
- Parse Substrate derivation paths
- Extended key serialization as defined by SLIP-0032
- Encode/Decode addresses for all the supported coins
- Encode/Decode WIF
- Encode/Decode base58 and base58 monero
- Encode/Decode ss58
- Encode/Decode bech32 and bech32m
- Encode/Decode Bitcoin Cash bech32
- Get token account addresses for SPL tokens (i.e. Solana tokens)
Package dependencies:
- cbor2 for CBOR encoding/decoding
- crcmod for CRC computation
- pycryptodome for cryptographic functions
- coincurve for secp256k1 curve
- ecdsa for nist256p1 and secp256k1 curves
- ed25519-blake2b for ed25519-blake2b curve
- pynacl for ed25519 curve
- py-sr25519-bindings for sr25519 curve
Please note that, for the py-sr25519-bindings library, Rust is required to be installed.
Supported BIP coins:
- Akash Network
- Algorand
- Aptos
- Arbitrum
- Avalanche (all the 3 chains)
- Axelar
- Band Protocol
- Binance Chain
- Binance Smart Chain
- Bitcoin (and related test net)
- Bitcoin Cash (and related test net)
- Bitcoin Cash Simple Ledger Protocol (and related test net)
- BitcoinSV (and related test net)
- Cardano (Byron-Legacy, Byron-Icarus and Shelley)
- Celestia
- Celo
- Certik
- Cosmos
- Dash (and related test net)
- Dogecoin (and related test net)
- dYdX
- eCash (and related test net)
- Elrond (MultiversX)
- EOS
- Ergo (and related test net)
- Ethereum
- Ethereum Classic
- Fantom Opera
- Filecoin
- Fetch.ai
- Harmony One (Ethereum and Cosmos addresses)
- Huobi Heco Chain
- IRIS Network
- Kava
- Kusama (based on BIP44 and ed25519 SLIP-0010, like TrustWallet, it won't generate the same addresses of Polkadot-JS)
- Litecoin (and related test net)
- Metis
- Monero (based on BIP44 and secp256k1 or ed25519 SLIP-0010, it won't generate the same addresses of the official wallets, but it supports subaddresses generation)
- Nano
- Near Protocol
- NEO (legacy and N3)
- Neutron
- Nimiq
- OKEx Chain (Ethereum and Cosmos addresses)
- Ontology
- Optimism
- Osmosis
- Pi Network
- Polkadot (based on BIP44 and ed25519 SLIP-0010, like TrustWallet, it won't generate the same addresses of Polkadot-JS)
- Polygon
- Ripple
- Secret Network
- Solana
- Stafi (Cosmos)
- Stellar
- Sui (only ed25519)
- Terra
- Tezos
- Theta Network
- Tron
- VeChain
- Verge
- Zcash (and related test net)
- Zilliqa
Supported Substrate coins:
- Acala
- Bifrost
- Chainx
- Edgeware
- Karura
- Kusama
- Moonbeam
- Moonriver
- Phala Network
- Plasm Network
- Sora
- Stafi
- Polkadot
- Generic Substrate coin
For what regards Monero, it's also possible to generate the same addresses of the official wallets without using BIP44 derivation.
Clearly, for those coins that support Smart Contracts (e.g. Ethereum, Tron, ...), the generated keys and addresses are valid for all the related tokens.
For the secp256k1 curve, it's possible to use either the coincurve or the ecdsa library. coincurve is much faster since it's a Python wrapper to the secp256k1 C library, while ecdsa is a pure Python implementation.
By default coincurve will be used, but it's possible to disable it when installing.
To install the package:
-
Default installation (coincurve will be used for secp256k1)
-
Using pip, from this directory (local):
pip install .
-
Using pip, from PyPI:
pip install bip_utils
-
-
Alternative installation (ecdsa will be used for secp256k1)
-
Using setuptools:
python setup.py install --coincurve=0
-
Edit the file bip_utils/ecc/conf.py by setting
USE_COINCURVE
toFalse
, then install with pip:pip install .
-
NOTES:
- if you are using an Apple M1, please make sure to update coincurve to version 17.0.0
- in case of problems when building the ed25519_blake2b library, you can try one of the prebuilt wheels here
Install develop dependencies:
pip install -r requirements-dev.txt
To run tests:
python -m unittest discover
To run tests with coverage:
coverage run -m unittest discover
coverage report
To run code analysis, just execute the analyze_code
script.
- BIP-0039
- Algorand mnemonic
- Electrum mnemonic
- Monero mnemonic
- BIP-0038
- BIP-0032
- BIP-0044
- Brainwallet
- Cardano
- Electrum
- Monero
- Substrate
- Utility libraries
The library documentation is available at bip-utils.readthedocs.io.
For some complete code examples (from mnemonic to keys generation), refer to the examples folder.
You know, I'm italian and I love drinking coffee (especially while coding 😃). So, if you'd like to buy me one:
- BTC:
bc1qq4r9cglwzd6f2hzxvdkucmdejvr9h8me5hy0k8
- ERC20/BEP20:
0xf84e4898E5E10bf1fBe9ffA3EEC845e82e364b5B
Thank you very much for your support.
This software is available under the MIT license.