Browse Source

follow-up invoice changes: fix wallet.get_bolt11_inv if amt is None

follow-up 719b468eee

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'
master
SomberNight 3 years ago
parent
commit
5673f08750
No known key found for this signature in database
GPG Key ID: B33B5F232C6271E9
  1. 2
      electrum/gui/qml/qerequestdetails.py
  2. 13
      electrum/wallet.py

2
electrum/gui/qml/qerequestdetails.py

@ -117,7 +117,7 @@ class QERequestDetails(QObject, QtEventListener):
@pyqtProperty(str, notify=detailsChanged) @pyqtProperty(str, notify=detailsChanged)
def bolt11(self): def bolt11(self):
can_receive = self._wallet.wallet.lnworker.num_sats_can_receive() if self._wallet.wallet.lnworker else 0 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) return self._wallet.wallet.get_bolt11_invoice(self._req)
else: else:
return '' return ''

13
electrum/wallet.py

@ -329,7 +329,7 @@ class Abstract_Wallet(ABC, Logger, EventListener):
self._frozen_addresses = set(db.get('frozen_addresses', [])) self._frozen_addresses = set(db.get('frozen_addresses', []))
self._frozen_coins = db.get_dict('frozen_coins') # type: Dict[str, bool] self._frozen_coins = db.get_dict('frozen_coins') # type: Dict[str, bool]
self.fiat_value = db.get_dict('fiat_value') 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._invoices = db.get_dict('invoices') # type: Dict[str, Invoice]
self._reserved_addresses = set(db.get('reserved_addresses', [])) self._reserved_addresses = set(db.get('reserved_addresses', []))
@ -2389,7 +2389,7 @@ class Abstract_Wallet(ABC, Logger, EventListener):
status = PR_PAID status = PR_PAID
return self.check_expired_status(invoice, status) 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. """Returns a relevant request for address, from an on-chain PoV.
(One that has been paid on-chain or is pending) (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()) reqs.sort(key=lambda req: req.get_time())
return reqs[-1] 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) return self._receive_requests.get(request_id)
def get_formatted_request(self, 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: def get_bolt11_invoice(self, req: Request) -> str:
if not self.lnworker: if not self.lnworker:
return '' 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( lnaddr, invoice = self.lnworker.get_bolt11_invoice(
payment_hash=req.payment_hash, payment_hash=req.payment_hash,
amount_msat=amount_msat, amount_msat=amount_msat,
@ -2545,7 +2546,7 @@ class Abstract_Wallet(ABC, Logger, EventListener):
key = self.add_payment_request(req) key = self.add_payment_request(req)
return key 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() request_id = req.get_id()
self._receive_requests[request_id] = req self._receive_requests[request_id] = req
if addr:=req.get_address(): if addr:=req.get_address():
@ -2577,7 +2578,7 @@ class Abstract_Wallet(ABC, Logger, EventListener):
if write_to_disk: if write_to_disk:
self.save_db() self.save_db()
def get_sorted_requests(self) -> List[Invoice]: def get_sorted_requests(self) -> List[Request]:
""" sorted by timestamp """ """ sorted by timestamp """
out = [self.get_request(x) for x in self._receive_requests.keys()] out = [self.get_request(x) for x in self._receive_requests.keys()]
out = [x for x in out if x is not None] out = [x for x in out if x is not None]

Loading…
Cancel
Save