12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- """
- examples/bip_hd.py: Usage examples for the MMGen BIP-32/-44 hierarchical/deterministic library
- """
- from mmgen.cfg import Config
- from mmgen.util import fmt
- from mmgen.bip39 import bip39
- from mmgen.bip_hd import MasterNode, BipHDNode
- cfg = Config()
- bip39_mnemonic = 'cat swing flag economy stadium alone churn speed unique patch report train'
- seed = bip39().generate_seed(bip39_mnemonic.split())
- m = MasterNode(cfg, seed)
- dfl_pub_chain = m.to_chain(idx=0, coin='ltc', addr_type='bech32')
- dfl_chg_chain = m.to_chain(idx=1, coin='ltc', addr_type='bech32')
- print('Default path (LTC, bech32):\n')
- print(f' public chain xpub:\n {dfl_pub_chain.xpub}\n')
- print(f' internal chain xpub:\n {dfl_chg_chain.xpub}\n')
- print(f' public chain addr 0:\n {dfl_pub_chain.derive_public(0).address}\n')
- print(f' public chain addr 1:\n {dfl_pub_chain.derive_public(1).address}\n')
- dfl_pub_chain_from_path = BipHDNode.from_path(
- base_cfg = cfg,
- seed = seed,
-
-
- path_str = "m/84'/2'/0'/0",
- coin = 'ltc',
- addr_type = 'bech32')
- assert dfl_pub_chain_from_path.xpub == dfl_pub_chain.xpub
- master = m.init_cfg(coin='ltc', addr_type='bech32')
- purpose = master.derive_private()
- coin_type = purpose.derive_private()
- account = coin_type.derive_private(idx=0)
- pub_chain = account.derive_public(idx=0)
- assert pub_chain.xpub == dfl_pub_chain.xpub
- pub_chain_from_xpub = BipHDNode.from_extended_key(cfg, 'ltc', pub_chain.xpub)
- assert pub_chain_from_xpub.xpub == pub_chain.xpub
- nonstd_path = BipHDNode.from_path(
- base_cfg = cfg,
- seed = seed,
- path_str = "m/111'/222/333/444",
- coin = 'eth',
- addr_type = 'E',
- no_path_checks = True)
- print('Non-standard path (ETH):\n')
- print(f' xpub:\n {nonstd_path.xpub}\n')
- print(f' WIF key:\n {nonstd_path.privkey.wif}\n')
- print(f' address:\n {nonstd_path.address}\n')
- parsed_xpub = nonstd_path.key_extended(public=True)
- print('Default path parsed xpub:\n')
- print(fmt(str(parsed_xpub), indent=' '))
|