Browse Source

wizard: fix regression: unencrypted wallets were not getting upgraded

fixes #5177
sqlite_db
SomberNight 6 years ago
parent
commit
12b98fa251
No known key found for this signature in database GPG Key ID: B33B5F232C6271E9
  1. 7
      electrum/base_wizard.py
  2. 2
      electrum/daemon.py
  3. 8
      electrum/gui/kivy/main_window.py
  4. 3
      electrum/gui/kivy/uix/dialogs/installwizard.py
  5. 2
      electrum/gui/qt/installwizard.py
  6. 2
      electrum/storage.py
  7. 3
      electrum/wallet.py

7
electrum/base_wizard.py

@ -28,7 +28,7 @@ import sys
import copy
import traceback
from functools import partial
from typing import List, TYPE_CHECKING, Tuple, NamedTuple, Any, Dict
from typing import List, TYPE_CHECKING, Tuple, NamedTuple, Any, Dict, Optional
from . import bitcoin
from . import keystore
@ -137,7 +137,7 @@ class BaseWizard(object):
exc = None
def on_finished():
if exc is None:
self.terminate()
self.terminate(storage=storage)
else:
raise exc
def do_upgrade():
@ -571,6 +571,9 @@ class BaseWizard(object):
storage.load_plugins()
return storage
def terminate(self, *, storage: Optional[WalletStorage] = None):
raise NotImplementedError() # implemented by subclasses
def show_xpub_and_add_cosigners(self, xpub):
self.show_xpub_dialog(xpub=xpub, run_next=lambda x: self.run('choose_keystore'))

2
electrum/daemon.py

@ -251,6 +251,8 @@ class Daemon(DaemonThread):
storage.decrypt(password)
if storage.requires_split():
return
if storage.requires_upgrade():
return
if storage.get_action():
return
wallet = Wallet(storage)

8
electrum/gui/kivy/main_window.py

@ -557,7 +557,15 @@ class ElectrumWindow(App):
wizard = Factory.InstallWizard(self.electrum_config, self.plugins)
wizard.path = path
wizard.bind(on_wizard_complete=self.on_wizard_complete)
storage = WalletStorage(path, manual_upgrades=True)
if not storage.file_exists():
wizard.run('new')
elif storage.is_encrypted():
raise Exception("Kivy GUI does not support encrypted wallet files.")
elif storage.requires_upgrade():
wizard.upgrade_storage(storage)
else:
raise Exception("unexpected storage file situation")
if not ask_if_wizard:
launch_wizard()
else:

3
electrum/gui/kivy/uix/dialogs/installwizard.py

@ -971,7 +971,8 @@ class InstallWizard(BaseWizard, Widget):
t = threading.Thread(target = target)
t.start()
def terminate(self, **kwargs):
def terminate(self, *, storage=None):
if storage is None:
storage = self.create_storage(self.path)
self.dispatch('on_wizard_complete', storage)

2
electrum/gui/qt/installwizard.py

@ -479,7 +479,7 @@ class InstallWizard(QDialog, MessageBoxMixin, BaseWizard):
def action_dialog(self, action, run_next):
self.run(action)
def terminate(self):
def terminate(self, **kwargs):
self.accept_signal.emit()
def waiting_dialog(self, task, msg, on_finished=None):

2
electrum/storage.py

@ -219,6 +219,8 @@ class WalletStorage(PrintError):
self.db.set_modified(True)
def requires_upgrade(self):
if not self.is_past_initial_decryption():
raise Exception("storage not yet decrypted!")
return self.db.requires_upgrade()
def upgrade(self):

3
electrum/wallet.py

@ -192,6 +192,9 @@ class Abstract_Wallet(AddressSynchronizer):
verbosity_filter = 'w'
def __init__(self, storage: WalletStorage):
if storage.requires_upgrade():
raise Exception("storage must be upgraded before constructing wallet")
AddressSynchronizer.__init__(self, storage)
# saved fields

Loading…
Cancel
Save