Browse Source

restore from master public key with seed v4

283
ThomasV 11 years ago
parent
commit
536c898b59
  1. 10
      electrum
  2. 10
      gui/qt/installwizard.py
  3. 4
      lib/commands.py
  4. 17
      lib/wallet.py

10
electrum

@ -365,15 +365,13 @@ if __name__ == '__main__':
elif cmd.name == 'getconfig': elif cmd.name == 'getconfig':
key = args[1] key = args[1]
print_msg(config.get(key)) out = config.get(key)
print_msg(out)
elif cmd.name == 'setconfig': elif cmd.name == 'setconfig':
key, value = args[1:3] key, value = args[1:3]
if key not in ['seed', 'seed_version', 'master_public_key', 'use_encryption']: config.set_key(key, value, True)
config.set_key(key, value, True) print_msg(True)
print_msg(True)
else:
print_msg(False)
elif cmd.name == 'password': elif cmd.name == 'password':
new_password = prompt_password('New password:') new_password = prompt_password('New password:')

10
gui/qt/installwizard.py

@ -166,10 +166,10 @@ class InstallWizard(QDialog):
grid.addWidget(mpk_e, 0, 1) grid.addWidget(mpk_e, 0, 1)
label = QLabel(_("Chain")) label = QLabel(_("Chain"))
grid.addWidget(label, 1, 0) #grid.addWidget(label, 1, 0)
chain_e = QTextEdit() chain_e = QTextEdit()
chain_e.setMaximumHeight(100) chain_e.setMaximumHeight(100)
grid.addWidget(chain_e, 1, 1) #grid.addWidget(chain_e, 1, 1)
vbox.addLayout(grid) vbox.addLayout(grid)
@ -294,11 +294,11 @@ class InstallWizard(QDialog):
elif action == 'watching': elif action == 'watching':
# ask for seed and gap. # ask for seed and gap.
K, chain = self.mpk_dialog() mpk = self.mpk_dialog()
if not K or not chain: if not mpk:
return return
wallet.seed = '' wallet.seed = ''
wallet.create_watching_only_wallet(chain,K) wallet.create_watching_only_wallet(mpk)
else: raise else: raise

4
lib/commands.py

@ -74,6 +74,7 @@ register_command('getconfig', 1, 1, False, False, False, 'Return a co
register_command('getpubkeys', 1, 1, False, True, False, 'Return the public keys for a wallet address', 'getpubkeys <bitcoin address>') register_command('getpubkeys', 1, 1, False, True, False, 'Return the public keys for a wallet address', 'getpubkeys <bitcoin address>')
register_command('getrawtransaction', 1, 2, True, False, False, 'Retrieve a transaction', 'getrawtransaction <txhash> <height>') register_command('getrawtransaction', 1, 2, True, False, False, 'Retrieve a transaction', 'getrawtransaction <txhash> <height>')
register_command('getseed', 0, 0, False, True, True, 'Print the generation seed of your wallet.') register_command('getseed', 0, 0, False, True, True, 'Print the generation seed of your wallet.')
register_command('getmpk', 0, 0, False, True, False, 'Return your wallet\'s master public key', 'getmpk')
register_command('help', 0, 1, False, False, False, 'Prints this help') register_command('help', 0, 1, False, False, False, 'Prints this help')
register_command('history', 0, 0, True, True, False, 'Returns the transaction history of your wallet') register_command('history', 0, 0, True, True, False, 'Returns the transaction history of your wallet')
register_command('importprivkey', 1, 1, False, True, True, 'Import a private key', 'importprivkey <privatekey>') register_command('importprivkey', 1, 1, False, True, True, 'Import a private key', 'importprivkey <privatekey>')
@ -214,6 +215,9 @@ class Commands:
def getservers(self): def getservers(self):
return self.network.get_servers() return self.network.get_servers()
def getmpk(self):
return self.wallet.get_master_public_key()
def getseed(self): def getseed(self):
mnemonic = self.wallet.get_mnemonic(self.password) mnemonic = self.wallet.get_mnemonic(self.password)
seed = self.wallet.get_seed(self.password) seed = self.wallet.get_seed(self.password)

17
lib/wallet.py

@ -339,7 +339,16 @@ class Wallet:
self.storage.put('seed', self.seed, True) self.storage.put('seed', self.seed, True)
self.storage.put('seed_version', self.seed_version, True) self.storage.put('seed_version', self.seed_version, True)
def create_watching_only_wallet(self, c0, K0): def create_watching_only_wallet(self, params):
K0, c0 = params
if not K0:
return
if not c0:
self.seed_version = 4
self.create_old_account(K0)
return
cK0 = "" cK0 = ""
self.master_public_keys = { self.master_public_keys = {
"m/0'/": (c0, K0, cK0), "m/0'/": (c0, K0, cK0),
@ -350,7 +359,8 @@ class Wallet:
def create_accounts(self): def create_accounts(self):
if self.seed_version == 4: if self.seed_version == 4:
self.create_old_account() mpk = OldAccount.mpk_from_seed(self.seed)
self.create_old_account(mpk)
else: else:
# create default account # create default account
self.create_master_keys('1') self.create_master_keys('1')
@ -513,8 +523,7 @@ class Wallet:
self.set_label(k, name) self.set_label(k, name)
def create_old_account(self): def create_old_account(self, mpk):
mpk = OldAccount.mpk_from_seed(self.seed)
self.storage.put('master_public_key', mpk, True) self.storage.put('master_public_key', mpk, True)
self.accounts[0] = OldAccount({'mpk':mpk, 0:[], 1:[]}) self.accounts[0] = OldAccount({'mpk':mpk, 0:[], 1:[]})
self.save_accounts() self.save_accounts()

Loading…
Cancel
Save