1
0

wallet_db upgrade: fix possible corruption of invoice amounts

see https://github.com/spesmilo/electrum/pull/7774
This commit is contained in:
SomberNight
2022-07-15 18:26:13 +02:00
parent d5b5f82b01
commit ed65f335bd
2 changed files with 14 additions and 1 deletions

View File

@@ -943,6 +943,7 @@ class Abstract_Wallet(ABC, Logger, EventListener):
amount_msat = '!'
break
else:
assert isinstance(x.value, int), f"{x.value!r}"
amount_msat += x.value * 1000
timestamp = None
exp = None
@@ -2439,6 +2440,7 @@ class Abstract_Wallet(ABC, Logger, EventListener):
def create_request(self, amount_sat: int, message: str, exp_delay: int, address: str):
# for receiving
amount_sat = amount_sat or 0
assert isinstance(amount_sat, int), f"{amount_sat!r}"
exp_delay = exp_delay or 0
timestamp = int(time.time())
fallback_address = address if self.config.get('bolt11_fallback', True) else None

View File

@@ -52,7 +52,7 @@ if TYPE_CHECKING:
OLD_SEED_VERSION = 4 # electrum versions < 2.0
NEW_SEED_VERSION = 11 # electrum versions >= 2.0
FINAL_SEED_VERSION = 47 # electrum >= 2.7 will set this to prevent
FINAL_SEED_VERSION = 48 # electrum >= 2.7 will set this to prevent
# old versions from overwriting new format
@@ -196,6 +196,7 @@ class WalletDB(JsonDB):
self._convert_version_45()
self._convert_version_46()
self._convert_version_47()
self._convert_version_48()
self.put('seed_version', FINAL_SEED_VERSION) # just to be sure
self._after_upgrade_tasks()
@@ -942,6 +943,16 @@ class WalletDB(JsonDB):
del requests[key]
self.data['seed_version'] = 47
def _convert_version_48(self):
# fix possible corruption of invoice amounts, see #7774
if not self._is_upgrade_method_needed(47, 47):
return
invoices = self.data.get('invoices', {})
for key, item in list(invoices.items()):
if item['amount_msat'] == 1000 * "!":
item['amount_msat'] = "!"
self.data['seed_version'] = 48
def _convert_imported(self):
if not self._is_upgrade_method_needed(0, 13):
return