#!/usr/bin/env python # seedrecover.py -- Bitcoin mnemonic sentence recovery tool # Copyright (C) 2014-2017 Christopher Gurnee # # This program is free software: you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version # 2 of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see http://www.gnu.org/licenses/ # If you find this program helpful, please consider a small # donation to the developer at the following Bitcoin address: # # 3Au8ZodNHPei7MQiSVAWb7NB2yqsb48GW4 # # Thank You! # PYTHON_ARGCOMPLETE_OK - enables optional bash tab completion from __future__ import print_function from btcrecover import btcrseed import sys, multiprocessing if __name__ == "__main__": print("Starting", btcrseed.full_version()) btcrseed.register_autodetecting_wallets() mnemonic_sentence = btcrseed.main(sys.argv[1:]) if mnemonic_sentence: if not btcrseed.tk_root: # if the GUI is not being used btcrseed.print("Seed found:", mnemonic_sentence) # never dies from printing Unicode # print this if there's any chance of Unicode-related display issues if any(ord(c) > 126 for c in mnemonic_sentence): print("HTML encoded seed:", mnemonic_sentence.encode("ascii", "xmlcharrefreplace")) if btcrseed.tk_root: # if the GUI is being used btcrseed.show_mnemonic_gui(mnemonic_sentence) retval = 0 elif mnemonic_sentence is None: retval = 1 # An error occurred or Ctrl-C was pressed inside btcrseed.main() else: retval = 0 # "Seed not found" has already been printed to the console in btcrseed.main() # Wait for any remaining child processes to exit cleanly (to avoid error messages from gc) for process in multiprocessing.active_children(): process.join(1.0) sys.exit(retval)