public async Task <LightningPayment> GetPayment(string paymentHash, CancellationToken cancellation = default) { var result = await _eclairClient.GetSentInfo(paymentHash, null, cancellation); var sentInfo = result.First(); var payment = new LightningPayment { Id = sentInfo.Id.ToString(), Preimage = sentInfo.Preimage, PaymentHash = sentInfo.PaymentHash, CreatedAt = sentInfo.CreatedAt, Amount = sentInfo.Amount, AmountSent = sentInfo.Amount + sentInfo.FeesPaid, Fee = sentInfo.FeesPaid }; switch (sentInfo.Status.type) { case "pending": payment.Status = LightningPaymentStatus.Pending; break; case "failed": payment.Status = LightningPaymentStatus.Failed; break; case "sent": payment.Status = LightningPaymentStatus.Complete; break; default: payment.Status = LightningPaymentStatus.Unknown; break; } return(payment); }
public async Task <PayResponse> Pay(string bolt11, PayInvoiceParams payParams, CancellationToken cancellation = default) { try { var req = new PayInvoiceRequest() { Invoice = bolt11 }; req.MaxFeePct = payParams?.MaxFeePercent; req.MaxFeeFlatSat = payParams?.MaxFeeFlat?.Satoshi; var uuid = await _eclairClient.PayInvoice(req, cancellation); while (!cancellation.IsCancellationRequested) { var status = await _eclairClient.GetSentInfo(null, uuid, cancellation); if (!status.Any()) { continue; } var sentInfo = status.First(); switch (sentInfo.Status.type) { case "sent": return(new PayResponse(PayResult.Ok, new PayDetails { TotalAmount = sentInfo.Amount, FeeAmount = sentInfo.FeesPaid })); case "failed": return(new PayResponse(PayResult.CouldNotFindRoute)); case "pending": await Task.Delay(200, cancellation); break; } } } catch (EclairClient.EclairApiException) { } return(new PayResponse(PayResult.CouldNotFindRoute)); }
public async Task <PayResponse> Pay(string bolt11, CancellationToken cancellation = default(CancellationToken)) { try { var uuid = await _eclairClient.PayInvoice(bolt11, null, null, cancellation); while (!cancellation.IsCancellationRequested) { var status = await _eclairClient.GetSentInfo(null, uuid, cancellation); if (!status.Any()) { continue; } switch (status.First().Status) { case "SUCCEEDED": return(new PayResponse(PayResult.Ok)); case "FAILED": return(new PayResponse(PayResult.CouldNotFindRoute)); case "PENDING": await Task.Delay(200, cancellation); break; } } } catch (EclairClient.EclairApiException) { } return(new PayResponse(PayResult.CouldNotFindRoute)); }