Merge pull request #8719 from SomberNight/202312_db_seedtype
wallet db: deduplicate "seed_type" field
This commit is contained in:
@@ -366,7 +366,7 @@ class QEWallet(AuthMixin, QObject, QtEventListener):
|
|||||||
|
|
||||||
@pyqtProperty(str, notify=dataChanged)
|
@pyqtProperty(str, notify=dataChanged)
|
||||||
def seedType(self):
|
def seedType(self):
|
||||||
return self.wallet.db.get('seed_type')
|
return self.wallet.get_seed_type()
|
||||||
|
|
||||||
@pyqtProperty(bool, notify=dataChanged)
|
@pyqtProperty(bool, notify=dataChanged)
|
||||||
def isWatchOnly(self):
|
def isWatchOnly(self):
|
||||||
|
|||||||
@@ -36,9 +36,7 @@ class WalletInfoDialog(WindowModalDialog):
|
|||||||
seed_available = _('False')
|
seed_available = _('False')
|
||||||
if wallet.has_seed():
|
if wallet.has_seed():
|
||||||
seed_available = _('True')
|
seed_available = _('True')
|
||||||
ks = wallet.keystore
|
seed_available += f" ({wallet.get_seed_type()})"
|
||||||
assert isinstance(ks, keystore.Deterministic_KeyStore)
|
|
||||||
seed_available += f" ({ks.get_seed_type()})"
|
|
||||||
keystore_types = [k.get_type_text() for k in wallet.get_keystores()]
|
keystore_types = [k.get_type_text() for k in wallet.get_keystores()]
|
||||||
grid = QGridLayout()
|
grid = QGridLayout()
|
||||||
basename = os.path.basename(wallet.storage.path)
|
basename = os.path.basename(wallet.storage.path)
|
||||||
@@ -74,7 +72,7 @@ class WalletInfoDialog(WindowModalDialog):
|
|||||||
label = IconLabel(text='Enabled, non-recoverable channels')
|
label = IconLabel(text='Enabled, non-recoverable channels')
|
||||||
label.setIcon(read_QIcon('cloud_no'))
|
label.setIcon(read_QIcon('cloud_no'))
|
||||||
grid.addWidget(label, cur_row, 1)
|
grid.addWidget(label, cur_row, 1)
|
||||||
if wallet.db.get('seed_type') == 'segwit':
|
if wallet.get_seed_type() == 'segwit':
|
||||||
msg = _("Your channels cannot be recovered from seed, because they were created with an old version of Electrum. "
|
msg = _("Your channels cannot be recovered from seed, because they were created with an old version of Electrum. "
|
||||||
"This means that you must save a backup of your wallet everytime you create a new channel.\n\n"
|
"This means that you must save a backup of your wallet everytime you create a new channel.\n\n"
|
||||||
"If you want this wallet to have recoverable channels, you must close your existing channels and restore this wallet from seed")
|
"If you want this wallet to have recoverable channels, you must close your existing channels and restore this wallet from seed")
|
||||||
|
|||||||
@@ -2984,6 +2984,9 @@ class Abstract_Wallet(ABC, Logger, EventListener):
|
|||||||
def has_seed(self) -> bool:
|
def has_seed(self) -> bool:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def get_seed_type(self) -> Optional[str]:
|
||||||
|
return None
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def get_all_known_addresses_beyond_gap_limit(self) -> Set[str]:
|
def get_all_known_addresses_beyond_gap_limit(self) -> Set[str]:
|
||||||
pass
|
pass
|
||||||
@@ -3512,6 +3515,12 @@ class Deterministic_Wallet(Abstract_Wallet):
|
|||||||
def get_seed(self, password):
|
def get_seed(self, password):
|
||||||
return self.keystore.get_seed(password)
|
return self.keystore.get_seed(password)
|
||||||
|
|
||||||
|
def get_seed_type(self) -> Optional[str]:
|
||||||
|
if not self.has_seed():
|
||||||
|
return None
|
||||||
|
assert isinstance(self.keystore, keystore.Deterministic_KeyStore), type(self.keystore)
|
||||||
|
return self.keystore.get_seed_type()
|
||||||
|
|
||||||
def change_gap_limit(self, value):
|
def change_gap_limit(self, value):
|
||||||
'''This method is not called in the code, it is kept for console use'''
|
'''This method is not called in the code, it is kept for console use'''
|
||||||
value = int(value)
|
value = int(value)
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ class WalletUnfinished(WalletFileException):
|
|||||||
# seed_version is now used for the version of the wallet file
|
# seed_version is now used for the version of the wallet file
|
||||||
OLD_SEED_VERSION = 4 # electrum versions < 2.0
|
OLD_SEED_VERSION = 4 # electrum versions < 2.0
|
||||||
NEW_SEED_VERSION = 11 # electrum versions >= 2.0
|
NEW_SEED_VERSION = 11 # electrum versions >= 2.0
|
||||||
FINAL_SEED_VERSION = 56 # electrum >= 2.7 will set this to prevent
|
FINAL_SEED_VERSION = 57 # electrum >= 2.7 will set this to prevent
|
||||||
# old versions from overwriting new format
|
# old versions from overwriting new format
|
||||||
|
|
||||||
|
|
||||||
@@ -227,6 +227,7 @@ class WalletDBUpgrader(Logger):
|
|||||||
self._convert_version_54()
|
self._convert_version_54()
|
||||||
self._convert_version_55()
|
self._convert_version_55()
|
||||||
self._convert_version_56()
|
self._convert_version_56()
|
||||||
|
self._convert_version_57()
|
||||||
self.put('seed_version', FINAL_SEED_VERSION) # just to be sure
|
self.put('seed_version', FINAL_SEED_VERSION) # just to be sure
|
||||||
|
|
||||||
def _convert_wallet_type(self):
|
def _convert_wallet_type(self):
|
||||||
@@ -1096,6 +1097,14 @@ class WalletDBUpgrader(Logger):
|
|||||||
item['local_config'].pop('was_announced')
|
item['local_config'].pop('was_announced')
|
||||||
self.data['seed_version'] = 56
|
self.data['seed_version'] = 56
|
||||||
|
|
||||||
|
def _convert_version_57(self):
|
||||||
|
if not self._is_upgrade_method_needed(56, 56):
|
||||||
|
return
|
||||||
|
# The 'seed_type' field could be present both at the top-level and inside keystores.
|
||||||
|
# We delete the one that is top-level.
|
||||||
|
self.data.pop('seed_type', None)
|
||||||
|
self.data['seed_version'] = 57
|
||||||
|
|
||||||
def _convert_imported(self):
|
def _convert_imported(self):
|
||||||
if not self._is_upgrade_method_needed(0, 13):
|
if not self._is_upgrade_method_needed(0, 13):
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -592,8 +592,6 @@ class NewWalletWizard(AbstractWizard):
|
|||||||
db.set_keystore_encryption(bool(data['password']) and data['encrypt'])
|
db.set_keystore_encryption(bool(data['password']) and data['encrypt'])
|
||||||
|
|
||||||
db.put('wallet_type', data['wallet_type'])
|
db.put('wallet_type', data['wallet_type'])
|
||||||
if 'seed_type' in data:
|
|
||||||
db.put('seed_type', data['seed_type'])
|
|
||||||
|
|
||||||
if data['wallet_type'] == 'standard':
|
if data['wallet_type'] == 'standard':
|
||||||
db.put('keystore', k.dump())
|
db.put('keystore', k.dump())
|
||||||
|
|||||||
Reference in New Issue
Block a user