public override async Task <IPaymentMethodDetails> CreatePaymentMethodDetails(MoneroSupportedPaymentMethod supportedPaymentMethod, PaymentMethod paymentMethod,
                                                                                      StoreData store, MoneroLikeSpecificBtcPayNetwork network, object preparePaymentObject)
        {
            if (!_moneroRpcProvider.IsAvailable(network.CryptoCode))
            {
                throw new PaymentMethodUnavailableException($"Node or wallet not available");
            }
            var invoice = paymentMethod.ParentEntity;

            if (!(preparePaymentObject is Prepare moneroPrepare))
            {
                throw new ArgumentException();
            }
            var feeRatePerKb = await moneroPrepare.GetFeeRate;
            var address      = await moneroPrepare.ReserveAddress(invoice.Id);

            var feeRatePerByte = feeRatePerKb.Fee / 1024;

            return(new MoneroLikeOnChainPaymentMethodDetails()
            {
                NextNetworkFee = MoneroMoney.Convert(feeRatePerByte * 100),
                AccountIndex = supportedPaymentMethod.AccountIndex,
                AddressIndex = address.AddressIndex,
                DepositAddress = address.Address
            });
        }
        public override void PreparePaymentModel(PaymentModel model, InvoiceResponse invoiceResponse, StoreBlob storeBlob)
        {
            var paymentMethodId = new PaymentMethodId(model.CryptoCode, PaymentType);

            var client = _moneroRpcProvider.WalletRpcClients[model.CryptoCode];

            var cryptoInfo = invoiceResponse.CryptoInfo.First(o => o.GetpaymentMethodId() == paymentMethodId);
            var network    = _networkProvider.GetNetwork <MoneroLikeSpecificBtcPayNetwork>(model.CryptoCode);

            model.IsLightning       = false;
            model.PaymentMethodName = GetPaymentMethodName(network);
            model.CryptoImage       = GetCryptoImage(network);
            model.InvoiceBitcoinUrl = client.SendCommandAsync <MakeUriRequest, MakeUriResponse>("make_uri", new MakeUriRequest()
            {
                Address = cryptoInfo.Address,
                Amount  = MoneroMoney.Convert(decimal.Parse(cryptoInfo.Due, CultureInfo.InvariantCulture))
            }).GetAwaiter()
                                      .GetResult().Uri;
            model.InvoiceBitcoinUrlQR = model.InvoiceBitcoinUrl;
        }
 public decimal GetValue()
 {
     return(MoneroMoney.Convert(Amount));
 }