tlnpay: check whether invoice has been paid - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 57ec8f51c817aeef92e9cd5e1cec8d67c4681d09 DIR parent 4b2336304f622e1b81a16ae2a18ba5055ff69ca5 HTML Author: ThomasV <thomasv@electrum.org> Date: Fri, 2 Aug 2019 11:43:05 +0200 lnpay: check whether invoice has been paid Diffstat: M electrum/lnworker.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) --- DIR diff --git a/electrum/lnworker.py b/electrum/lnworker.py t@@ -724,9 +724,13 @@ class LNWallet(LNWorker): def pay(self, invoice, attempts=1, amount_sat=None, timeout=10): """ Can be called from other threads - Raises timeout exception if htlc is not fulfilled + Raises exception after timeout """ - addr = self._check_invoice(invoice, amount_sat) + addr = lndecode(invoice, expected_hrp=constants.net.SEGWIT_HRP) + status = self.get_invoice_status(bh2u(addr.paymenthash)) + if status == PR_PAID: + raise PaymentFailure(_("This invoice has been paid already")) + self._check_invoice(invoice, amount_sat) self.save_invoice(addr.paymenthash, invoice, SENT, is_paid=False) self.wallet.set_label(bh2u(addr.paymenthash), addr.get_description()) fut = asyncio.run_coroutine_threadsafe( t@@ -768,6 +772,8 @@ class LNWallet(LNWorker): @staticmethod def _check_invoice(invoice, amount_sat=None): addr = lndecode(invoice, expected_hrp=constants.net.SEGWIT_HRP) + if addr.is_expired(): + raise InvoiceError(_("This invoice has expired")) if amount_sat: addr.amount = Decimal(amount_sat) / COIN if addr.amount is None: t@@ -776,9 +782,6 @@ class LNWallet(LNWorker): raise InvoiceError("{}\n{}".format( _("Invoice wants us to risk locking funds for unreasonably long."), f"min_final_cltv_expiry: {addr.get_min_final_cltv_expiry()}")) - #now = int(time.time()) - #if addr.date + addr.get_expiry() > now: - # raise InvoiceError(_('Invoice expired')) return addr async def _create_route_from_invoice(self, decoded_invoice) -> List[RouteEdge]: