Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions bsv/hd/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from .bip32 import Xkey, Xprv, Xpub, ckd, step_to_index, master_xprv_from_seed
from .bip32 import Xkey, Xprv, Xpub, ckd, step_to_index, master_xprv_from_seed, bip32_derive_xprv_from_mnemonic, \
bip32_derive_xprvs_from_mnemonic, bip32_derive_xkeys_from_xkey
from .bip39 import WordList, mnemonic_from_entropy, seed_from_mnemonic, validate_mnemonic
from .bip44 import derive_xkeys_from_xkey, derive_xprvs_from_mnemonic, derive_xprv_from_mnemonic
from .bip44 import derive_xkeys_from_xkey, derive_xprvs_from_mnemonic, derive_xprv_from_mnemonic, \
bip44_derive_xprv_from_mnemonic, bip44_derive_xprvs_from_mnemonic
74 changes: 49 additions & 25 deletions examples/hd.py
Original file line number Diff line number Diff line change
@@ -1,41 +1,65 @@
from typing import List
from bsv.hd import mnemonic_from_entropy, seed_from_mnemonic, master_xprv_from_seed
from bsv.hd import derive_xprvs_from_mnemonic, derive_xkeys_from_xkey
from bsv.constants import BIP32_DERIVATION_PATH, BIP44_DERIVATION_PATH

from bsv.hd import mnemonic_from_entropy, seed_from_mnemonic, master_xprv_from_seed, Xprv, derive_xprvs_from_mnemonic
# You can set custom derivation paths in your environment variables as well
# BIP32_DERIVATION_PATH = "m/"
# BIP44_DERIVATION_PATH = "m/44'/236'/0'"

#
# HD derivation
# HD derivation (mnemonic, master-xpublickey, master-xprivatekey)
#
entropy = 'cd9b819d9c62f0027116c1849e7d497f'

# snow swing guess decide congress abuse session subway loyal view false zebra
# Generate mnemonic from entropy
mnemonic: str = mnemonic_from_entropy(entropy)
print(mnemonic)
print("Mnemonic:", mnemonic)

seed: bytes = seed_from_mnemonic(mnemonic)
print(seed.hex())

master_xprv: Xprv = master_xprv_from_seed(seed)
print(master_xprv)
# Generate seed from mnemonic
seed = seed_from_mnemonic(mnemonic, lang='en')
print("Seed:", seed.hex())

# Generate master keys
master_xprv = master_xprv_from_seed(seed)
master_xpub = master_xprv.xpub()
print("Master xprv:", master_xprv)
print("Master xpub:", master_xpub)
print()
keys: List[Xprv] = derive_xprvs_from_mnemonic(mnemonic, path="m/44'/0'/0'", change=1, index_start=0, index_end=5)
for key in keys:
# XPriv to WIF
print(key.private_key().wif())

key_xpub = key.xpub()
# Derive keys from mnemonic using BIP32
keys_from_mnemonic_by_bip32 = derive_xprvs_from_mnemonic(
mnemonic, 0, 3, path=BIP32_DERIVATION_PATH, change=0
)

# XPub to public key
print(key_xpub.public_key().hex())
print("Keys from mnemonic by BIP32:")
print("Address 0:", keys_from_mnemonic_by_bip32[0].address())
print("Private key 1:", keys_from_mnemonic_by_bip32[1].private_key().wif())
print("Public key 2:", keys_from_mnemonic_by_bip32[2].public_key().hex())
print()

# XPub to address
print(key_xpub.public_key().address(), '\n')
# Derive keys from xpub using BIP32
keys_from_xpub_by_bip32 = derive_xkeys_from_xkey(
master_xpub, 0, 3, change=0
)

print("Keys from xpub by BIP32:")
print("Address 0:", keys_from_xpub_by_bip32[0].address())
print("Public key 2:", keys_from_xpub_by_bip32[2].public_key().hex())
print()

#
# random mnemonic
#
# Derive keys from mnemonic using BIP44
bip44_keys = derive_xprvs_from_mnemonic(
mnemonic, 0, 3, path=BIP44_DERIVATION_PATH, change=0
)

print("Keys from mnemonic by BIP44:")
print("Address 0:", bip44_keys[0].address())
print("Private key 1:", bip44_keys[1].private_key().wif())
print("Public key 2:", bip44_keys[2].public_key().hex())
print()
print(mnemonic_from_entropy())
print(mnemonic_from_entropy(lang='en'))
print(mnemonic_from_entropy(lang='zh-cn'))

# Loop through multiple derived keys
print("All BIP44 derived keys:")
for i, key in enumerate(bip44_keys):
print(f"Address {i}: {key.address()}")
print(f"Private key {i}: {key.private_key().wif()}")