mirror of
https://github.com/btcpayserver/btcpayserver.git
synced 2025-02-20 13:34:37 +01:00
Decouple DefaultRates from BTCPayNetwork (#5974)
This commit is contained in:
parent
4c303d358b
commit
adbe5977cd
17 changed files with 85 additions and 48 deletions
|
@ -356,13 +356,13 @@ retry:
|
|||
{
|
||||
var factory = FastTests.CreateBTCPayRateFactory();
|
||||
var fetcher = new RateFetcher(factory);
|
||||
var provider = CreateNetworkProvider(ChainName.Mainnet);
|
||||
var provider = CreateDefaultRates(ChainName.Mainnet);
|
||||
var b = new StoreBlob();
|
||||
string[] temporarilyBroken = Array.Empty<string>();
|
||||
foreach (var k in StoreBlob.RecommendedExchanges)
|
||||
{
|
||||
b.DefaultCurrency = k.Key;
|
||||
var rules = b.GetDefaultRateRules(provider);
|
||||
var rules = b.GetDefaultRateRules(provider.Select(p => p.DefaultRates));
|
||||
var pairs = new[] { CurrencyPair.Parse($"BTC_{k.Key}") }.ToHashSet();
|
||||
var result = fetcher.FetchRates(pairs, rules, null, default);
|
||||
foreach ((CurrencyPair key, Task<RateResult> value) in result)
|
||||
|
@ -389,11 +389,11 @@ retry:
|
|||
public async Task CanGetRateCryptoCurrenciesByDefault()
|
||||
{
|
||||
using var cts = new CancellationTokenSource(60_000);
|
||||
var provider = CreateNetworkProvider(ChainName.Mainnet);
|
||||
var provider = CreateDefaultRates(ChainName.Mainnet);
|
||||
var factory = FastTests.CreateBTCPayRateFactory();
|
||||
var fetcher = new RateFetcher(factory);
|
||||
var pairs =
|
||||
provider.GetAll()
|
||||
provider
|
||||
.Select(c => new CurrencyPair(c.CryptoCode, "USD"))
|
||||
.ToHashSet();
|
||||
|
||||
|
@ -408,7 +408,7 @@ retry:
|
|||
}
|
||||
}
|
||||
|
||||
var rules = new StoreBlob().GetDefaultRateRules(provider);
|
||||
var rules = new StoreBlob().GetDefaultRateRules(provider.Select(p => p.DefaultRates));
|
||||
var result = fetcher.FetchRates(pairs, rules, null, cts.Token);
|
||||
foreach ((CurrencyPair key, Task<RateResult> value) in result)
|
||||
{
|
||||
|
@ -418,6 +418,17 @@ retry:
|
|||
}
|
||||
}
|
||||
|
||||
private IEnumerable<(string CryptoCode, DefaultRates DefaultRates)> CreateDefaultRates(ChainName chainName)
|
||||
{
|
||||
var results = new List<(string CryptoCode, DefaultRates DefaultRates)>();
|
||||
var prov = CreateNetworkProvider(chainName);
|
||||
foreach (var network in prov.GetAll())
|
||||
{
|
||||
results.Add((network.CryptoCode, new DefaultRates(network.DefaultRateRules)));
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[Trait("Fast", "Fast")]
|
||||
public async Task CheckJsContent()
|
||||
|
|
|
@ -18,6 +18,8 @@ using BTCPayServer.Services.Wallets;
|
|||
using Microsoft.AspNetCore.Identity;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.Rendering;
|
||||
using Microsoft.AspNetCore.Mvc.ViewComponents;
|
||||
using Microsoft.AspNetCore.Mvc.ViewFeatures;
|
||||
using NBitcoin;
|
||||
using NBitcoin.Secp256k1;
|
||||
|
||||
|
@ -29,29 +31,31 @@ namespace BTCPayServer.Components.WalletNav
|
|||
private readonly PaymentMethodHandlerDictionary _handlers;
|
||||
private readonly UIWalletsController _walletsController;
|
||||
private readonly CurrencyNameTable _currencies;
|
||||
private readonly BTCPayNetworkProvider _networkProvider;
|
||||
private readonly IEnumerable<DefaultRates> _defaultRates;
|
||||
private readonly RateFetcher _rateFetcher;
|
||||
|
||||
public WalletNav(
|
||||
BTCPayWalletProvider walletProvider,
|
||||
PaymentMethodHandlerDictionary handlers,
|
||||
BTCPayNetworkProvider networkProvider,
|
||||
UIWalletsController walletsController,
|
||||
CurrencyNameTable currencies,
|
||||
IEnumerable<DefaultRates> defaultRates,
|
||||
RateFetcher rateFetcher)
|
||||
{
|
||||
_walletProvider = walletProvider;
|
||||
_handlers = handlers;
|
||||
_networkProvider = networkProvider;
|
||||
_walletsController = walletsController;
|
||||
_currencies = currencies;
|
||||
_defaultRates = defaultRates;
|
||||
_rateFetcher = rateFetcher;
|
||||
}
|
||||
|
||||
public async Task<IViewComponentResult> InvokeAsync(WalletId walletId)
|
||||
{
|
||||
var store = ViewContext.HttpContext.GetStoreData();
|
||||
var network = _networkProvider.GetNetwork<BTCPayNetwork>(walletId.CryptoCode);
|
||||
var network = _handlers.TryGetNetwork(PaymentTypes.CHAIN.GetPaymentMethodId(walletId.CryptoCode));
|
||||
if (network is null)
|
||||
return new HtmlContentViewComponentResult(new StringHtmlContent(string.Empty));
|
||||
var wallet = _walletProvider.GetWallet(network);
|
||||
var defaultCurrency = store.GetStoreBlob().DefaultCurrency;
|
||||
var derivation = store.GetDerivationSchemeSettings(_handlers, walletId.CryptoCode);
|
||||
|
@ -72,7 +76,7 @@ namespace BTCPayServer.Components.WalletNav
|
|||
|
||||
if (defaultCurrency != network.CryptoCode)
|
||||
{
|
||||
var rule = store.GetStoreBlob().GetRateRules(_networkProvider)?.GetRuleFor(new Rating.CurrencyPair(network.CryptoCode, defaultCurrency));
|
||||
var rule = store.GetStoreBlob().GetRateRules(_defaultRates)?.GetRuleFor(new Rating.CurrencyPair(network.CryptoCode, defaultCurrency));
|
||||
var bid = rule is null ? null : (await _rateFetcher.FetchRate(rule, new StoreIdRateContext(walletId.StoreId), HttpContext.RequestAborted)).BidAsk?.Bid;
|
||||
if (bid is decimal b)
|
||||
{
|
||||
|
|
|
@ -30,8 +30,8 @@ namespace BTCPayServer.Controllers
|
|||
{
|
||||
|
||||
readonly RateFetcher _rateProviderFactory;
|
||||
readonly BTCPayNetworkProvider _networkProvider;
|
||||
readonly CurrencyNameTable _currencyNameTable;
|
||||
private readonly IEnumerable<DefaultRates> _defaultRates;
|
||||
private readonly PaymentMethodHandlerDictionary _handlers;
|
||||
readonly StoreRepository _storeRepo;
|
||||
private readonly InvoiceRepository _invoiceRepository;
|
||||
|
@ -40,17 +40,17 @@ namespace BTCPayServer.Controllers
|
|||
|
||||
public BitpayRateController(
|
||||
RateFetcher rateProviderFactory,
|
||||
BTCPayNetworkProvider networkProvider,
|
||||
StoreRepository storeRepo,
|
||||
InvoiceRepository invoiceRepository,
|
||||
CurrencyNameTable currencyNameTable,
|
||||
IEnumerable<DefaultRates> defaultRates,
|
||||
PaymentMethodHandlerDictionary handlers)
|
||||
{
|
||||
_rateProviderFactory = rateProviderFactory ?? throw new ArgumentNullException(nameof(rateProviderFactory));
|
||||
_networkProvider = networkProvider;
|
||||
_storeRepo = storeRepo;
|
||||
_invoiceRepository = invoiceRepository;
|
||||
_currencyNameTable = currencyNameTable ?? throw new ArgumentNullException(nameof(currencyNameTable));
|
||||
_defaultRates = defaultRates;
|
||||
_handlers = handlers;
|
||||
}
|
||||
|
||||
|
@ -124,7 +124,7 @@ namespace BTCPayServer.Controllers
|
|||
}
|
||||
}
|
||||
|
||||
var rules = store.GetStoreBlob().GetRateRules(_networkProvider);
|
||||
var rules = store.GetStoreBlob().GetRateRules(_defaultRates);
|
||||
var pairs = new HashSet<CurrencyPair>();
|
||||
foreach (var currency in currencyPairs.Split(','))
|
||||
{
|
||||
|
|
|
@ -40,7 +40,6 @@ namespace BTCPayServer.Controllers.Greenfield
|
|||
private readonly InvoiceRepository _invoiceRepository;
|
||||
private readonly LinkGenerator _linkGenerator;
|
||||
private readonly CurrencyNameTable _currencyNameTable;
|
||||
private readonly BTCPayNetworkProvider _networkProvider;
|
||||
private readonly PullPaymentHostedService _pullPaymentService;
|
||||
private readonly RateFetcher _rateProvider;
|
||||
private readonly InvoiceActivator _invoiceActivator;
|
||||
|
@ -49,11 +48,12 @@ namespace BTCPayServer.Controllers.Greenfield
|
|||
private readonly Dictionary<PaymentMethodId, IPaymentLinkExtension> _paymentLinkExtensions;
|
||||
private readonly PayoutMethodHandlerDictionary _payoutHandlers;
|
||||
private readonly PaymentMethodHandlerDictionary _handlers;
|
||||
private readonly IEnumerable<DefaultRates> _defaultRates;
|
||||
|
||||
public LanguageService LanguageService { get; }
|
||||
|
||||
public GreenfieldInvoiceController(UIInvoiceController invoiceController, InvoiceRepository invoiceRepository,
|
||||
LinkGenerator linkGenerator, LanguageService languageService, BTCPayNetworkProvider btcPayNetworkProvider,
|
||||
LinkGenerator linkGenerator, LanguageService languageService,
|
||||
CurrencyNameTable currencyNameTable, RateFetcher rateProvider,
|
||||
InvoiceActivator invoiceActivator,
|
||||
PullPaymentHostedService pullPaymentService,
|
||||
|
@ -61,13 +61,13 @@ namespace BTCPayServer.Controllers.Greenfield
|
|||
IAuthorizationService authorizationService,
|
||||
Dictionary<PaymentMethodId, IPaymentLinkExtension> paymentLinkExtensions,
|
||||
PayoutMethodHandlerDictionary payoutHandlers,
|
||||
PaymentMethodHandlerDictionary handlers)
|
||||
PaymentMethodHandlerDictionary handlers,
|
||||
IEnumerable<DefaultRates> defaultRates)
|
||||
{
|
||||
_invoiceController = invoiceController;
|
||||
_invoiceRepository = invoiceRepository;
|
||||
_linkGenerator = linkGenerator;
|
||||
_currencyNameTable = currencyNameTable;
|
||||
_networkProvider = btcPayNetworkProvider;
|
||||
_rateProvider = rateProvider;
|
||||
_invoiceActivator = invoiceActivator;
|
||||
_pullPaymentService = pullPaymentService;
|
||||
|
@ -76,6 +76,7 @@ namespace BTCPayServer.Controllers.Greenfield
|
|||
_paymentLinkExtensions = paymentLinkExtensions;
|
||||
_payoutHandlers = payoutHandlers;
|
||||
_handlers = handlers;
|
||||
_defaultRates = defaultRates;
|
||||
LanguageService = languageService;
|
||||
}
|
||||
|
||||
|
@ -429,7 +430,7 @@ namespace BTCPayServer.Controllers.Greenfield
|
|||
var paidCurrency = Math.Round(cryptoPaid * paymentPrompt.Rate, cdCurrency.Divisibility);
|
||||
var rateResult = await _rateProvider.FetchRate(
|
||||
new CurrencyPair(paymentPrompt.Currency, invoice.Currency),
|
||||
store.GetStoreBlob().GetRateRules(_networkProvider), new StoreIdRateContext(storeId),
|
||||
store.GetStoreBlob().GetRateRules(_defaultRates), new StoreIdRateContext(storeId),
|
||||
|
||||
cancellationToken
|
||||
);
|
||||
|
|
|
@ -10,6 +10,7 @@ using BTCPayServer.Client;
|
|||
using BTCPayServer.Client.Models;
|
||||
using BTCPayServer.Data;
|
||||
using BTCPayServer.Rating;
|
||||
using BTCPayServer.Services.Invoices;
|
||||
using BTCPayServer.Services.Rates;
|
||||
using BTCPayServer.Services.Stores;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
|
@ -26,16 +27,16 @@ namespace BTCPayServer.Controllers.GreenField
|
|||
public class GreenfieldStoreRateConfigurationController : ControllerBase
|
||||
{
|
||||
private readonly RateFetcher _rateProviderFactory;
|
||||
private readonly BTCPayNetworkProvider _btcPayNetworkProvider;
|
||||
private readonly IEnumerable<DefaultRates> _defaultRates;
|
||||
private readonly StoreRepository _storeRepository;
|
||||
|
||||
public GreenfieldStoreRateConfigurationController(
|
||||
RateFetcher rateProviderFactory,
|
||||
BTCPayNetworkProvider btcPayNetworkProvider,
|
||||
IEnumerable<DefaultRates> defaultRates,
|
||||
StoreRepository storeRepository)
|
||||
{
|
||||
_rateProviderFactory = rateProviderFactory;
|
||||
_btcPayNetworkProvider = btcPayNetworkProvider;
|
||||
_defaultRates = defaultRates;
|
||||
_storeRepository = storeRepository;
|
||||
}
|
||||
|
||||
|
@ -48,7 +49,7 @@ namespace BTCPayServer.Controllers.GreenField
|
|||
|
||||
return Ok(new StoreRateConfiguration()
|
||||
{
|
||||
EffectiveScript = blob.GetRateRules(_btcPayNetworkProvider, out var preferredExchange).ToString(),
|
||||
EffectiveScript = blob.GetRateRules(_defaultRates, out var preferredExchange).ToString(),
|
||||
Spread = blob.Spread * 100.0m,
|
||||
IsCustomScript = blob.RateScripting,
|
||||
PreferredSource = preferredExchange ? blob.PreferredExchange : null
|
||||
|
@ -117,7 +118,7 @@ namespace BTCPayServer.Controllers.GreenField
|
|||
return this.CreateValidationError(ModelState);
|
||||
PopulateBlob(configuration, blob);
|
||||
|
||||
var rules = blob.GetRateRules(_btcPayNetworkProvider);
|
||||
var rules = blob.GetRateRules(_defaultRates);
|
||||
|
||||
|
||||
var rateTasks = _rateProviderFactory.FetchRates(parsedCurrencyPairs, rules, new StoreIdRateContext(data.Id), CancellationToken.None);
|
||||
|
@ -155,7 +156,7 @@ namespace BTCPayServer.Controllers.GreenField
|
|||
{
|
||||
if (string.IsNullOrEmpty(configuration.EffectiveScript))
|
||||
{
|
||||
configuration.EffectiveScript = storeBlob.GetDefaultRateRules(_btcPayNetworkProvider).ToString();
|
||||
configuration.EffectiveScript = storeBlob.GetDefaultRateRules(_defaultRates).ToString();
|
||||
}
|
||||
|
||||
if (!RateRules.TryParse(configuration.EffectiveScript, out var r))
|
||||
|
|
|
@ -9,6 +9,7 @@ using BTCPayServer.Client;
|
|||
using BTCPayServer.Client.Models;
|
||||
using BTCPayServer.Data;
|
||||
using BTCPayServer.Rating;
|
||||
using BTCPayServer.Services.Invoices;
|
||||
using BTCPayServer.Services.Rates;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Cors;
|
||||
|
@ -23,14 +24,14 @@ namespace BTCPayServer.Controllers.GreenField
|
|||
public class GreenfieldStoreRatesController : ControllerBase
|
||||
{
|
||||
private readonly RateFetcher _rateProviderFactory;
|
||||
private readonly BTCPayNetworkProvider _btcPayNetworkProvider;
|
||||
private readonly IEnumerable<DefaultRates> _defaultRates;
|
||||
|
||||
public GreenfieldStoreRatesController(
|
||||
RateFetcher rateProviderFactory,
|
||||
BTCPayNetworkProvider btcPayNetworkProvider)
|
||||
IEnumerable<DefaultRates> defaultRates)
|
||||
{
|
||||
_rateProviderFactory = rateProviderFactory;
|
||||
_btcPayNetworkProvider = btcPayNetworkProvider;
|
||||
_defaultRates = defaultRates;
|
||||
}
|
||||
|
||||
[HttpGet("")]
|
||||
|
@ -61,7 +62,7 @@ namespace BTCPayServer.Controllers.GreenField
|
|||
}
|
||||
|
||||
|
||||
var rules = blob.GetRateRules(_btcPayNetworkProvider);
|
||||
var rules = blob.GetRateRules(_defaultRates);
|
||||
|
||||
|
||||
var rateTasks = _rateProviderFactory.FetchRates(parsedCurrencyPairs, rules, new StoreIdRateContext(data.Id), CancellationToken.None);
|
||||
|
|
|
@ -382,7 +382,7 @@ namespace BTCPayServer.Controllers
|
|||
var paidCurrency = Math.Round(cryptoPaid * paymentMethod.Rate, cdCurrency.Divisibility);
|
||||
model.CryptoAmountThen = cryptoPaid.RoundToSignificant(paymentMethod.Divisibility);
|
||||
model.RateThenText = _displayFormatter.Currency(model.CryptoAmountThen, paymentMethodCurrency);
|
||||
rules = store.GetStoreBlob().GetRateRules(_NetworkProvider);
|
||||
rules = store.GetStoreBlob().GetRateRules(_defaultRates);
|
||||
rateResult = await _RateProvider.FetchRate(
|
||||
new CurrencyPair(paymentMethodCurrency, invoice.Currency), rules, new StoreIdRateContext(store.Id),
|
||||
cancellationToken);
|
||||
|
@ -491,7 +491,7 @@ namespace BTCPayServer.Controllers
|
|||
return View("_RefundModal", model);
|
||||
}
|
||||
|
||||
rules = store.GetStoreBlob().GetRateRules(_NetworkProvider);
|
||||
rules = store.GetStoreBlob().GetRateRules(_defaultRates);
|
||||
rateResult = await _RateProvider.FetchRate(
|
||||
new CurrencyPair(paymentMethodCurrency, model.CustomCurrency), rules, new StoreIdRateContext(store.Id),
|
||||
cancellationToken);
|
||||
|
|
|
@ -52,6 +52,7 @@ namespace BTCPayServer.Controllers
|
|||
readonly BTCPayNetworkProvider _NetworkProvider;
|
||||
private readonly PayoutMethodHandlerDictionary _payoutHandlers;
|
||||
private readonly PaymentMethodHandlerDictionary _handlers;
|
||||
private readonly IEnumerable<DefaultRates> _defaultRates;
|
||||
private readonly ApplicationDbContextFactory _dbContextFactory;
|
||||
private readonly PullPaymentHostedService _paymentHostedService;
|
||||
private readonly LanguageService _languageService;
|
||||
|
@ -93,6 +94,7 @@ namespace BTCPayServer.Controllers
|
|||
AppService appService,
|
||||
IFileService fileService,
|
||||
UriResolver uriResolver,
|
||||
IEnumerable<DefaultRates> defaultRates,
|
||||
IAuthorizationService authorizationService,
|
||||
TransactionLinkProviders transactionLinkProviders,
|
||||
Dictionary<PaymentMethodId, IPaymentModelExtension> paymentModelExtensions,
|
||||
|
@ -123,6 +125,7 @@ namespace BTCPayServer.Controllers
|
|||
_viewProvider = viewProvider;
|
||||
_fileService = fileService;
|
||||
_uriResolver = uriResolver;
|
||||
_defaultRates = defaultRates;
|
||||
_appService = appService;
|
||||
}
|
||||
|
||||
|
@ -294,7 +297,7 @@ namespace BTCPayServer.Controllers
|
|||
|
||||
private async Task FetchRates(InvoiceCreationContext context, CancellationToken cancellationToken)
|
||||
{
|
||||
var rateRules = context.StoreBlob.GetRateRules(_NetworkProvider);
|
||||
var rateRules = context.StoreBlob.GetRateRules(_defaultRates);
|
||||
await context.FetchingRates(_RateProvider, rateRules, cancellationToken);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,8 +28,8 @@ public partial class UIStoresController
|
|||
vm.SetExchangeRates(exchanges, storeBlob.PreferredExchange ?? storeBlob.GetRecommendedExchange());
|
||||
vm.Spread = (double)(storeBlob.Spread * 100m);
|
||||
vm.StoreId = CurrentStore.Id;
|
||||
vm.Script = storeBlob.GetRateRules(_networkProvider).ToString();
|
||||
vm.DefaultScript = storeBlob.GetDefaultRateRules(_networkProvider).ToString();
|
||||
vm.Script = storeBlob.GetRateRules(_defaultRates).ToString();
|
||||
vm.DefaultScript = storeBlob.GetDefaultRateRules(_defaultRates).ToString();
|
||||
vm.AvailableExchanges = exchanges;
|
||||
vm.DefaultCurrencyPairs = storeBlob.GetDefaultCurrencyPairString();
|
||||
vm.ShowScripting = storeBlob.RateScripting;
|
||||
|
@ -72,7 +72,7 @@ public partial class UIStoresController
|
|||
model.PreferredExchange = model.PreferredExchange.Trim().ToLowerInvariant();
|
||||
|
||||
var blob = CurrentStore.GetStoreBlob();
|
||||
model.DefaultScript = blob.GetDefaultRateRules(_networkProvider).ToString();
|
||||
model.DefaultScript = blob.GetDefaultRateRules(_defaultRates).ToString();
|
||||
model.AvailableExchanges = exchanges;
|
||||
|
||||
blob.PreferredExchange = model.PreferredExchange;
|
||||
|
@ -103,7 +103,7 @@ public partial class UIStoresController
|
|||
model.Script = blob.RateScript;
|
||||
}
|
||||
}
|
||||
rules = blob.GetRateRules(_networkProvider);
|
||||
rules = blob.GetRateRules(_defaultRates);
|
||||
|
||||
if (command == "Test")
|
||||
{
|
||||
|
@ -175,7 +175,7 @@ public partial class UIStoresController
|
|||
{
|
||||
var blob = CurrentStore.GetStoreBlob();
|
||||
blob.RateScripting = scripting;
|
||||
blob.RateScript = blob.GetDefaultRateRules(_networkProvider).ToString();
|
||||
blob.RateScript = blob.GetDefaultRateRules(_defaultRates).ToString();
|
||||
CurrentStore.SetStoreBlob(blob);
|
||||
await _storeRepo.UpdateStore(CurrentStore);
|
||||
TempData[WellKnownTempData.SuccessMessage] = "Rate rules scripting " + (scripting ? "activated" : "deactivated");
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
#nullable enable
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using BTCPayServer.Abstractions.Constants;
|
||||
|
@ -54,6 +55,7 @@ public partial class UIStoresController : Controller
|
|||
IOptions<LightningNetworkOptions> lightningNetworkOptions,
|
||||
IOptions<ExternalServicesOptions> externalServiceOptions,
|
||||
IHtmlHelper html,
|
||||
IEnumerable<DefaultRates> defaultRates,
|
||||
EmailSenderFactory emailSenderFactory,
|
||||
WalletFileParsers onChainWalletParsers,
|
||||
UriResolver uriResolver,
|
||||
|
@ -83,6 +85,7 @@ public partial class UIStoresController : Controller
|
|||
_settingsRepository = settingsRepository;
|
||||
_eventAggregator = eventAggregator;
|
||||
_html = html;
|
||||
_defaultRates = defaultRates;
|
||||
_dataProtector = dataProtector.CreateProtector("ConfigProtector");
|
||||
_webhookNotificationManager = webhookNotificationManager;
|
||||
_lightningNetworkOptions = lightningNetworkOptions.Value;
|
||||
|
@ -101,6 +104,7 @@ public partial class UIStoresController : Controller
|
|||
private readonly ExplorerClientProvider _explorerProvider;
|
||||
private readonly LanguageService _langService;
|
||||
private readonly PaymentMethodHandlerDictionary _handlers;
|
||||
private readonly IEnumerable<DefaultRates> _defaultRates;
|
||||
private readonly PoliciesSettings _policiesSettings;
|
||||
private readonly IAuthorizationService _authorizationService;
|
||||
private readonly AppService _appService;
|
||||
|
|
|
@ -73,6 +73,7 @@ namespace BTCPayServer.Controllers
|
|||
private readonly PayjoinClient _payjoinClient;
|
||||
private readonly LabelService _labelService;
|
||||
private readonly PaymentMethodHandlerDictionary _handlers;
|
||||
private readonly IEnumerable<DefaultRates> _defaultRates;
|
||||
private readonly Dictionary<PaymentMethodId, IPaymentModelExtension> _paymentModelExtensions;
|
||||
private readonly TransactionLinkProviders _transactionLinkProviders;
|
||||
private readonly PullPaymentHostedService _pullPaymentHostedService;
|
||||
|
@ -99,12 +100,14 @@ namespace BTCPayServer.Controllers
|
|||
IServiceProvider serviceProvider,
|
||||
PullPaymentHostedService pullPaymentHostedService,
|
||||
LabelService labelService,
|
||||
IEnumerable<DefaultRates> defaultRates,
|
||||
PaymentMethodHandlerDictionary handlers,
|
||||
Dictionary<PaymentMethodId, IPaymentModelExtension> paymentModelExtensions,
|
||||
TransactionLinkProviders transactionLinkProviders)
|
||||
{
|
||||
_currencyTable = currencyTable;
|
||||
_labelService = labelService;
|
||||
_defaultRates = defaultRates;
|
||||
_handlers = handlers;
|
||||
_paymentModelExtensions = paymentModelExtensions;
|
||||
_transactionLinkProviders = transactionLinkProviders;
|
||||
|
@ -456,7 +459,7 @@ namespace BTCPayServer.Controllers
|
|||
if (network == null || network.ReadonlyWallet)
|
||||
return NotFound();
|
||||
var storeData = store.GetStoreBlob();
|
||||
var rateRules = store.GetStoreBlob().GetRateRules(NetworkProvider);
|
||||
var rateRules = store.GetStoreBlob().GetRateRules(_defaultRates);
|
||||
rateRules.Spread = 0.0m;
|
||||
var currencyPair = new Rating.CurrencyPair(walletId.CryptoCode, storeData.DefaultCurrency);
|
||||
double.TryParse(defaultAmount, out var amount);
|
||||
|
|
|
@ -49,6 +49,7 @@ public class BitcoinLikePayoutHandler : IPayoutHandler, IHasNetwork
|
|||
public PayoutMethodId PayoutMethodId { get; }
|
||||
public PaymentMethodId PaymentMethodId { get; }
|
||||
public BTCPayNetwork Network { get; }
|
||||
public string[] DefaultRateRules => Network.DefaultRateRules;
|
||||
public WalletRepository WalletRepository { get; }
|
||||
|
||||
public BitcoinLikePayoutHandler(BTCPayNetworkProvider btcPayNetworkProvider,
|
||||
|
|
|
@ -34,6 +34,7 @@ namespace BTCPayServer.Data.Payouts.LightningLike
|
|||
private PaymentMethodHandlerDictionary _paymentHandlers;
|
||||
|
||||
public BTCPayNetwork Network { get; }
|
||||
public string[] DefaultRateRules => Network.DefaultRateRules;
|
||||
|
||||
public const string LightningLikePayoutHandlerOnionNamedClient =
|
||||
nameof(LightningLikePayoutHandlerOnionNamedClient);
|
||||
|
|
|
@ -10,6 +10,7 @@ using BTCPayServer.Controllers;
|
|||
using BTCPayServer.JsonConverters;
|
||||
using BTCPayServer.Payments;
|
||||
using BTCPayServer.Rating;
|
||||
using BTCPayServer.Services.Invoices;
|
||||
using BTCPayServer.Services.Mails;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
|
@ -134,18 +135,18 @@ namespace BTCPayServer.Data
|
|||
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)]
|
||||
public double PaymentTolerance { get; set; }
|
||||
|
||||
public BTCPayServer.Rating.RateRules GetRateRules(BTCPayNetworkProvider networkProvider)
|
||||
public BTCPayServer.Rating.RateRules GetRateRules(IEnumerable<DefaultRates> defaultRates)
|
||||
{
|
||||
return GetRateRules(networkProvider, out _);
|
||||
return GetRateRules(defaultRates, out _);
|
||||
}
|
||||
public BTCPayServer.Rating.RateRules GetRateRules(BTCPayNetworkProvider networkProvider, out bool preferredSource)
|
||||
public BTCPayServer.Rating.RateRules GetRateRules(IEnumerable<DefaultRates> defaultRates, out bool preferredSource)
|
||||
{
|
||||
if (!RateScripting ||
|
||||
string.IsNullOrEmpty(RateScript) ||
|
||||
!BTCPayServer.Rating.RateRules.TryParse(RateScript, out var rules))
|
||||
{
|
||||
preferredSource = true;
|
||||
return GetDefaultRateRules(networkProvider);
|
||||
return GetDefaultRateRules(defaultRates);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -155,15 +156,14 @@ namespace BTCPayServer.Data
|
|||
}
|
||||
}
|
||||
|
||||
public RateRules GetDefaultRateRules(BTCPayNetworkProvider networkProvider)
|
||||
public RateRules GetDefaultRateRules(IEnumerable<DefaultRates> defaultRates)
|
||||
{
|
||||
var builder = new StringBuilder();
|
||||
foreach (var network in networkProvider.GetAll())
|
||||
foreach (var rates in defaultRates)
|
||||
{
|
||||
if (network.DefaultRateRules.Length != 0)
|
||||
if (rates.Rates is { Length: > 0 } r)
|
||||
{
|
||||
builder.AppendLine(CultureInfo.InvariantCulture, $"// Default rate rules for {network.CryptoCode}");
|
||||
foreach (var line in network.DefaultRateRules)
|
||||
foreach (var line in r)
|
||||
{
|
||||
builder.AppendLine(line);
|
||||
}
|
||||
|
|
2
BTCPayServer/DefaultRates.cs
Normal file
2
BTCPayServer/DefaultRates.cs
Normal file
|
@ -0,0 +1,2 @@
|
|||
namespace BTCPayServer;
|
||||
public record DefaultRates(string[] Rates);
|
|
@ -279,6 +279,7 @@ namespace BTCPayServer.HostedServices
|
|||
EventAggregator eventAggregator,
|
||||
BTCPayNetworkProvider networkProvider,
|
||||
PayoutMethodHandlerDictionary handlers,
|
||||
IEnumerable<DefaultRates> defaultRates,
|
||||
NotificationSender notificationSender,
|
||||
RateFetcher rateFetcher,
|
||||
ILogger<PullPaymentHostedService> logger,
|
||||
|
@ -291,6 +292,7 @@ namespace BTCPayServer.HostedServices
|
|||
_eventAggregator = eventAggregator;
|
||||
_networkProvider = networkProvider;
|
||||
_handlers = handlers;
|
||||
_defaultRates = defaultRates;
|
||||
_notificationSender = notificationSender;
|
||||
_rateFetcher = rateFetcher;
|
||||
_logger = logger;
|
||||
|
@ -304,6 +306,7 @@ namespace BTCPayServer.HostedServices
|
|||
private readonly EventAggregator _eventAggregator;
|
||||
private readonly BTCPayNetworkProvider _networkProvider;
|
||||
private readonly PayoutMethodHandlerDictionary _handlers;
|
||||
private readonly IEnumerable<DefaultRates> _defaultRates;
|
||||
private readonly NotificationSender _notificationSender;
|
||||
private readonly RateFetcher _rateFetcher;
|
||||
private readonly ILogger<PullPaymentHostedService> _logger;
|
||||
|
@ -389,7 +392,7 @@ namespace BTCPayServer.HostedServices
|
|||
if (explicitRateRule is null)
|
||||
{
|
||||
var storeBlob = payout.StoreData.GetStoreBlob();
|
||||
var rules = storeBlob.GetRateRules(_networkProvider);
|
||||
var rules = storeBlob.GetRateRules(_defaultRates);
|
||||
rules.Spread = 0.0m;
|
||||
rule = rules.GetRuleFor(currencyPair);
|
||||
}
|
||||
|
|
|
@ -563,11 +563,13 @@ o.GetRequiredService<IEnumerable<IPaymentLinkExtension>>().ToDictionary(o => o.P
|
|||
}
|
||||
public static IServiceCollection AddBTCPayNetwork(this IServiceCollection services, BTCPayNetworkBase network)
|
||||
{
|
||||
services.AddSingleton(new DefaultRates(network.DefaultRateRules));
|
||||
services.AddSingleton<BTCPayNetworkBase>(network);
|
||||
return services;
|
||||
}
|
||||
public static IServiceCollection AddBTCPayNetwork(this IServiceCollection services, BTCPayNetwork network)
|
||||
{
|
||||
services.AddSingleton(new DefaultRates(network.DefaultRateRules));
|
||||
// BTC
|
||||
{
|
||||
var pmi = PaymentTypes.CHAIN.GetPaymentMethodId(network.CryptoCode);
|
||||
|
|
Loading…
Add table
Reference in a new issue