Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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));
        }
Exemplo n.º 3
0
        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));
        }