From ad0b853cd98b040565c18f5403da365221f311bd Mon Sep 17 00:00:00 2001 From: SomberNight Date: Wed, 8 Feb 2023 23:36:36 +0000 Subject: [PATCH] invoices: improve perf by caching lnaddr even earlier During wallet-open, we load all invoices/payreqs. This involved decoding the lnaddrs twice. Now we only decode once. For a wallet with ~1000 payreqs, this noticeably sped up wallet-open: (before:) 8.83 | D | util.profiler | Daemon._load_wallet 6.4317 sec (after:) 5.69 | D | util.profiler | Daemon._load_wallet 3.4450 sec It is very expensive to parse all the lnaddrs... --- electrum/daemon.py | 1 + electrum/invoices.py | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/electrum/daemon.py b/electrum/daemon.py index b0d04f40c..ccedd9248 100644 --- a/electrum/daemon.py +++ b/electrum/daemon.py @@ -463,6 +463,7 @@ class Daemon(Logger): return wallet @staticmethod + @profiler def _load_wallet( path, password, diff --git a/electrum/invoices.py b/electrum/invoices.py index 52fbeb68f..0933cba6c 100644 --- a/electrum/invoices.py +++ b/electrum/invoices.py @@ -196,7 +196,8 @@ class Invoice(StoredObject): @lightning_invoice.validator def _validate_invoice_str(self, attribute, value): if value is not None: - lndecode(value) # this checks the str can be decoded + lnaddr = lndecode(value) # this checks the str can be decoded + self.__lnaddr = lnaddr # save it, just to avoid having to recompute later @amount_msat.validator def _validate_amount(self, attribute, value):