URI: 
       tupdate imported keys - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 194291c80b9c5dffdb407de2c037dabd5acd72a5
   DIR parent 650ef92c5f41a881788c7f490b77ad7979118cae
  HTML Author: ThomasV <thomasv@gitorious>
       Date:   Mon,  2 Jun 2014 08:59:41 +0200
       
       update imported keys
       
       Diffstat:
         M gui/qt/main_window.py               |      23 ++++++++++++++++++-----
         M lib/wallet.py                       |      18 ++++++++++++++++--
       
       2 files changed, 34 insertions(+), 7 deletions(-)
       ---
   DIR diff --git a/gui/qt/main_window.py b/gui/qt/main_window.py
       t@@ -187,10 +187,12 @@ class ElectrumWindow(QMainWindow):
        
            def load_wallet(self, wallet):
                import electrum
       +
                self.wallet = wallet
       +        self.update_wallet_format()
       +
                self.accounts_expanded = self.wallet.storage.get('accounts_expanded',{})
                self.current_account = self.wallet.storage.get("current_account", None)
       -
                title = 'Electrum ' + self.wallet.electrum_version + '  -  ' + self.wallet.storage.path
                if self.wallet.is_watching_only(): title += ' [%s]' % (_('watching only'))
                self.setWindowTitle( title )
       t@@ -213,6 +215,16 @@ class ElectrumWindow(QMainWindow):
                run_hook('load_wallet', wallet)
        
        
       +    def update_wallet_format(self):
       +        # convert old-format imported keys
       +        if self.wallet.imported_keys:
       +            password = self.password_dialog(_("Please enter your password in order to update imported keys"))
       +            try:
       +                self.wallet.convert_imported_keys(password)
       +            except:
       +                self.show_message("error")
       +
       +
            def open_wallet(self):
                wallet_folder = self.wallet.storage.path
                filename = unicode( QFileDialog.getOpenFileName(self, "Select your wallet file", wallet_folder) )
       t@@ -1491,7 +1503,7 @@ class ElectrumWindow(QMainWindow):
                    QMessageBox.warning(self, _('Error'), _('Incorrect Password'), _('OK'))
                    return
                from seed_dialog import SeedDialog
       -        d = SeedDialog(self, mnemonic, self.wallet.imported_keys)
       +        d = SeedDialog(self, mnemonic, self.wallet.has_imported_keys())
                d.exec_()
        
        
       t@@ -1730,7 +1742,7 @@ class ElectrumWindow(QMainWindow):
            def show_message(self, msg):
                QMessageBox.information(self, _('Message'), msg, _('OK'))
        
       -    def password_dialog(self ):
       +    def password_dialog(self, msg=None):
                d = QDialog(self)
                d.setModal(1)
                d.setWindowTitle(_("Enter Password"))
       t@@ -1739,7 +1751,8 @@ class ElectrumWindow(QMainWindow):
                pw.setEchoMode(2)
        
                vbox = QVBoxLayout()
       -        msg = _('Please enter your password')
       +        if not msg:
       +            msg = _('Please enter your password')
                vbox.addWidget(QLabel(msg))
        
                grid = QGridLayout()
       t@@ -2118,7 +2131,7 @@ class ElectrumWindow(QMainWindow):
        
            @protected
            def do_import_privkey(self, password):
       -        if not self.wallet.imported_keys:
       +        if not self.wallet.has_imported_keys():
                    r = QMessageBox.question(None, _('Warning'), '<b>'+_('Warning') +':\n</b><br/>'+ _('Imported keys are not recoverable from seed.') + ' ' \
                                                 + _('If you ever need to restore your wallet from its seed, these keys will be lost.') + '<p>' \
                                                 + _('Are you sure you understand what you are doing?'), 3, 4)
   DIR diff --git a/lib/wallet.py b/lib/wallet.py
       t@@ -221,11 +221,21 @@ class Abstract_Wallet:
            def get_action(self):
                pass
        
       +
       +    def convert_imported_keys(self, password):
       +        for k, v in self.imported_keys.items():
       +            sec = pw_decode(v, password)
       +            pubkey = public_key_from_private_key(sec)
       +            address = public_key_to_bc_address(pubkey.decode('hex'))
       +            assert address == k
       +            self.import_key(sec, password)
       +            self.imported_keys.pop(k)
       +        self.storage.put('imported_keys', self.imported_keys)
       +
       +
            def load_accounts(self):
                self.accounts = {}
                self.imported_keys = self.storage.get('imported_keys',{})
       -        if self.imported_keys:
       -            print_error("cannot load imported keys")
        
                d = self.storage.get('accounts', {})
                for k, v in d.items():
       t@@ -271,6 +281,10 @@ class Abstract_Wallet:
                else:
                    return False
        
       +    def has_imported_keys(self):
       +        account = self.accounts.get(IMPORTED_ACCOUNT)
       +        return account is not None
       +
            def import_key(self, sec, password):
                try:
                    pubkey = public_key_from_private_key(sec)