2020-06-28 21:44:35 -05:00
|
|
|
using System;
|
2017-12-21 15:52:04 +09:00
|
|
|
using System.Collections.Generic;
|
|
|
|
using System.Linq;
|
2023-11-29 18:51:40 +09:00
|
|
|
using BTCPayServer.Configuration;
|
|
|
|
using BTCPayServer.Logging;
|
|
|
|
using Microsoft.AspNetCore.DataProtection.KeyManagement;
|
|
|
|
using Microsoft.AspNetCore.HttpOverrides;
|
|
|
|
using Microsoft.Extensions.Configuration;
|
|
|
|
using Microsoft.Extensions.Logging;
|
2017-12-21 15:52:04 +09:00
|
|
|
using NBitcoin;
|
2018-01-12 11:54:57 +09:00
|
|
|
using NBXplorer;
|
2023-11-29 18:51:40 +09:00
|
|
|
using StandardConfiguration;
|
2017-12-21 15:52:04 +09:00
|
|
|
|
|
|
|
namespace BTCPayServer
|
|
|
|
{
|
2018-01-12 11:54:57 +09:00
|
|
|
public partial class BTCPayNetworkProvider
|
2017-12-21 15:52:04 +09:00
|
|
|
{
|
2021-01-07 14:49:53 +01:00
|
|
|
protected readonly Dictionary<string, BTCPayNetworkBase> _Networks = new Dictionary<string, BTCPayNetworkBase>();
|
2017-12-21 15:52:04 +09:00
|
|
|
|
2018-01-12 11:54:57 +09:00
|
|
|
private readonly NBXplorerNetworkProvider _NBXplorerNetworkProvider;
|
|
|
|
public NBXplorerNetworkProvider NBXplorerNetworkProvider
|
|
|
|
{
|
|
|
|
get
|
2017-12-21 15:52:04 +09:00
|
|
|
{
|
2018-01-12 11:54:57 +09:00
|
|
|
return _NBXplorerNetworkProvider;
|
2017-12-21 15:52:04 +09:00
|
|
|
}
|
2018-01-12 11:54:57 +09:00
|
|
|
}
|
2018-01-11 22:52:28 +09:00
|
|
|
|
2021-01-27 14:39:38 +09:00
|
|
|
public ChainName NetworkType { get; private set; }
|
2023-11-29 18:51:40 +09:00
|
|
|
public BTCPayNetworkProvider(
|
|
|
|
IEnumerable<BTCPayNetworkBase> networks,
|
|
|
|
SelectedChains selectedChains,
|
|
|
|
NBXplorerNetworkProvider nbxplorerNetworkProvider,
|
2023-12-22 09:25:04 +01:00
|
|
|
Logs logs)
|
2018-01-12 11:54:57 +09:00
|
|
|
{
|
2023-12-22 09:25:04 +01:00
|
|
|
var networksList = networks.ToList();
|
2023-11-29 18:51:40 +09:00
|
|
|
_NBXplorerNetworkProvider = nbxplorerNetworkProvider;
|
|
|
|
NetworkType = nbxplorerNetworkProvider.NetworkType;
|
2023-12-22 09:25:04 +01:00
|
|
|
foreach (var network in networksList)
|
2019-05-09 17:51:46 +09:00
|
|
|
{
|
2023-11-29 18:51:40 +09:00
|
|
|
_Networks.Add(network.CryptoCode.ToUpperInvariant(), network);
|
2019-05-09 17:51:46 +09:00
|
|
|
}
|
|
|
|
|
2023-11-29 18:51:40 +09:00
|
|
|
foreach (var chain in selectedChains.ExplicitlySelected)
|
|
|
|
{
|
|
|
|
if (GetNetwork<BTCPayNetworkBase>(chain) == null)
|
|
|
|
throw new ConfigException($"Invalid chains \"{chain}\"");
|
|
|
|
}
|
2017-12-21 15:52:04 +09:00
|
|
|
|
2023-12-22 09:25:04 +01:00
|
|
|
logs.Configuration.LogInformation("Supported chains: {Chains}", string.Join(',', _Networks.Select(n => n.Key).ToArray()));
|
2018-02-26 00:48:12 +09:00
|
|
|
}
|
|
|
|
|
2019-05-29 09:43:50 +00:00
|
|
|
public BTCPayNetwork BTC => GetNetwork<BTCPayNetwork>("BTC");
|
2022-02-10 12:43:26 +09:00
|
|
|
public BTCPayNetworkBase DefaultNetwork => BTC ?? GetAll().First();
|
2019-05-29 09:43:50 +00:00
|
|
|
public IEnumerable<BTCPayNetworkBase> GetAll()
|
2018-01-08 02:36:41 +09:00
|
|
|
{
|
|
|
|
return _Networks.Values.ToArray();
|
|
|
|
}
|
|
|
|
|
2018-02-26 00:48:12 +09:00
|
|
|
public bool Support(string cryptoCode)
|
|
|
|
{
|
|
|
|
return _Networks.ContainsKey(cryptoCode.ToUpperInvariant());
|
|
|
|
}
|
2019-06-04 09:52:06 +09:00
|
|
|
public BTCPayNetworkBase GetNetwork(string cryptoCode)
|
|
|
|
{
|
2019-12-24 08:20:44 +01:00
|
|
|
return GetNetwork<BTCPayNetworkBase>(cryptoCode.ToUpperInvariant());
|
2019-06-04 09:52:06 +09:00
|
|
|
}
|
2020-06-28 17:55:27 +09:00
|
|
|
public T GetNetwork<T>(string cryptoCode) where T : BTCPayNetworkBase
|
2017-12-21 15:52:04 +09:00
|
|
|
{
|
2021-12-28 17:39:54 +09:00
|
|
|
ArgumentNullException.ThrowIfNull(cryptoCode);
|
2020-06-28 17:55:27 +09:00
|
|
|
if (!_Networks.TryGetValue(cryptoCode.ToUpperInvariant(), out BTCPayNetworkBase network))
|
2018-05-04 15:35:39 +09:00
|
|
|
{
|
|
|
|
if (cryptoCode == "XBT")
|
2019-05-29 09:43:50 +00:00
|
|
|
return GetNetwork<T>("BTC");
|
2018-05-04 15:35:39 +09:00
|
|
|
}
|
2019-05-29 09:43:50 +00:00
|
|
|
return network as T;
|
2017-12-21 15:52:04 +09:00
|
|
|
}
|
2021-04-18 11:26:06 +09:00
|
|
|
public bool TryGetNetwork<T>(string cryptoCode, out T network) where T : BTCPayNetworkBase
|
|
|
|
{
|
|
|
|
network = GetNetwork<T>(cryptoCode);
|
|
|
|
return network != null;
|
|
|
|
}
|
2017-12-21 15:52:04 +09:00
|
|
|
}
|
2020-12-02 23:34:38 -06:00
|
|
|
}
|