btcpayserver/BTCPayServer/Services/Fees/NBxplorerFeeProvider.cs

52 lines
1.7 KiB
C#
Raw Normal View History

2020-06-28 10:55:27 +02:00
using System;
2017-09-13 08:47:34 +02:00
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
2020-06-28 10:55:27 +02:00
using NBitcoin;
using NBXplorer;
using NBXplorer.Models;
2017-09-13 08:47:34 +02:00
namespace BTCPayServer.Services.Fees
2017-09-13 08:47:34 +02:00
{
public class NBXplorerFeeProviderFactory : IFeeProviderFactory
{
public NBXplorerFeeProviderFactory(ExplorerClientProvider explorerClients)
{
if (explorerClients == null)
throw new ArgumentNullException(nameof(explorerClients));
_ExplorerClients = explorerClients;
}
private readonly ExplorerClientProvider _ExplorerClients;
public FeeRate Fallback { get; set; }
public IFeeProvider CreateFeeProvider(BTCPayNetworkBase network)
{
return new NBXplorerFeeProvider(this, _ExplorerClients.GetExplorerClient(network));
}
}
public class NBXplorerFeeProvider : IFeeProvider
{
public NBXplorerFeeProvider(NBXplorerFeeProviderFactory parent, ExplorerClient explorerClient)
{
if (explorerClient == null)
throw new ArgumentNullException(nameof(explorerClient));
_Factory = parent;
_ExplorerClient = explorerClient;
}
NBXplorerFeeProviderFactory _Factory;
ExplorerClient _ExplorerClient;
public async Task<FeeRate> GetFeeRateAsync(int blockTarget = 20)
{
try
{
return (await _ExplorerClient.GetFeeRateAsync(blockTarget).ConfigureAwait(false)).FeeRate;
}
catch (NBXplorerException ex) when (ex.Error.HttpCode == 400 && ex.Error.Code == "fee-estimation-unavailable")
{
return _Factory.Fallback;
}
}
}
2017-09-13 08:47:34 +02:00
}