Пример #1
0
        public bitcoinPaymentData GetbitcoinPaymentData()
        {
            bitcoinPaymentData paymentData = null;

#pragma warning disable CS0618 // Type or member is obsolete
            if (string.IsNullOrEmpty(bitcoinPaymentData))
            {
                // For invoices created when bitcoinPaymentDataType was not existing, we just consider that it is a RBFed payment for safety
                var bitcoin = new BitcoinLikePaymentData();
                bitcoin.Network           = Network;
                bitcoin.Outpoint          = Outpoint;
                bitcoin.Output            = Output;
                bitcoin.RBF               = true;
                bitcoin.ConfirmationCount = 0;
                bitcoin.Legacy            = true;
                bitcoin.Output            = Output;
                bitcoin.Outpoint          = Outpoint;
                paymentData               = bitcoin;
            }
            else
            {
                paymentData         = GetPaymentMethodId().PaymentType.DeserializePaymentData(Network, bitcoinPaymentData);
                paymentData.Network = Network;
                if (paymentData is BitcoinLikePaymentData bitcoin)
                {
                    bitcoin.Output   = Output;
                    bitcoin.Outpoint = Outpoint;
                }
            }
            return(paymentData);
        }
Пример #2
0
        public PaymentEntity SetbitcoinPaymentData(bitcoinPaymentData bitcoinPaymentData)
        {
#pragma warning disable CS0618
            if (bitcoinPaymentData is Payments.Bitcoin.BitcoinLikePaymentData paymentData)
            {
                // Legacy
                Outpoint = paymentData.Outpoint;
                Output   = paymentData.Output;
                ///
            }
            bitcoinPaymentDataType = bitcoinPaymentData.GetPaymentType().ToString();
            bitcoinPaymentData     = GetPaymentMethodId().PaymentType.SerializePaymentData(Network, bitcoinPaymentData);
#pragma warning restore CS0618
            return(this);
        }
Пример #3
0
 public override string SerializePaymentData(BTCPayNetworkBase network, bitcoinPaymentData paymentData)
 {
     return(JsonConvert.SerializeObject(paymentData));
 }
Пример #4
0
 public abstract string SerializePaymentData(BTCPayNetworkBase network, bitcoinPaymentData paymentData);
 public override string SerializePaymentData(BTCPayNetworkBase network, bitcoinPaymentData paymentData)
 {
     return(((BTCPayNetwork)network).ToString(paymentData));
 }
Пример #6
0
        /// <summary>
        /// Add a payment to an invoice
        /// </summary>
        /// <param name="invoiceId"></param>
        /// <param name="date"></param>
        /// <param name="paymentData"></param>
        /// <param name="bitcoinCode"></param>
        /// <param name="accounted"></param>
        /// <returns>The PaymentEntity or null if already added</returns>
        public async Task <PaymentEntity> AddPayment(string invoiceId, DateTimeOffset date, bitcoinPaymentData paymentData, BTCPayNetworkBase network, bool accounted = false)
        {
            using (var context = _ContextFactory.CreateContext())
            {
                var invoice = context.Invoices.Find(invoiceId);
                if (invoice == null)
                {
                    return(null);
                }
                InvoiceEntity         invoiceEntity        = ToObject(invoice.Blob);
                PaymentMethod         paymentMethod        = invoiceEntity.GetPaymentMethod(new PaymentMethodId(network.bitcoinCode, paymentData.GetPaymentType()));
                IPaymentMethodDetails paymentMethodDetails = paymentMethod.GetPaymentMethodDetails();
                PaymentEntity         entity = new PaymentEntity
                {
                    Version = 1,
#pragma warning disable CS0618
                    bitcoinCode = network.bitcoinCode,
#pragma warning restore CS0618
                    ReceivedTime = date.UtcDateTime,
                    Accounted    = accounted,
                    NetworkFee   = paymentMethodDetails.GetNextNetworkFee(),
                    Network      = network
                };
                entity.SetbitcoinPaymentData(paymentData);
                //TODO: abstract
                if (paymentMethodDetails is Payments.Bitcoin.BitcoinLikeOnChainPaymentMethod bitcoinPaymentMethod &&
                    bitcoinPaymentMethod.NetworkFeeMode == NetworkFeeMode.MultiplePaymentsOnly &&
                    bitcoinPaymentMethod.NextNetworkFee == Money.Zero)
                {
                    bitcoinPaymentMethod.NextNetworkFee = bitcoinPaymentMethod.NetworkFeeRate.GetFee(100); // assume price for 100 bytes
                    paymentMethod.SetPaymentMethodDetails(bitcoinPaymentMethod);
                    invoiceEntity.SetPaymentMethod(paymentMethod);
                    invoice.Blob = ToBytes(invoiceEntity, network);
                }
                PaymentData data = new PaymentData
                {
                    Id            = paymentData.GetPaymentId(),
                    Blob          = ToBytes(entity, entity.Network),
                    InvoiceDataId = invoiceId,
                    Accounted     = accounted
                };

                context.Payments.Add(data);

                try
                {
                    await context.SaveChangesAsync().ConfigureAwait(false);
                }
                catch (DbUpdateException) { return(null); } // Already exists
                AddToTextSearch(invoiceId, paymentData.GetSearchTerms());
                return(entity);
            }
        }