storage upgrade for invoices and requests. fixes #5959
This commit is contained in:
@@ -40,6 +40,7 @@ from .lnutil import LOCAL, REMOTE, FeeUpdate, UpdateAddHtlc, LocalConfig, Remote
|
|||||||
from .lnutil import ChannelConstraints, Outpoint, ShachainElement
|
from .lnutil import ChannelConstraints, Outpoint, ShachainElement
|
||||||
from .json_db import StoredDict, JsonDB, locked, modifier
|
from .json_db import StoredDict, JsonDB, locked, modifier
|
||||||
from .plugin import run_hook, plugin_loaders
|
from .plugin import run_hook, plugin_loaders
|
||||||
|
from .paymentrequest import PaymentRequest
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from .storage import WalletStorage
|
from .storage import WalletStorage
|
||||||
@@ -49,7 +50,7 @@ if TYPE_CHECKING:
|
|||||||
|
|
||||||
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 = 24 # electrum >= 2.7 will set this to prevent
|
FINAL_SEED_VERSION = 25 # electrum >= 2.7 will set this to prevent
|
||||||
# old versions from overwriting new format
|
# old versions from overwriting new format
|
||||||
|
|
||||||
|
|
||||||
@@ -169,6 +170,7 @@ class WalletDB(JsonDB):
|
|||||||
self._convert_version_22()
|
self._convert_version_22()
|
||||||
self._convert_version_23()
|
self._convert_version_23()
|
||||||
self._convert_version_24()
|
self._convert_version_24()
|
||||||
|
self._convert_version_25()
|
||||||
self.put('seed_version', FINAL_SEED_VERSION) # just to be sure
|
self.put('seed_version', FINAL_SEED_VERSION) # just to be sure
|
||||||
|
|
||||||
self._after_upgrade_tasks()
|
self._after_upgrade_tasks()
|
||||||
@@ -532,6 +534,43 @@ class WalletDB(JsonDB):
|
|||||||
|
|
||||||
self.data['seed_version'] = 24
|
self.data['seed_version'] = 24
|
||||||
|
|
||||||
|
def _convert_version_25(self):
|
||||||
|
if not self._is_upgrade_method_needed(24, 24):
|
||||||
|
return
|
||||||
|
# add 'type' feld to onchain requests
|
||||||
|
requests = self.data['payment_requests']
|
||||||
|
for k, r in list(requests.items()):
|
||||||
|
if r.get('address') == k:
|
||||||
|
requests[k] = {
|
||||||
|
'address': r['address'],
|
||||||
|
'amount': r.get('amount'),
|
||||||
|
'exp': r.get('exp'),
|
||||||
|
'id': r.get('id'),
|
||||||
|
'memo': r.get('memo'),
|
||||||
|
'time': r.get('time'),
|
||||||
|
'type': PR_TYPE_ONCHAIN,
|
||||||
|
}
|
||||||
|
# convert bip70 invoices
|
||||||
|
invoices = self.data['invoices']
|
||||||
|
for k, r in list(invoices.items()):
|
||||||
|
data = r.get("hex")
|
||||||
|
if data:
|
||||||
|
pr = PaymentRequest(bytes.fromhex(data))
|
||||||
|
if pr.id != k:
|
||||||
|
continue
|
||||||
|
invoices[k] = {
|
||||||
|
'type': PR_TYPE_ONCHAIN,
|
||||||
|
'amount': pr.get_amount(),
|
||||||
|
'bip70': data,
|
||||||
|
'exp': pr.get_expiration_date(),
|
||||||
|
'id': pr.id,
|
||||||
|
'message': pr.get_memo(),
|
||||||
|
'outputs': [x.to_legacy_tuple() for x in pr.get_outputs()],
|
||||||
|
'time': pr.get_time(),
|
||||||
|
'requestor': pr.get_requestor(),
|
||||||
|
}
|
||||||
|
self.data['seed_version'] = 25
|
||||||
|
|
||||||
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
|
||||||
|
|||||||
Reference in New Issue
Block a user