restore from master public key with seed v4
authorThomasV <thomasv@gitorious>
Sun, 3 Nov 2013 13:14:35 +0000 (14:14 +0100)
committerThomasV <thomasv@gitorious>
Sun, 3 Nov 2013 13:14:35 +0000 (14:14 +0100)
electrum
gui/qt/installwizard.py
lib/commands.py
lib/wallet.py

index ecef1f3..b7fd394 100755 (executable)
--- a/electrum
+++ b/electrum
@@ -365,15 +365,13 @@ if __name__ == '__main__':
 
     elif cmd.name == 'getconfig':
         key = args[1]
-        print_msg(config.get(key))
+        out = config.get(key)
+        print_msg(out)
 
     elif cmd.name == 'setconfig':
         key, value = args[1:3]
-        if key not in ['seed', 'seed_version', 'master_public_key', 'use_encryption']:
-            config.set_key(key, value, True)
-            print_msg(True)
-        else:
-            print_msg(False)
+        config.set_key(key, value, True)
+        print_msg(True)
 
     elif cmd.name == 'password':
         new_password = prompt_password('New password:')
index 1e66df7..884186c 100644 (file)
@@ -166,10 +166,10 @@ class InstallWizard(QDialog):
         grid.addWidget(mpk_e, 0, 1)
 
         label = QLabel(_("Chain")) 
-        grid.addWidget(label, 1, 0)
+        #grid.addWidget(label, 1, 0)
         chain_e = QTextEdit()
         chain_e.setMaximumHeight(100)
-        grid.addWidget(chain_e, 1, 1)
+        #grid.addWidget(chain_e, 1, 1)
 
         vbox.addLayout(grid)
 
@@ -294,11 +294,11 @@ class InstallWizard(QDialog):
 
         elif action == 'watching':
             # ask for seed and gap.
-            K, chain = self.mpk_dialog()
-            if not K or not chain:
+            mpk = self.mpk_dialog()
+            if not mpk:
                 return
             wallet.seed = ''
-            wallet.create_watching_only_wallet(chain,K)
+            wallet.create_watching_only_wallet(mpk)
 
 
         else: raise
index b430bf1..dc3a9fe 100644 (file)
@@ -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('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('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('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>')
@@ -214,6 +215,9 @@ class Commands:
     def getservers(self):
         return self.network.get_servers()
 
+    def getmpk(self):
+        return self.wallet.get_master_public_key()
+
     def getseed(self):
         mnemonic = self.wallet.get_mnemonic(self.password)
         seed = self.wallet.get_seed(self.password)
index 10a9c59..2088c01 100644 (file)
@@ -339,7 +339,16 @@ class Wallet:
         self.storage.put('seed', self.seed, 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 = ""
         self.master_public_keys = {
             "m/0'/": (c0, K0, cK0),
@@ -350,7 +359,8 @@ class Wallet:
 
     def create_accounts(self): 
         if self.seed_version == 4:
-            self.create_old_account()
+            mpk = OldAccount.mpk_from_seed(self.seed)
+            self.create_old_account(mpk)
         else:
             # create default account
             self.create_master_keys('1')
@@ -513,8 +523,7 @@ class Wallet:
             self.set_label(k, name)
 
 
-    def create_old_account(self):
-        mpk = OldAccount.mpk_from_seed(self.seed)
+    def create_old_account(self, mpk):
         self.storage.put('master_public_key', mpk, True)
         self.accounts[0] = OldAccount({'mpk':mpk, 0:[], 1:[]})
         self.save_accounts()