Update NBXplorer

This commit is contained in:
nicolas.dorier
2018-04-19 16:54:25 +09:00
parent e4299c09ea
commit 10c981b2a0
20 changed files with 96 additions and 66 deletions

View File

@@ -72,7 +72,7 @@ namespace BTCPayServer.Tests
{ {
if (!Directory.Exists(_Directory)) if (!Directory.Exists(_Directory))
Directory.CreateDirectory(_Directory); Directory.CreateDirectory(_Directory);
string chain = ChainType.Regtest.ToNetwork().Name; string chain = NBXplorerDefaultSettings.GetFolderName(NetworkType.Regtest);
string chainDirectory = Path.Combine(_Directory, chain); string chainDirectory = Path.Combine(_Directory, chain);
if (!Directory.Exists(chainDirectory)) if (!Directory.Exists(chainDirectory))
Directory.CreateDirectory(chainDirectory); Directory.CreateDirectory(chainDirectory);

View File

@@ -39,7 +39,7 @@ namespace BTCPayServer.Tests
if (!Directory.Exists(_Directory)) if (!Directory.Exists(_Directory))
Directory.CreateDirectory(_Directory); Directory.CreateDirectory(_Directory);
NetworkProvider = new BTCPayNetworkProvider(ChainType.Regtest); NetworkProvider = new BTCPayNetworkProvider(NetworkType.Regtest);
ExplorerNode = new RPCClient(RPCCredentialString.Parse(GetEnvironment("TESTS_BTCRPCCONNECTION", "server=http://127.0.0.1:43782;ceiwHEbqWI83:DwubwWsoo3")), NetworkProvider.GetNetwork("BTC").NBitcoinNetwork); ExplorerNode = new RPCClient(RPCCredentialString.Parse(GetEnvironment("TESTS_BTCRPCCONNECTION", "server=http://127.0.0.1:43782;ceiwHEbqWI83:DwubwWsoo3")), NetworkProvider.GetNetwork("BTC").NBitcoinNetwork);
LTCExplorerNode = new RPCClient(RPCCredentialString.Parse(GetEnvironment("TESTS_LTCRPCCONNECTION", "server=http://127.0.0.1:43783;ceiwHEbqWI83:DwubwWsoo3")), NetworkProvider.GetNetwork("LTC").NBitcoinNetwork); LTCExplorerNode = new RPCClient(RPCCredentialString.Parse(GetEnvironment("TESTS_LTCRPCCONNECTION", "server=http://127.0.0.1:43783;ceiwHEbqWI83:DwubwWsoo3")), NetworkProvider.GetNetwork("LTC").NBitcoinNetwork);

View File

@@ -873,7 +873,7 @@ namespace BTCPayServer.Tests
[Fact] [Fact]
public void CanParseDerivationScheme() public void CanParseDerivationScheme()
{ {
var parser = new DerivationSchemeParser(Network.TestNet, NBXplorer.ChainType.Test); var parser = new DerivationSchemeParser(Network.TestNet);
NBXplorer.DerivationStrategy.DerivationStrategyBase result; NBXplorer.DerivationStrategy.DerivationStrategyBase result;
// Passing electrum stuff // Passing electrum stuff
// Native // Native

View File

@@ -46,7 +46,7 @@ services:
- lightning-charged - lightning-charged
nbxplorer: nbxplorer:
image: nicolasdorier/nbxplorer:1.0.1.34 image: nicolasdorier/nbxplorer:1.0.2.0
ports: ports:
- "32838:32838" - "32838:32838"
expose: expose:

View File

@@ -14,34 +14,28 @@ namespace BTCPayServer
{ {
static BTCPayDefaultSettings() static BTCPayDefaultSettings()
{ {
_Settings = new Dictionary<ChainType, BTCPayDefaultSettings>(); _Settings = new Dictionary<NetworkType, BTCPayDefaultSettings>();
foreach (var chainType in new[] { ChainType.Main, ChainType.Test, ChainType.Regtest }) foreach (var chainType in new[] { NetworkType.Mainnet, NetworkType.Testnet, NetworkType.Regtest })
{ {
var btcNetwork = (chainType == ChainType.Main ? Network.Main :
chainType == ChainType.Regtest ? Network.RegTest :
chainType == ChainType.Test ? Network.TestNet : throw new NotSupportedException(chainType.ToString()));
var settings = new BTCPayDefaultSettings(); var settings = new BTCPayDefaultSettings();
_Settings.Add(chainType, settings); _Settings.Add(chainType, settings);
settings.ChainType = chainType; settings.DefaultDataDirectory = StandardConfiguration.DefaultDataDirectory.GetDirectory("BTCPayServer", NBXplorerDefaultSettings.GetFolderName(chainType));
settings.DefaultDataDirectory = StandardConfiguration.DefaultDataDirectory.GetDirectory("BTCPayServer", btcNetwork.Name);
settings.DefaultConfigurationFile = Path.Combine(settings.DefaultDataDirectory, "settings.config"); settings.DefaultConfigurationFile = Path.Combine(settings.DefaultDataDirectory, "settings.config");
settings.DefaultPort = (chainType == ChainType.Main ? 23000 : settings.DefaultPort = (chainType == NetworkType.Mainnet ? 23000 :
chainType == ChainType.Regtest ? 23002 : chainType == NetworkType.Regtest ? 23002 :
chainType == ChainType.Test ? 23001 : throw new NotSupportedException(chainType.ToString())); chainType == NetworkType.Testnet ? 23001 : throw new NotSupportedException(chainType.ToString()));
} }
} }
static Dictionary<ChainType, BTCPayDefaultSettings> _Settings; static Dictionary<NetworkType, BTCPayDefaultSettings> _Settings;
public static BTCPayDefaultSettings GetDefaultSettings(ChainType chainType) public static BTCPayDefaultSettings GetDefaultSettings(NetworkType chainType)
{ {
return _Settings[chainType]; return _Settings[chainType];
} }
public string DefaultDataDirectory { get; set; } public string DefaultDataDirectory { get; set; }
public string DefaultConfigurationFile { get; set; } public string DefaultConfigurationFile { get; set; }
public ChainType ChainType { get; internal set; }
public int DefaultPort { get; set; } public int DefaultPort { get; set; }
} }
public class BTCPayNetwork public class BTCPayNetwork

View File

@@ -20,15 +20,15 @@ namespace BTCPayServer
Add(new BTCPayNetwork() Add(new BTCPayNetwork()
{ {
CryptoCode = nbxplorerNetwork.CryptoCode, CryptoCode = nbxplorerNetwork.CryptoCode,
BlockExplorerLink = NBXplorerNetworkProvider.ChainType == ChainType.Main ? "https://www.smartbit.com.au/tx/{0}" : "https://testnet.smartbit.com.au/tx/{0}", BlockExplorerLink = NetworkType == NetworkType.Mainnet ? "https://www.smartbit.com.au/tx/{0}" : "https://testnet.smartbit.com.au/tx/{0}",
NBitcoinNetwork = nbxplorerNetwork.NBitcoinNetwork, NBitcoinNetwork = nbxplorerNetwork.NBitcoinNetwork,
NBXplorerNetwork = nbxplorerNetwork, NBXplorerNetwork = nbxplorerNetwork,
UriScheme = "bitcoin", UriScheme = "bitcoin",
DefaultRateProvider = btcRate, DefaultRateProvider = btcRate,
CryptoImagePath = "imlegacy/bitcoin-symbol.svg", CryptoImagePath = "imlegacy/bitcoin-symbol.svg",
LightningImagePath = "imlegacy/btc-lightning.svg", LightningImagePath = "imlegacy/btc-lightning.svg",
DefaultSettings = BTCPayDefaultSettings.GetDefaultSettings(NBXplorerNetworkProvider.ChainType), DefaultSettings = BTCPayDefaultSettings.GetDefaultSettings(NetworkType),
CoinType = NBXplorerNetworkProvider.ChainType == ChainType.Main ? new KeyPath("0'") : new KeyPath("1'") CoinType = NetworkType == NetworkType.Mainnet ? new KeyPath("0'") : new KeyPath("1'")
}); });
} }
} }

View File

@@ -12,20 +12,18 @@ namespace BTCPayServer
{ {
public void InitDogecoin() public void InitDogecoin()
{ {
NBitcoin.Altcoins.Dogecoin.EnsureRegistered();
var nbxplorerNetwork = NBXplorerNetworkProvider.GetFromCryptoCode("DOGE"); var nbxplorerNetwork = NBXplorerNetworkProvider.GetFromCryptoCode("DOGE");
Add(new BTCPayNetwork() Add(new BTCPayNetwork()
{ {
CryptoCode = nbxplorerNetwork.CryptoCode, CryptoCode = nbxplorerNetwork.CryptoCode,
BlockExplorerLink = NBXplorerNetworkProvider.ChainType == ChainType.Main ? "https://dogechain.info/tx/{0}" : "https://dogechain.info/tx/{0}", BlockExplorerLink = NetworkType == NetworkType.Mainnet ? "https://dogechain.info/tx/{0}" : "https://dogechain.info/tx/{0}",
NBitcoinNetwork = nbxplorerNetwork.NBitcoinNetwork, NBitcoinNetwork = nbxplorerNetwork.NBitcoinNetwork,
NBXplorerNetwork = nbxplorerNetwork, NBXplorerNetwork = nbxplorerNetwork,
UriScheme = "dogecoin", UriScheme = "dogecoin",
DefaultRateProvider = new CoinAverageRateProviderDescription("DOGE"), DefaultRateProvider = new CoinAverageRateProviderDescription("DOGE"),
CryptoImagePath = "imlegacy/dogecoin.png", CryptoImagePath = "imlegacy/dogecoin.png",
DefaultSettings = BTCPayDefaultSettings.GetDefaultSettings(NBXplorerNetworkProvider.ChainType), DefaultSettings = BTCPayDefaultSettings.GetDefaultSettings(NetworkType),
CoinType = NBXplorerNetworkProvider.ChainType == ChainType.Main ? new KeyPath("3'") : new KeyPath("1'") CoinType = NetworkType == NetworkType.Mainnet ? new KeyPath("3'") : new KeyPath("1'")
}); });
} }
} }

View File

@@ -12,21 +12,19 @@ namespace BTCPayServer
{ {
public void InitLitecoin() public void InitLitecoin()
{ {
NBitcoin.Altcoins.Litecoin.EnsureRegistered();
var nbxplorerNetwork = NBXplorerNetworkProvider.GetFromCryptoCode("LTC"); var nbxplorerNetwork = NBXplorerNetworkProvider.GetFromCryptoCode("LTC");
Add(new BTCPayNetwork() Add(new BTCPayNetwork()
{ {
CryptoCode = nbxplorerNetwork.CryptoCode, CryptoCode = nbxplorerNetwork.CryptoCode,
BlockExplorerLink = NBXplorerNetworkProvider.ChainType == ChainType.Main ? "https://live.blockcypher.com/ltc/tx/{0}/" : "http://explorer.litecointools.com/tx/{0}", BlockExplorerLink = NetworkType == NetworkType.Mainnet ? "https://live.blockcypher.com/ltc/tx/{0}/" : "http://explorer.litecointools.com/tx/{0}",
NBitcoinNetwork = nbxplorerNetwork.NBitcoinNetwork, NBitcoinNetwork = nbxplorerNetwork.NBitcoinNetwork,
NBXplorerNetwork = nbxplorerNetwork, NBXplorerNetwork = nbxplorerNetwork,
UriScheme = "litecoin", UriScheme = "litecoin",
DefaultRateProvider = new CoinAverageRateProviderDescription("LTC"), DefaultRateProvider = new CoinAverageRateProviderDescription("LTC"),
CryptoImagePath = "imlegacy/litecoin-symbol.svg", CryptoImagePath = "imlegacy/litecoin-symbol.svg",
LightningImagePath = "imlegacy/ltc-lightning.svg", LightningImagePath = "imlegacy/ltc-lightning.svg",
DefaultSettings = BTCPayDefaultSettings.GetDefaultSettings(NBXplorerNetworkProvider.ChainType), DefaultSettings = BTCPayDefaultSettings.GetDefaultSettings(NetworkType),
CoinType = NBXplorerNetworkProvider.ChainType == ChainType.Main ? new KeyPath("2'") : new KeyPath("1'") CoinType = NetworkType == NetworkType.Mainnet ? new KeyPath("2'") : new KeyPath("1'")
}); });
} }
} }

View File

@@ -27,8 +27,8 @@ namespace BTCPayServer
BTCPayNetworkProvider(BTCPayNetworkProvider filtered, string[] cryptoCodes) BTCPayNetworkProvider(BTCPayNetworkProvider filtered, string[] cryptoCodes)
{ {
ChainType = filtered.ChainType; NetworkType = filtered.NetworkType;
_NBXplorerNetworkProvider = new NBXplorerNetworkProvider(filtered.ChainType); _NBXplorerNetworkProvider = new NBXplorerNetworkProvider(filtered.NetworkType);
_Networks = new Dictionary<string, BTCPayNetwork>(); _Networks = new Dictionary<string, BTCPayNetwork>();
cryptoCodes = cryptoCodes.Select(c => c.ToUpperInvariant()).ToArray(); cryptoCodes = cryptoCodes.Select(c => c.ToUpperInvariant()).ToArray();
foreach (var network in filtered._Networks) foreach (var network in filtered._Networks)
@@ -40,11 +40,11 @@ namespace BTCPayServer
} }
} }
public ChainType ChainType { get; set; } public NetworkType NetworkType { get; private set; }
public BTCPayNetworkProvider(ChainType chainType) public BTCPayNetworkProvider(NetworkType networkType)
{ {
_NBXplorerNetworkProvider = new NBXplorerNetworkProvider(chainType); _NBXplorerNetworkProvider = new NBXplorerNetworkProvider(networkType);
ChainType = chainType; NetworkType = networkType;
InitBitcoin(); InitBitcoin();
InitLitecoin(); InitLitecoin();
InitDogecoin(); InitDogecoin();

View File

@@ -39,10 +39,10 @@
<PackageReference Include="Meziantou.AspNetCore.BundleTagHelpers" Version="1.0.1" /> <PackageReference Include="Meziantou.AspNetCore.BundleTagHelpers" Version="1.0.1" />
<PackageReference Include="Microsoft.Extensions.Logging.Filter" Version="1.1.2" /> <PackageReference Include="Microsoft.Extensions.Logging.Filter" Version="1.1.2" />
<PackageReference Include="Microsoft.NetCore.Analyzers" Version="2.6.0" /> <PackageReference Include="Microsoft.NetCore.Analyzers" Version="2.6.0" />
<PackageReference Include="NBitcoin" Version="4.1.0.13" /> <PackageReference Include="NBitcoin" Version="4.1.1" />
<PackageReference Include="NBitpayClient" Version="1.0.0.18" /> <PackageReference Include="NBitpayClient" Version="1.0.0.18" />
<PackageReference Include="DBreeze" Version="1.87.0" /> <PackageReference Include="DBreeze" Version="1.87.0" />
<PackageReference Include="NBXplorer.Client" Version="1.0.1.24" /> <PackageReference Include="NBXplorer.Client" Version="1.0.2" />
<PackageReference Include="NicolasDorier.CommandLine" Version="1.0.0.1" /> <PackageReference Include="NicolasDorier.CommandLine" Version="1.0.0.1" />
<PackageReference Include="NicolasDorier.CommandLine.Configuration" Version="1.0.0.2" /> <PackageReference Include="NicolasDorier.CommandLine.Configuration" Version="1.0.0.2" />
<PackageReference Include="NicolasDorier.StandardConfiguration" Version="1.0.0.13" /> <PackageReference Include="NicolasDorier.StandardConfiguration" Version="1.0.0.13" />

View File

@@ -23,7 +23,7 @@ namespace BTCPayServer.Configuration
public class BTCPayServerOptions public class BTCPayServerOptions
{ {
public ChainType ChainType public NetworkType NetworkType
{ {
get; set; get; set;
} }
@@ -51,15 +51,15 @@ namespace BTCPayServer.Configuration
public void LoadArgs(IConfiguration conf) public void LoadArgs(IConfiguration conf)
{ {
ChainType = DefaultConfiguration.GetChainType(conf); NetworkType = DefaultConfiguration.GetNetworkType(conf);
var defaultSettings = BTCPayDefaultSettings.GetDefaultSettings(ChainType); var defaultSettings = BTCPayDefaultSettings.GetDefaultSettings(NetworkType);
DataDir = conf.GetOrDefault<string>("datadir", defaultSettings.DefaultDataDirectory); DataDir = conf.GetOrDefault<string>("datadir", defaultSettings.DefaultDataDirectory);
Logs.Configuration.LogInformation("Network: " + ChainType.ToString()); Logs.Configuration.LogInformation("Network: " + NetworkType.ToString());
var supportedChains = conf.GetOrDefault<string>("chains", "btc") var supportedChains = conf.GetOrDefault<string>("chains", "btc")
.Split(',', StringSplitOptions.RemoveEmptyEntries) .Split(',', StringSplitOptions.RemoveEmptyEntries)
.Select(t => t.ToUpperInvariant()); .Select(t => t.ToUpperInvariant());
NetworkProvider = new BTCPayNetworkProvider(ChainType).Filter(supportedChains.ToArray()); NetworkProvider = new BTCPayNetworkProvider(NetworkType).Filter(supportedChains.ToArray());
foreach (var chain in supportedChains) foreach (var chain in supportedChains)
{ {
if (NetworkProvider.GetNetwork(chain) == null) if (NetworkProvider.GetNetwork(chain) == null)

View File

@@ -18,7 +18,7 @@ namespace BTCPayServer.Configuration
{ {
protected override CommandLineApplication CreateCommandLineApplicationCore() protected override CommandLineApplication CreateCommandLineApplicationCore()
{ {
var provider = new BTCPayNetworkProvider(ChainType.Main); var provider = new BTCPayNetworkProvider(NetworkType.Mainnet);
var chains = string.Join(",", provider.GetAll().Select(n => n.CryptoCode.ToLowerInvariant()).ToArray()); var chains = string.Join(",", provider.GetAll().Select(n => n.CryptoCode.ToLowerInvariant()).ToArray());
CommandLineApplication app = new CommandLineApplication(true) CommandLineApplication app = new CommandLineApplication(true)
{ {
@@ -48,12 +48,12 @@ namespace BTCPayServer.Configuration
protected override string GetDefaultDataDir(IConfiguration conf) protected override string GetDefaultDataDir(IConfiguration conf)
{ {
return BTCPayDefaultSettings.GetDefaultSettings(GetChainType(conf)).DefaultDataDirectory; return BTCPayDefaultSettings.GetDefaultSettings(GetNetworkType(conf)).DefaultDataDirectory;
} }
protected override string GetDefaultConfigurationFile(IConfiguration conf) protected override string GetDefaultConfigurationFile(IConfiguration conf)
{ {
var network = BTCPayDefaultSettings.GetDefaultSettings(GetChainType(conf)); var network = BTCPayDefaultSettings.GetDefaultSettings(GetNetworkType(conf));
var dataDir = conf["datadir"]; var dataDir = conf["datadir"];
if (dataDir == null) if (dataDir == null)
return network.DefaultConfigurationFile; return network.DefaultConfigurationFile;
@@ -69,7 +69,7 @@ namespace BTCPayServer.Configuration
return Path.Combine(chainDir, fileName); return Path.Combine(chainDir, fileName);
} }
public static ChainType GetChainType(IConfiguration conf) public static NetworkType GetNetworkType(IConfiguration conf)
{ {
var network = conf.GetOrDefault<string>("network", null); var network = conf.GetOrDefault<string>("network", null);
if (network != null) if (network != null)
@@ -79,17 +79,18 @@ namespace BTCPayServer.Configuration
{ {
throw new ConfigException($"Invalid network parameter '{network}'"); throw new ConfigException($"Invalid network parameter '{network}'");
} }
return n.ToChainType(); return n.NetworkType;
} }
var net = conf.GetOrDefault<bool>("regtest", false) ? ChainType.Regtest : var net = conf.GetOrDefault<bool>("regtest", false) ? NetworkType.Regtest :
conf.GetOrDefault<bool>("testnet", false) ? ChainType.Test : ChainType.Main; conf.GetOrDefault<bool>("testnet", false) ? NetworkType.Testnet : NetworkType.Mainnet;
return net; return net;
} }
protected override string GetDefaultConfigurationFileTemplate(IConfiguration conf) protected override string GetDefaultConfigurationFileTemplate(IConfiguration conf)
{ {
var defaultSettings = BTCPayDefaultSettings.GetDefaultSettings(GetChainType(conf)); var networkType = GetNetworkType(conf);
var defaultSettings = BTCPayDefaultSettings.GetDefaultSettings(networkType);
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
builder.AppendLine("### Global settings ###"); builder.AppendLine("### Global settings ###");
builder.AppendLine("#network=mainnet"); builder.AppendLine("#network=mainnet");
@@ -102,7 +103,7 @@ namespace BTCPayServer.Configuration
builder.AppendLine("#postgres=User ID=root;Password=myPassword;Host=localhost;Port=5432;Database=myDataBase;"); builder.AppendLine("#postgres=User ID=root;Password=myPassword;Host=localhost;Port=5432;Database=myDataBase;");
builder.AppendLine(); builder.AppendLine();
builder.AppendLine("### NBXplorer settings ###"); builder.AppendLine("### NBXplorer settings ###");
foreach (var n in new BTCPayNetworkProvider(defaultSettings.ChainType).GetAll()) foreach (var n in new BTCPayNetworkProvider(networkType).GetAll())
{ {
builder.AppendLine($"#{n.CryptoCode}.explorer.url={n.NBXplorerNetwork.DefaultSettings.DefaultUrl}"); builder.AppendLine($"#{n.CryptoCode}.explorer.url={n.NBXplorerNetwork.DefaultSettings.DefaultUrl}");
builder.AppendLine($"#{n.CryptoCode}.explorer.cookiefile={ n.NBXplorerNetwork.DefaultSettings.DefaultCookieFile}"); builder.AppendLine($"#{n.CryptoCode}.explorer.cookiefile={ n.NBXplorerNetwork.DefaultSettings.DefaultCookieFile}");
@@ -116,7 +117,7 @@ namespace BTCPayServer.Configuration
protected override IPEndPoint GetDefaultEndpoint(IConfiguration conf) protected override IPEndPoint GetDefaultEndpoint(IConfiguration conf)
{ {
return new IPEndPoint(IPAddress.Parse("127.0.0.1"), BTCPayDefaultSettings.GetDefaultSettings(GetChainType(conf)).DefaultPort); return new IPEndPoint(IPAddress.Parse("127.0.0.1"), BTCPayDefaultSettings.GetDefaultSettings(GetNetworkType(conf)).DefaultPort);
} }
} }
} }

View File

@@ -403,7 +403,7 @@ namespace BTCPayServer.Controllers
private DerivationStrategy ParseDerivationStrategy(string derivationScheme, Script hint, BTCPayNetwork network) private DerivationStrategy ParseDerivationStrategy(string derivationScheme, Script hint, BTCPayNetwork network)
{ {
var parser = new DerivationSchemeParser(network.NBitcoinNetwork, network.DefaultSettings.ChainType); var parser = new DerivationSchemeParser(network.NBitcoinNetwork);
parser.HintScriptPubKey = hint; parser.HintScriptPubKey = hint;
return new DerivationStrategy(parser.Parse(derivationScheme), network); return new DerivationStrategy(parser.Parse(derivationScheme), network);
} }

View File

@@ -13,13 +13,11 @@ namespace BTCPayServer
public class DerivationSchemeParser public class DerivationSchemeParser
{ {
public Network Network { get; set; } public Network Network { get; set; }
public ChainType ChainType { get; set; }
public Script HintScriptPubKey { get; set; } public Script HintScriptPubKey { get; set; }
public DerivationSchemeParser(Network expectedNetwork, ChainType chainType) public DerivationSchemeParser(Network expectedNetwork)
{ {
Network = expectedNetwork; Network = expectedNetwork;
ChainType = chainType;
} }
public DerivationStrategyBase Parse(string str) public DerivationStrategyBase Parse(string str)
@@ -78,7 +76,7 @@ namespace BTCPayServer
if (data.Length < 4) if (data.Length < 4)
continue; continue;
var prefix = Utils.ToUInt32(data, false); var prefix = Utils.ToUInt32(data, false);
var standardPrefix = Utils.ToBytes(ChainType == NBXplorer.ChainType.Main ? 0x0488b21eU : 0x043587cf, false); var standardPrefix = Utils.ToBytes(Network.NetworkType == NetworkType.Mainnet ? 0x0488b21eU : 0x043587cf, false);
for (int ii = 0; ii < 4; ii++) for (int ii = 0; ii < 4; ii++)
data[ii] = standardPrefix[ii]; data[ii] = standardPrefix[ii];

View File

@@ -184,8 +184,8 @@ namespace BTCPayServer.HostedServices
if(status != null && error == null) if(status != null && error == null)
{ {
if(status.ChainType != _Network.NBXplorerNetwork.DefaultSettings.ChainType) if(status.NetworkType != _Network.NBitcoinNetwork.NetworkType)
error = $"{_Network.CryptoCode}: NBXplorer is on a different ChainType (actual: {status.ChainType}, expected: {_Network.NBXplorerNetwork.DefaultSettings.ChainType})"; error = $"{_Network.CryptoCode}: NBXplorer is on a different ChainType (actual: {status.NetworkType}, expected: {_Network.NBitcoinNetwork.NetworkType})";
} }
if (error != null) if (error != null)

View File

@@ -41,6 +41,7 @@ namespace BTCPayServer.HostedServices
async Task Timer(Func<Task> act, CancellationToken cancellation, [CallerMemberName]string caller = null) async Task Timer(Func<Task> act, CancellationToken cancellation, [CallerMemberName]string caller = null)
{ {
await new SynchronizationContextRemover();
while (!cancellation.IsCancellationRequested) while (!cancellation.IsCancellationRequested)
{ {
try try
@@ -65,6 +66,7 @@ namespace BTCPayServer.HostedServices
{ {
return Timer(async () => return Timer(async () =>
{ {
await new SynchronizationContextRemover();
var tickers = await new CoinAverageRateProvider("BTC").GetExchangeTickersAsync(); var tickers = await new CoinAverageRateProvider("BTC").GetExchangeTickersAsync();
_coinAverageSettings.AvailableExchanges = tickers _coinAverageSettings.AvailableExchanges = tickers
.Exchanges .Exchanges
@@ -79,6 +81,7 @@ namespace BTCPayServer.HostedServices
{ {
return Timer(async () => return Timer(async () =>
{ {
await new SynchronizationContextRemover();
var rates = (await _SettingsRepository.GetSettingAsync<RatesSetting>()) ?? new RatesSetting(); var rates = (await _SettingsRepository.GetSettingAsync<RatesSetting>()) ?? new RatesSetting();
_RateProviderFactory.CacheSpan = TimeSpan.FromMinutes(rates.CacheInMinutes); _RateProviderFactory.CacheSpan = TimeSpan.FromMinutes(rates.CacheInMinutes);
if (!string.IsNullOrWhiteSpace(rates.PrivateKey) && !string.IsNullOrWhiteSpace(rates.PublicKey)) if (!string.IsNullOrWhiteSpace(rates.PrivateKey) && !string.IsNullOrWhiteSpace(rates.PublicKey))

View File

@@ -161,7 +161,7 @@ namespace BTCPayServer.Hosting
services.TryAddSingleton<ExplorerClientProvider>(); services.TryAddSingleton<ExplorerClientProvider>();
services.TryAddSingleton<Bitpay>(o => services.TryAddSingleton<Bitpay>(o =>
{ {
if (o.GetRequiredService<BTCPayServerOptions>().ChainType == ChainType.Main) if (o.GetRequiredService<BTCPayServerOptions>().NetworkType == NetworkType.Mainnet)
return new Bitpay(new Key(), new Uri("https://bitpay.com/")); return new Bitpay(new Key(), new Uri("https://bitpay.com/"));
else else
return new Bitpay(new Key(), new Uri("https://test.bitpay.com/")); return new Bitpay(new Key(), new Uri("https://test.bitpay.com/"));

View File

@@ -6,6 +6,7 @@ using System.Reflection;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Text; using System.Text;
using NBXplorer; using NBXplorer;
using NBitcoin;
namespace BTCPayServer.Services namespace BTCPayServer.Services
{ {
@@ -20,13 +21,13 @@ namespace BTCPayServer.Services
Build = "Release"; Build = "Release";
#endif #endif
Environment = env; Environment = env;
ChainType = provider.NBXplorerNetworkProvider.ChainType; NetworkType = provider.NetworkType;
} }
public IHostingEnvironment Environment public IHostingEnvironment Environment
{ {
get; set; get; set;
} }
public ChainType ChainType { get; set; } public NetworkType NetworkType { get; set; }
public string Version public string Version
{ {
get; set; get; set;
@@ -40,7 +41,7 @@ namespace BTCPayServer.Services
{ {
get get
{ {
return ChainType == ChainType.Regtest && Environment.IsDevelopment(); return NetworkType == NetworkType.Regtest && Environment.IsDevelopment();
} }
} }
public override string ToString() public override string ToString()

View File

@@ -101,7 +101,7 @@ namespace BTCPayServer.Services
var pubKey = await ledger.GetWalletPubKeyAsync(account); var pubKey = await ledger.GetWalletPubKeyAsync(account);
if (pubKey.Address.Network != network.NBitcoinNetwork) if (pubKey.Address.Network != network.NBitcoinNetwork)
{ {
if (network.DefaultSettings.ChainType == NBXplorer.ChainType.Main) if (network.NBitcoinNetwork.NetworkType == NetworkType.Mainnet)
throw new Exception($"The opened ledger app should be for {network.NBitcoinNetwork.Name}, not for {pubKey.Address.Network}"); throw new Exception($"The opened ledger app should be for {network.NBitcoinNetwork.Name}, not for {pubKey.Address.Network}");
} }
var fingerprint = onlyChaincode ? new byte[4] : (await ledger.GetWalletPubKeyAsync(account.Parent)).UncompressedPublicKey.Compress().Hash.ToBytes().Take(4).ToArray(); var fingerprint = onlyChaincode ? new byte[4] : (await ledger.GetWalletPubKeyAsync(account.Parent)).UncompressedPublicKey.Compress().Hash.ToBytes().Take(4).ToArray();

View File

@@ -0,0 +1,37 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
namespace BTCPayServer
{
public struct SynchronizationContextRemover : INotifyCompletion
{
public bool IsCompleted => SynchronizationContext.Current == null;
public void OnCompleted(Action continuation)
{
var prev = SynchronizationContext.Current;
try
{
SynchronizationContext.SetSynchronizationContext(null);
continuation();
}
finally
{
SynchronizationContext.SetSynchronizationContext(prev);
}
}
public SynchronizationContextRemover GetAwaiter()
{
return this;
}
public void GetResult()
{
}
}
}