Skip to content

A Python library for implementation of Bitcoin Improvement Proposal - 0038 / BIP38 protocol.

License

Notifications You must be signed in to change notification settings

talonlab/python-bip38

Repository files navigation

Desktop BIP38

Bitcoin Improvement Proposal - 0038 / BIP38

Build Status PyPI Version Documentation Status PyPI License PyPI Python Version Coverage Status

A Python library for the implementation of Bitcoin Improvement Proposal - 0038 / (BIP38) protocol. This library supports both No EC-multiply and EC-multiply modes and is compatible with over 150+ cryptocurrencies. It's specifically tailored for Pay-to-PubKey-Hash (P2PKH) address types.

For more info see the Passphrase-protected private key - BIP38 spec.

Installation

The easiest way to install bip38 is via pip:

pip install bip38

If you want to run the latest version of the code, you can install from the git:

pip install git+ssh://github.com/talonlab/python-bip38.git

Quick Usage

no EC multiply:
#!/usr/bin/env python3

from typing import List

import json

from bip38 import BIP38
from bip38.cryptocurrencies import Bitcoin as Cryptocurrency
from bip38.wif import private_key_to_wif

# Private key
PRIVATE_KEY: str = "cbf4b9f70470856bb4f40f80b87edb90865997ffee6df315ab166d713af433a5"
# Passphrase / password
PASSPHRASE: str = "bip38"  # u"\u03D2\u0301\u0000\U00010400\U0001F4A9"
# Network type
NETWORK:str = "mainnet"
# To show detail
DETAIL: bool = True
# Initialize BIP38 instance
bip38: BIP38 = BIP38(
    cryptocurrency=Cryptocurrency, network=NETWORK
)
# Wallet Import Format's
WIFs: List[str] = [
    private_key_to_wif(
        private_key=PRIVATE_KEY, cryptocurrency=Cryptocurrency, network=NETWORK, wif_type="wif"
    ),  # No compression
    private_key_to_wif(
        private_key=PRIVATE_KEY, cryptocurrency=Cryptocurrency, network=NETWORK, wif_type="wif-compressed"
    )  # Compression
]

for WIF in WIFs:
    
    print("WIF:", WIF)

    encrypted_wif: str = bip38.encrypt(
        wif=WIF, passphrase=PASSPHRASE
    )
    print("BIP38 Encrypted WIF:", encrypted_wif)
    
    print("BIP38 Decrypted:", json.dumps(bip38.decrypt(
        encrypted_wif=encrypted_wif, passphrase=PASSPHRASE, detail=DETAIL
    ), indent=4))

    print("-" * 125)
Output
WIF: 5KN7MzqK5wt2TP1fQCYyHBtDrXdJuXbUzm4A9rKAteGu3Qi5CVR
BIP38 Encrypted WIF: 6PRVWUbm1BX3fNUTgZoCYj9VLAQzxB9daqVfr4TgbhxegTKoSz9jRDks9a
BIP38 Decrypted: {
    "wif": "5KN7MzqK5wt2TP1fQCYyHBtDrXdJuXbUzm4A9rKAteGu3Qi5CVR",
    "private_key": "cbf4b9f70470856bb4f40f80b87edb90865997ffee6df315ab166d713af433a5",
    "wif_type": "wif",
    "public_key": "04d2ce831dd06e5c1f5b1121ef34c2af4bcb01b126e309234adbc3561b60c9360ea7f23327b49ba7f10d17fad15f068b8807dbbc9e4ace5d4a0b40264eefaf31a4",
    "public_key_type": "uncompressed",
    "seed": null,
    "address": "1Jq6MksXQVWzrznvZzxkV6oY57oWXD9TXB",
    "lot": null,
    "sequence": null
}
-----------------------------------------------------------------------------------------------------------------------------
WIF: L44B5gGEpqEDRS9vVPz7QT35jcBG2r3CZwSwQ4fCewXAhAhqGVpP
BIP38 Encrypted WIF: 6PYNKZ1EBitZbP8ctdXG5xkpsFAtgd7c9JQdLCXqbhBRbANSnuUK6PgQdV
BIP38 Decrypted: {
    "wif": "L44B5gGEpqEDRS9vVPz7QT35jcBG2r3CZwSwQ4fCewXAhAhqGVpP",
    "private_key": "cbf4b9f70470856bb4f40f80b87edb90865997ffee6df315ab166d713af433a5",
    "wif_type": "wif-compressed",
    "public_key": "02d2ce831dd06e5c1f5b1121ef34c2af4bcb01b126e309234adbc3561b60c9360e",
    "public_key_type": "compressed",
    "seed": null,
    "address": "164MQi977u9GUteHr4EPH27VkkdxmfCvGW",
    "lot": null,
    "sequence": null
}
-----------------------------------------------------------------------------------------------------------------------------
EC multiply:
#!/usr/bin/env python3

from typing import List

import json
import os

from bip38 import BIP38
from bip38.cryptocurrencies import Bitcoin as Cryptocurrency

# Passphrase / password
PASSPHRASE: str = "bip38"  # u"\u03D2\u0301\u0000\U00010400\U0001F4A9"
# Network type
NETWORK: str = "mainnet"
# To show detail
DETAIL: bool = True
# Initialize BIP38 instance
bip38: BIP38 = BIP38(
    cryptocurrency=Cryptocurrency, network=NETWORK
)
# List of owner salt, seed, public key type, lot, and sequence kwargs
KWARGS: List[dict] = [
    # Random owner salt & seed, No compression, No lot & sequence
    {"owner_salt": os.urandom(8), "seed": os.urandom(24), "wif_type": "wif", "lot": None, "sequence": None},
    # Random owner salt & seed, No compression, With lot & sequence
    {"owner_salt": os.urandom(8), "seed": os.urandom(24), "wif_type": "wif", "lot": 863741, "sequence": 1},
    # Random owner salt & seed, Compression, No lot & sequence
    {"owner_salt": os.urandom(8), "seed": os.urandom(24), "wif_type": "wif-compressed", "lot": None, "sequence": None},
    # Random owner salt & seed, Compression, With lot & sequence
    {"owner_salt": os.urandom(8), "seed": os.urandom(24), "wif_type": "wif-compressed", "lot": 863741, "sequence": 1},
    # With owner salt & seed, No compression, No lot & sequence
    {"owner_salt": "75ed1cdeb254cb38", "seed": "99241d58245c883896f80843d2846672d7312e6195ca1a6c", "wif_type": "wif", "lot": None, "sequence": None},
    # With owner salt & seed, No compression, With lot & sequence
    {"owner_salt": "75ed1cdeb254cb38", "seed": "99241d58245c883896f80843d2846672d7312e6195ca1a6c", "wif_type": "wif", "lot": 567885, "sequence": 1},
    # With owner salt & seed, Compression, No lot & sequence
    {"owner_salt": "75ed1cdeb254cb38", "seed": "99241d58245c883896f80843d2846672d7312e6195ca1a6c", "wif_type": "wif-compressed", "lot": None, "sequence": None},
    # With owner salt & seed, Compression, With lot & sequence
    {"owner_salt": "75ed1cdeb254cb38", "seed": "99241d58245c883896f80843d2846672d7312e6195ca1a6c", "wif_type": "wif-compressed", "lot": 369861, "sequence": 1},
]

for kwarg in KWARGS:
    
    intermediate_passphrase: str = bip38.intermediate_code(
        passphrase=PASSPHRASE, owner_salt=kwarg["owner_salt"], lot=kwarg["lot"], sequence=kwarg["sequence"]
    )
    print("Intermediate Passphrase:", intermediate_passphrase)

    encrypted_wif: dict = bip38.create_new_encrypted_wif(
        intermediate_passphrase=intermediate_passphrase, wif_type=kwarg["wif_type"], seed=kwarg["seed"],
    )
    print("Encrypted WIF:", json.dumps(encrypted_wif, indent=4))

    print("Confirm Code:", json.dumps(bip38.confirm_code(
        passphrase=PASSPHRASE, confirmation_code=encrypted_wif["confirmation_code"], detail=DETAIL
    ), indent=4))

    print("BIP38 Decrypted:", json.dumps(bip38.decrypt(
        encrypted_wif=encrypted_wif["encrypted_wif"], passphrase=PASSPHRASE, detail=DETAIL
    ), indent=4))

    print("-" * 125)
Output
Intermediate Passphrase: passphrasemG6Ae7PYWEuso54V4dMKFK7mpFPz4t1T1BhywtvNVt7E4xDM8Vq8xo68K1DdW9
Encrypted WIF: {
    "encrypted_wif": "6PfQma2dv1Hov8kSobbZapHKA69g96oGWA8rwfcDP4ZKs4ncqPeJP23qnL",
    "confirmation_code": "cfrm38V5Txsng8kFerZPprMH9LjHnDTv22JzroUqHwZN1B9xxoB6PU3UtC5o12wZspe21Uec33W",
    "public_key": "049a25850934fd16bc108046a60794a18cf27ec32f1ad5de75d6571aecc889ff7f30135195c69931115a9f2bf4262ee1dba707021dacd4e0bf68da195f60727643",
    "seed": "d937267be638947d6dc7971f9781ce61076847b490b2dd06",
    "public_key_type": "uncompressed",
    "address": "1QAWVYDpESZ2afxFnbWS5G64EQfzo2imNR"
}
Confirm Code: {
    "public_key": "049a25850934fd16bc108046a60794a18cf27ec32f1ad5de75d6571aecc889ff7f30135195c69931115a9f2bf4262ee1dba707021dacd4e0bf68da195f60727643",
    "public_key_type": "uncompressed",
    "address": "1QAWVYDpESZ2afxFnbWS5G64EQfzo2imNR",
    "lot": null,
    "sequence": null
}
BIP38 Decrypted: {
    "wif": "5KXXTS7ULYo1kxgirDgRfzviTEocKGLtTV9SUHHbRb7z2AEVYVB",
    "private_key": "e155b57cb4d94ef4d2b5c32879ffaad851da0b20a10deb392c31404cc29637a4",
    "wif_type": "wif",
    "public_key": "049a25850934fd16bc108046a60794a18cf27ec32f1ad5de75d6571aecc889ff7f30135195c69931115a9f2bf4262ee1dba707021dacd4e0bf68da195f60727643",
    "public_key_type": "uncompressed",
    "seed": "d937267be638947d6dc7971f9781ce61076847b490b2dd06",
    "address": "1QAWVYDpESZ2afxFnbWS5G64EQfzo2imNR",
    "lot": null,
    "sequence": null
}
-----------------------------------------------------------------------------------------------------------------------------
Intermediate Passphrase: passphraseeX6YjBj1AXhiw28iQfnn1d5N6Lsf3crrsmxQMaHco4Kpzoymah46hP5bbQqRva
Encrypted WIF: {
    "encrypted_wif": "6PgRJMfKzjt6puxjobszrdtDa4KeRT5dRNwSaqj8BtQAvsUJLz7XifLqxf",
    "confirmation_code": "cfrm38V8kgweU6FKDGY1pMtucLfBTp5bD3QMd64GmRJtVR8ifZaynoLDW8kHY9rACq3Xvrdpe2R",
    "public_key": "040bf1d82b01b2691aaf143991dbaf3cea58cafd74b4377536a1f4da684151151c44118b137652df3bc328c7bb07b9aefa94a6194e8a1b9034265100df99740819",
    "seed": "73123c97834cc52fe937e29d33b86a12085a241e347dffc5",
    "public_key_type": "uncompressed",
    "address": "1Pd8Scd8KfhzLSzyLgMgLKc58tk9f3dnD5"
}
Confirm Code: {
    "public_key": "040bf1d82b01b2691aaf143991dbaf3cea58cafd74b4377536a1f4da684151151c44118b137652df3bc328c7bb07b9aefa94a6194e8a1b9034265100df99740819",
    "public_key_type": "uncompressed",
    "address": "1Pd8Scd8KfhzLSzyLgMgLKc58tk9f3dnD5",
    "lot": 863741,
    "sequence": 1
}
BIP38 Decrypted: {
    "wif": "5J3W72BqJ7YFEkJR8KuGmHRXdr8AJUnKT1oKp6hQAtx8bKVgmqU",
    "private_key": "1e0223706880eebc96470b0629262e31a828992e0f531c6e4793cfee9d30a694",
    "wif_type": "wif",
    "public_key": "040bf1d82b01b2691aaf143991dbaf3cea58cafd74b4377536a1f4da684151151c44118b137652df3bc328c7bb07b9aefa94a6194e8a1b9034265100df99740819",
    "public_key_type": "uncompressed",
    "seed": "73123c97834cc52fe937e29d33b86a12085a241e347dffc5",
    "address": "1Pd8Scd8KfhzLSzyLgMgLKc58tk9f3dnD5",
    "lot": 863741,
    "sequence": 1
}
-----------------------------------------------------------------------------------------------------------------------------
Intermediate Passphrase: passphraseoCyP3atnoAxv9o8Nhfi7S6fsucu46s9wpDxS4cBGeVPhNQxSBrps3yR4P4Z7Mk
Encrypted WIF: {
    "encrypted_wif": "6PnR1W6XPrx6RK4mgGCjwx3c24zs6peuyBiiKoYfwGpWoJw8A9HeiGz1wf",
    "confirmation_code": "cfrm38VUHiVy4jMqxJHqQdsuaLkMN3LxdseumiHcQQMCnnYaRtkZ5oQEtfWdhnbGCjV1hXU7zqc",
    "public_key": "02b12e27280a74e55d979d23eb2dc4c107028236512bdbdbed3ba0d3c139500522",
    "seed": "ab0ed77af04c331801afcf61a27c787e7e27de179230d41e",
    "public_key_type": "compressed",
    "address": "17vbPdAUMftcA5qHXTVS6KiAWh3psHq8Kn"
}
Confirm Code: {
    "public_key": "02b12e27280a74e55d979d23eb2dc4c107028236512bdbdbed3ba0d3c139500522",
    "public_key_type": "compressed",
    "address": "17vbPdAUMftcA5qHXTVS6KiAWh3psHq8Kn",
    "lot": null,
    "sequence": null
}
BIP38 Decrypted: {
    "wif": "L4bxdGanNrHTkDHzQWAwn7y8KhVzAsuuXUzqK8Ah6822MbTy9HMt",
    "private_key": "dc4eb85c52ad9d82152a0ecd9542202a164556eb1f444a59da5936269527278e",
    "wif_type": "wif-compressed",
    "public_key": "02b12e27280a74e55d979d23eb2dc4c107028236512bdbdbed3ba0d3c139500522",
    "public_key_type": "compressed",
    "seed": "ab0ed77af04c331801afcf61a27c787e7e27de179230d41e",
    "address": "17vbPdAUMftcA5qHXTVS6KiAWh3psHq8Kn",
    "lot": null,
    "sequence": null
}
-----------------------------------------------------------------------------------------------------------------------------
Intermediate Passphrase: passphrasedCiMgYvgiaHcR6kGF5SLANuCte7ggrupYpsLbe9kNtmqx4XQF2LGBiPZSbwGWk
Encrypted WIF: {
    "encrypted_wif": "6PoNSsfzTSpKZreygc8DVCMTjFXVwMNw6ddpXSCkgYYWw3uHNXs2BRkx8M",
    "confirmation_code": "cfrm38VXQMwDqnPHg3NB2G35qxgadVCfoC5SjntbhaBxAe5VX9sasVHqQHKV44XLLpJqy2z4iu6",
    "public_key": "033c0c467652bb0f8227c014551af8cc3cd4c4f0984f712ddc94dc49723370b8e7",
    "seed": "bad4ce4f6e1a6aa226cd89602d92c636d4ab23891808cc6e",
    "public_key_type": "compressed",
    "address": "1JkLXpEAwGBcViwwVDXfiURfd4dg8A4Qos"
}
Confirm Code: {
    "public_key": "033c0c467652bb0f8227c014551af8cc3cd4c4f0984f712ddc94dc49723370b8e7",
    "public_key_type": "compressed",
    "address": "1JkLXpEAwGBcViwwVDXfiURfd4dg8A4Qos",
    "lot": 863741,
    "sequence": 1
}
BIP38 Decrypted: {
    "wif": "L4KTQ9h5uUWy6r4tXC1wDCfGJbB31nX4Wmfz6FKHAjGxncnBLoh4",
    "private_key": "d3d13893951d6256e5633f6a003936214c4b0e9f1211682af1df858464d9ea52",
    "wif_type": "wif-compressed",
    "public_key": "033c0c467652bb0f8227c014551af8cc3cd4c4f0984f712ddc94dc49723370b8e7",
    "public_key_type": "compressed",
    "seed": "bad4ce4f6e1a6aa226cd89602d92c636d4ab23891808cc6e",
    "address": "1JkLXpEAwGBcViwwVDXfiURfd4dg8A4Qos",
    "lot": 863741,
    "sequence": 1
}
-----------------------------------------------------------------------------------------------------------------------------
Intermediate Passphrase: passphraseondJwvQGEWFNrMBiUhdVNwLNdPDHBRrVZkVuH3dVubC4JcuxLnKWFep8uGwhth
Encrypted WIF: {
    "encrypted_wif": "6PfXN4Up17PgFdoxEBVwAxRuaQ1UderDKQ2q6nGCrhLVPD7GS3awBfKtox",
    "confirmation_code": "cfrm38V5qTEpyzqDDgry1mEmRPEn4xaXC74tKbH9jfSpHkfiud3SW9dRSmhZHuTwvW78eVUWwjx",
    "public_key": "04bc2b0adc1106e45fa86a3507cbec5bc834c33780c7ae774b885ac50c8489fc481ae5198457e5733e3f91e2b68df10ba55fa0408a918e4f37e475591cfa41d31d",
    "seed": "99241d58245c883896f80843d2846672d7312e6195ca1a6c",
    "public_key_type": "uncompressed",
    "address": "12NzK7AbrtY5evVfDb7nnM5DNtbjGKBB6g"
}
Confirm Code: {
    "public_key": "04bc2b0adc1106e45fa86a3507cbec5bc834c33780c7ae774b885ac50c8489fc481ae5198457e5733e3f91e2b68df10ba55fa0408a918e4f37e475591cfa41d31d",
    "public_key_type": "uncompressed",
    "address": "12NzK7AbrtY5evVfDb7nnM5DNtbjGKBB6g",
    "lot": null,
    "sequence": null
}
BIP38 Decrypted: {
    "wif": "5KZ2wb3ANziUbxcxLDq6nK854r6wF3qnxvk6rBVnKhdrRS3YcHb",
    "private_key": "e4c27e23f2b243ca0cea2695362a48aaefba35951bcbaad9ebab1d7ab2a1b8e9",
    "wif_type": "wif",
    "public_key": "04bc2b0adc1106e45fa86a3507cbec5bc834c33780c7ae774b885ac50c8489fc481ae5198457e5733e3f91e2b68df10ba55fa0408a918e4f37e475591cfa41d31d",
    "public_key_type": "uncompressed",
    "seed": "99241d58245c883896f80843d2846672d7312e6195ca1a6c",
    "address": "12NzK7AbrtY5evVfDb7nnM5DNtbjGKBB6g",
    "lot": null,
    "sequence": null
}
-----------------------------------------------------------------------------------------------------------------------------
Intermediate Passphrase: passphraseb7ruSNPsLdQF6TuHGftP9MBJM9mzUFqEpr37Quzua67SzYyhXtgGg32Ukkif4w
Encrypted WIF: {
    "encrypted_wif": "6PgD5Q4BChU5kScKdbcbmdUtkEu9fBTDkB6EHmErH4kRyzveKRodpHzimL",
    "confirmation_code": "cfrm38V84rmYgaHJLLMVTcRmZwnBF7Jj9gShJpWMfsM16r7DS1paysBseVo7WhJ7BwZUfh9ts8a",
    "public_key": "0433f3d09ee3059b559194833063993626c6ce1bb25c3d3ee4e9b2d02ff7c3c6206d526a30d072c167176af1c45bf7331057c2ebc6701e3aebb74acdb3c2b9a5e5",
    "seed": "99241d58245c883896f80843d2846672d7312e6195ca1a6c",
    "public_key_type": "uncompressed",
    "address": "1NwyXJShcScbkpB9dUwPqR3fv39Krt9xqH"
}
Confirm Code: {
    "public_key": "0433f3d09ee3059b559194833063993626c6ce1bb25c3d3ee4e9b2d02ff7c3c6206d526a30d072c167176af1c45bf7331057c2ebc6701e3aebb74acdb3c2b9a5e5",
    "public_key_type": "uncompressed",
    "address": "1NwyXJShcScbkpB9dUwPqR3fv39Krt9xqH",
    "lot": 567885,
    "sequence": 1
}
BIP38 Decrypted: {
    "wif": "5JdgMq9wsmqtMJ7YD5vahf89vgHQgeAqJieAP2h664vUqxhMriv",
    "private_key": "6b9c6a32ae3b9d5fc2050f69e9f9825fece3276e3c979ae16e20c12f971de115",
    "wif_type": "wif",
    "public_key": "0433f3d09ee3059b559194833063993626c6ce1bb25c3d3ee4e9b2d02ff7c3c6206d526a30d072c167176af1c45bf7331057c2ebc6701e3aebb74acdb3c2b9a5e5",
    "public_key_type": "uncompressed",
    "seed": "99241d58245c883896f80843d2846672d7312e6195ca1a6c",
    "address": "1NwyXJShcScbkpB9dUwPqR3fv39Krt9xqH",
    "lot": 567885,
    "sequence": 1
}
-----------------------------------------------------------------------------------------------------------------------------
Intermediate Passphrase: passphraseondJwvQGEWFNrMBiUhdVNwLNdPDHBRrVZkVuH3dVubC4JcuxLnKWFep8uGwhth
Encrypted WIF: {
    "encrypted_wif": "6PnYeWbwUScx6DctoFqiJW2vDmsWCT6cVfwmjQXu8aTKLQ2aZfmin6RH6R",
    "confirmation_code": "cfrm38VUic4gbBuLjvrDaXgwMeK42YR5zGLjpgNDF6p7Ro4EVAe9HkeDhzNZxJU9PCJ7PsbHy5s",
    "public_key": "03bc2b0adc1106e45fa86a3507cbec5bc834c33780c7ae774b885ac50c8489fc48",
    "seed": "99241d58245c883896f80843d2846672d7312e6195ca1a6c",
    "public_key_type": "compressed",
    "address": "1AUJ4rSiyRd7CmHo6K6n12QPpa1vKW2LaG"
}
Confirm Code: {
    "public_key": "03bc2b0adc1106e45fa86a3507cbec5bc834c33780c7ae774b885ac50c8489fc48",
    "public_key_type": "compressed",
    "address": "1AUJ4rSiyRd7CmHo6K6n12QPpa1vKW2LaG",
    "lot": null,
    "sequence": null
}
BIP38 Decrypted: {
    "wif": "L4tPZwEYQ5k4qJVhDqdJWzzCwyjCR1YMsrDEp5L33YMf8eKHmk5o",
    "private_key": "e4c27e23f2b243ca0cea2695362a48aaefba35951bcbaad9ebab1d7ab2a1b8e9",
    "wif_type": "wif-compressed",
    "public_key": "03bc2b0adc1106e45fa86a3507cbec5bc834c33780c7ae774b885ac50c8489fc48",
    "public_key_type": "compressed",
    "seed": "99241d58245c883896f80843d2846672d7312e6195ca1a6c",
    "address": "1AUJ4rSiyRd7CmHo6K6n12QPpa1vKW2LaG",
    "lot": null,
    "sequence": null
}
-----------------------------------------------------------------------------------------------------------------------------
Intermediate Passphrase: passphraseb7ruSNDGP7cmpocKZC2U6hDfT4dFEPB2dpdr9UNjwwUW2tSYkKukFv4JNYnXAs
Encrypted WIF: {
    "encrypted_wif": "6PoG6xLK7sgeZP8gPzNmFvmp4serw1MTprunK29YwbwnxsnU7Jmb6EpHqs",
    "confirmation_code": "cfrm38VX3h421KiP57NBU3ohrBh1bAgBbMvqntvcqw6wfgq9EaBmDJxLx3Mq6hTmRxBnLzQa8kR",
    "public_key": "03bf9c150cef682e643e4745a4bba70fd183bf1726e3dd45d76fef599b39a3e1fc",
    "seed": "99241d58245c883896f80843d2846672d7312e6195ca1a6c",
    "public_key_type": "compressed",
    "address": "15u9QmfwXC5Hi9mK9qwHCuCdGCw1rPwmug"
}
Confirm Code: {
    "public_key": "03bf9c150cef682e643e4745a4bba70fd183bf1726e3dd45d76fef599b39a3e1fc",
    "public_key_type": "compressed",
    "address": "15u9QmfwXC5Hi9mK9qwHCuCdGCw1rPwmug",
    "lot": 369861,
    "sequence": 1
}
BIP38 Decrypted: {
    "wif": "L1HftYcdEQ3D7Vn6f1psXumjY5PLdtGLx781C2bLnzZcPFTM7gDQ",
    "private_key": "7963113c7ec95bedb41d415e393ea07edcdb2fe9ab080faededd38b210b320ff",
    "wif_type": "wif-compressed",
    "public_key": "03bf9c150cef682e643e4745a4bba70fd183bf1726e3dd45d76fef599b39a3e1fc",
    "public_key_type": "compressed",
    "seed": "99241d58245c883896f80843d2846672d7312e6195ca1a6c",
    "address": "15u9QmfwXC5Hi9mK9qwHCuCdGCw1rPwmug",
    "lot": 369861,
    "sequence": 1
}
-----------------------------------------------------------------------------------------------------------------------------

Development

To get started, just fork this repo, clone it locally, and run:

pip install -e .[tests,docs]

Testing

You can run the tests with:

coverage run -m pytest

To see the coverage:

coverage report

Or use tox to run the complete suite against the full set of build targets, or pytest to run specific tests against a specific version of Python.

Contributing

Feel free to open an issue if you find a problem, or a pull request if you've solved an issue. And also any help in testing, development, documentation and other tasks is highly appreciated and useful to the project. There are tasks for contributors of all experience levels.

For more information, see the CONTRIBUTING.md file.

Supported Cryptocurrencies

This module supports more than 150+ cryptocurrencies, including the following:

Name
Network
WIF Prefix
Address Prefix
Adcoinmainnet0xb00x17
Anonmainnet0x800x582
Argoneummainnet0xbf0x32
Artaxmainnet0x970x17
Aryacoinmainnet0x970x17
Asiacoinmainnet0x970x17
Auroracoinmainnet0x970x17
Avianmainnet0x800x3c
Axemainnet0xcc0x37
Batamainnet0xa40x19
BeetleCoinmainnet0x990x1a
BelaCoinmainnet0x990x19
BitCloudmainnet0x990x19
BitSendmainnet0xcc0x66
Bitcoinmainnet0x800x00
testnet0xef0x6f
regtest0xef0x6f
BitcoinAtommainnet0x800x17
BitcoinGoldmainnet0x800x26
BitcoinGreenmainnet0x2e0x26
BitcoinPlusmainnet0x990x19
BitcoinPrivatemainnet0x800x1325
testnet0xef0x1957
BitcoinSVmainnet0x800x00
BitcoinZmainnet0x800x1cb8
Bitcoremainnet0x800x03
Blackcoinmainnet0x990x19
BlockStampmainnet0x800x00
Blocknodemainnet0x4b0x19
testnet0x890x55
Bolivarcoinmainnet0xd50x55
BritCoinmainnet0x990x19
CPUChainmainnet0x800x1c
CanadaeCoinmainnet0x9c0x1c
Cannacoinmainnet0x9c0x1c
Clamsmainnet0x850x89
ClubCoinmainnet0x990x1c
Compcoinmainnet0x9c0x1c
CranePaymainnet0x7b0x1c
Cravemainnet0x990x46
Dashmainnet0xcc0x4c
testnet0xef0x8c
DeepOnionmainnet0x9f0x1f
Defcoinmainnet0x9e0x1e
Denariusmainnet0x9e0x1e
Diamondmainnet0xda0x5a
DigiBytemainnet0x800x1e
Digitalcoinmainnet0x9e0x1e
Divimainnet0xd40x1e
testnet0xd40x1e
Dogecoinmainnet0xf10x1e
testnet0xf10x71
EDRCoinmainnet0xdd0x5d
Ecoinmainnet0xdc0x5c
Einsteiniummainnet0xa10x21
Elastosmainnet0x800x21
Energimainnet0x6a0x21
EuropeCoinmainnet0xa80x21
Evrmoremainnet0x800x21
testnet0xef0x6f
ExclusiveCoinmainnet0xa10x21
FIXmainnet0x3c0x23
testnet0xed0x4c
Feathercoinmainnet0x8e0x0e
Firomainnet0xd20x52
Firstcoinmainnet0xa30x23
Flashcoinmainnet0xc40x44
Fluxmainnet0x800x1cb8
Foxdcoinmainnet0x800x23
testnet0xef0x5f
FujiCoinmainnet0xa40x24
GCRCoinmainnet0x9a0x26
GameCreditsmainnet0xa60x26
GoBytemainnet0xc60x26
Gridcoinmainnet0xbe0x3e
GroestlCoinmainnet0x800x24
testnet0xef0x6f
Guldenmainnet0x620x26
Helleniccoinmainnet0xb00x30
Hempcoinmainnet0xa80x28
Horizenmainnet0x800x2089
Hushmainnet0x800x1cb8
IXCoinmainnet0x800x8a
InsaneCoinmainnet0x370x66
InternetOfPeoplemainnet0x310x75
Jumbucksmainnet0xab0x2b
Kobocoinmainnet0xa30x23
Komodomainnet0xbc0x3c
LBRYCreditsmainnet0x1c0x55
Landcoinmainnet0xb00x30
Linxmainnet0xcb0x4b
Litecoinmainnet0xb00x30
testnet0xef0x6f
LitecoinCashmainnet0xb00x1c
LitecoinZmainnet0x800xab3
Lkrcoinmainnet0xb00x30
Lynxmainnet0xad0x2d
Mazacoinmainnet0xe00x32
Megacoinmainnet0xb20x32
Minexcoinmainnet0x800x4b
Monacoinmainnet0xb00x32
Monkmainnet0x370x33
Myriadcoinmainnet0xb20x32
NIXmainnet0x800x26
Namecoinmainnet0x800x34
Navcoinmainnet0x960x35
Nebliomainnet0xb50x35
Neoscoinmainnet0xb10x35
Neurocoinmainnet0xb50x35
NewYorkCoinmainnet0xbc0x3c
Novacoinmainnet0x880x08
NuBitsmainnet0x960x19
NuSharesmainnet0x950x3f
OKCashmainnet0x030x37
Omnimainnet0x800x00
testnet0xef0x6f
Onixmainnet0xcb0x4b
Particlmainnet0x6c0x38
Peercoinmainnet0xb70x37
Pesobitmainnet0xb70x37
Phoremainnet0xd40x37
Pinkcoinmainnet0x830x03
Pivxmainnet0xd40x1e
testnet0xef0x8b
PoSWCoinmainnet0xb70x37
Potcoinmainnet0xb70x37
ProjectCoinmainnet0x750x37
Putincoinmainnet0xb70x37
Qtummainnet0x800x3a
testnet0xef0x78
RSKmainnet0x800x00
testnet0xef0x6f
Rapidsmainnet0x2e0x3d
Ravencoinmainnet0x800x3c
testnet0x800x6f
Reddcoinmainnet0xbd0x3d
Ripplemainnet0x800x00
Ritocoinmainnet0x8b0x19
Rubycoinmainnet0xbc0x3c
Safecoinmainnet0xbd0x3d
Saluscoinmainnet0xbf0x3f
Scribemainnet0x6e0x3c
ShadowCashmainnet0xbf0x3f
testnet0xff0x7f
Slimcoinmainnet0x460x3f
testnet0x570x6f
Smileycoinmainnet0x050x19
Solarcoinmainnet0x920x12
Stashmainnet0xcc0x4c
testnet0xef0x8c
Stratismainnet0xbf0x3f
testnet0xbf0x41
Sugarchainmainnet0x800x3f
testnet0xef0x42
Syscoinmainnet0x800x3f
TOACoinmainnet0xc10x41
TWINSmainnet0x420x49
testnet0xed0x4c
ThoughtAImainnet0x7b0x07
UltimateSecureCashmainnet0xbf0x44
Unobtaniummainnet0xe00x82
Vcashmainnet0xc70x47
Vergemainnet0x9e0x1e
Vertcoinmainnet0x800x47
Viacoinmainnet0xc70x47
testnet0xff0x7f
VirtualCashmainnet0xc70x47
Vivomainnet0xc60x46
Voxelsmainnet0xc60x46
Wagerrmainnet0xc70x49
Whitecoinmainnet0xc90x49
Wincoinmainnet0xc90x49
XUEZmainnet0xd40x4b
Ycashmainnet0x800x1c28
ZClassicmainnet0x800x1cb8
Zcashmainnet0x800x1cb8
testnet0xef0x1d25
Zetacoinmainnet0xe00x50
ZooBCmainnet0x800x00
eGuldenmainnet0xb00x30

Donations

Buy me a coffee if You found this tool helpful:

  • Bitcoin - 16c7ajUwHEMaafrceuYSrd35SDjmfVdjoS
  • Ethereum / ERC20 - 0xD3cbCB0B6F82A03C715D665b72dC44CEf54e6D9B
  • Solana - 9cVoan5GvnpVvysEkFWEFR4k9cpTdWKmqQ6Gi7nwM5ES

Thank you very much for your support.

License

Distributed under the MIT license. See LICENSE for more information.