Handle expired invoices that are in_flight

This commit is contained in:
Reckless_Satoshi 2023-04-25 04:46:07 -07:00
parent b9aaf9f1bc
commit b1e9081ff8
No known key found for this signature in database
GPG Key ID: 9C4585B561315571

View File

@ -551,20 +551,35 @@ class LNNode:
if "invoice expired" in str(e): if "invoice expired" in str(e):
print(f"Order: {order.id}. INVOICE EXPIRED. Hash: {hash}") print(f"Order: {order.id}. INVOICE EXPIRED. Hash: {hash}")
lnpayment.status = LNPayment.Status.EXPIRE # An expired invoice can already be in-flight. Check.
lnpayment.last_routing_time = timezone.now() try:
lnpayment.in_flight = False request = routerrpc.TrackPaymentRequest(
lnpayment.save() payment_hash=bytes.fromhex(hash)
order.status = Order.Status.FAI )
order.expires_at = timezone.now() + timedelta(
seconds=order.t_to_expire(Order.Status.FAI) for response in cls.routerstub.TrackPaymentV2(request):
) handle_response(response, was_in_transit=True)
order.save()
results = { except Exception as e:
"succeded": False, if "payment isn't initiated" in str(e):
"context": "The payout invoice has expired", print(
} f"Order: {order.id}. The expired invoice had not been initiated. Hash: {hash}"
return results )
lnpayment.status = LNPayment.Status.EXPIRE
lnpayment.last_routing_time = timezone.now()
lnpayment.in_flight = False
lnpayment.save()
order.status = Order.Status.FAI
order.expires_at = timezone.now() + timedelta(
seconds=order.t_to_expire(Order.Status.FAI)
)
order.save()
results = {
"succeded": False,
"context": "The payout invoice has expired",
}
return results
elif "payment is in transition" in str(e): elif "payment is in transition" in str(e):
print(f"Order: {order.id} ALREADY IN TRANSITION. Hash: {hash}.") print(f"Order: {order.id} ALREADY IN TRANSITION. Hash: {hash}.")