electrum

Electrum Bitcoin wallet
git clone https://git.parazyd.org/electrum
Log | Files | Refs | Submodules

bip39_recovery.py (1285B)


      1 #!/usr/bin/env python3
      2 
      3 import sys
      4 import asyncio
      5 
      6 from electrum.util import json_encode, print_msg, create_and_start_event_loop, log_exceptions
      7 from electrum.simple_config import SimpleConfig
      8 from electrum.network import Network
      9 from electrum.keystore import bip39_to_seed
     10 from electrum.bip32 import BIP32Node
     11 from electrum.bip39_recovery import account_discovery
     12 
     13 try:
     14     mnemonic = sys.argv[1]
     15     passphrase = sys.argv[2] if len(sys.argv) > 2 else ""
     16 except Exception:
     17     print("usage: bip39_recovery <mnemonic> [<passphrase>]")
     18     sys.exit(1)
     19 
     20 loop, stopping_fut, loop_thread = create_and_start_event_loop()
     21 
     22 config = SimpleConfig()
     23 network = Network(config)
     24 network.start()
     25 
     26 @log_exceptions
     27 async def f():
     28     try:
     29         def get_account_xpub(account_path):
     30             root_seed = bip39_to_seed(mnemonic, passphrase)
     31             root_node = BIP32Node.from_rootseed(root_seed, xtype="standard")
     32             account_node = root_node.subkey_at_private_derivation(account_path)
     33             account_xpub = account_node.to_xpub()
     34             return account_xpub
     35         active_accounts = await account_discovery(network, get_account_xpub)
     36         print_msg(json_encode(active_accounts))
     37     finally:
     38         stopping_fut.set_result(1)
     39 
     40 asyncio.run_coroutine_threadsafe(f(), loop)