From 5673f08750673b31f2b3d8eadddb2e9a852793a7 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Fri, 3 Mar 2023 15:16:29 +0000 Subject: [PATCH] follow-up invoice changes: fix wallet.get_bolt11_inv if amt is None follow-up 719b468eee8b3e13680f6e7b90194d618181fe0c Traceback (most recent call last): File "...\electrum\electrum\gui\qt\request_list.py", line 111, in item_changed self.receive_tab.update_current_request() File "...\electrum\electrum\gui\qt\receive_tab.py", line 227, in update_current_request lnaddr = self.wallet.get_bolt11_invoice(req) if not help_texts.ln_is_error else '' File "...\electrum\electrum\wallet.py", line 2515, in get_bolt11_invoice amount_msat = req.amount_msat if req.amount_msat > 0 else None TypeError: '>' not supported between instances of 'NoneType' and 'int' --- electrum/gui/qml/qerequestdetails.py | 2 +- electrum/wallet.py | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/electrum/gui/qml/qerequestdetails.py b/electrum/gui/qml/qerequestdetails.py index 1956cdfa4..f957fad62 100644 --- a/electrum/gui/qml/qerequestdetails.py +++ b/electrum/gui/qml/qerequestdetails.py @@ -117,7 +117,7 @@ class QERequestDetails(QObject, QtEventListener): @pyqtProperty(str, notify=detailsChanged) def bolt11(self): can_receive = self._wallet.wallet.lnworker.num_sats_can_receive() if self._wallet.wallet.lnworker else 0 - if self._req and can_receive > 0 and self._req.amount_msat/1000 <= can_receive: + if self._req and can_receive > 0 and (self._req.get_amount_sat() or 0) <= can_receive: return self._wallet.wallet.get_bolt11_invoice(self._req) else: return '' diff --git a/electrum/wallet.py b/electrum/wallet.py index 773894e95..bc6661ebf 100644 --- a/electrum/wallet.py +++ b/electrum/wallet.py @@ -329,7 +329,7 @@ class Abstract_Wallet(ABC, Logger, EventListener): self._frozen_addresses = set(db.get('frozen_addresses', [])) self._frozen_coins = db.get_dict('frozen_coins') # type: Dict[str, bool] self.fiat_value = db.get_dict('fiat_value') - self._receive_requests = db.get_dict('payment_requests') # type: Dict[str, Invoice] + self._receive_requests = db.get_dict('payment_requests') # type: Dict[str, Request] self._invoices = db.get_dict('invoices') # type: Dict[str, Invoice] self._reserved_addresses = set(db.get('reserved_addresses', [])) @@ -2389,7 +2389,7 @@ class Abstract_Wallet(ABC, Logger, EventListener): status = PR_PAID return self.check_expired_status(invoice, status) - def get_request_by_addr(self, addr: str) -> Optional[Invoice]: + def get_request_by_addr(self, addr: str) -> Optional[Request]: """Returns a relevant request for address, from an on-chain PoV. (One that has been paid on-chain or is pending) @@ -2417,7 +2417,7 @@ class Abstract_Wallet(ABC, Logger, EventListener): reqs.sort(key=lambda req: req.get_time()) return reqs[-1] - def get_request(self, request_id: str) -> Optional[Invoice]: + def get_request(self, request_id: str) -> Optional[Request]: return self._receive_requests.get(request_id) def get_formatted_request(self, request_id): @@ -2512,7 +2512,8 @@ class Abstract_Wallet(ABC, Logger, EventListener): def get_bolt11_invoice(self, req: Request) -> str: if not self.lnworker: return '' - amount_msat = req.amount_msat if req.amount_msat > 0 else None + amount_msat = req.get_amount_msat() or None + assert (amount_msat is None or amount_msat > 0), amount_msat lnaddr, invoice = self.lnworker.get_bolt11_invoice( payment_hash=req.payment_hash, amount_msat=amount_msat, @@ -2545,7 +2546,7 @@ class Abstract_Wallet(ABC, Logger, EventListener): key = self.add_payment_request(req) return key - def add_payment_request(self, req: Invoice, *, write_to_disk: bool = True): + def add_payment_request(self, req: Request, *, write_to_disk: bool = True): request_id = req.get_id() self._receive_requests[request_id] = req if addr:=req.get_address(): @@ -2577,7 +2578,7 @@ class Abstract_Wallet(ABC, Logger, EventListener): if write_to_disk: self.save_db() - def get_sorted_requests(self) -> List[Invoice]: + def get_sorted_requests(self) -> List[Request]: """ sorted by timestamp """ out = [self.get_request(x) for x in self._receive_requests.keys()] out = [x for x in out if x is not None]