diff --git a/BTCPayServer.Tests/BTCPayServerTester.cs b/BTCPayServer.Tests/BTCPayServerTester.cs index ccd7aec85..980b57cf6 100644 --- a/BTCPayServer.Tests/BTCPayServerTester.cs +++ b/BTCPayServer.Tests/BTCPayServerTester.cs @@ -72,7 +72,7 @@ namespace BTCPayServer.Tests { if (!Directory.Exists(_Directory)) Directory.CreateDirectory(_Directory); - string chain = ChainType.Regtest.ToNetwork().Name; + string chain = NBXplorerDefaultSettings.GetFolderName(NetworkType.Regtest); string chainDirectory = Path.Combine(_Directory, chain); if (!Directory.Exists(chainDirectory)) Directory.CreateDirectory(chainDirectory); diff --git a/BTCPayServer.Tests/ServerTester.cs b/BTCPayServer.Tests/ServerTester.cs index 2e3c4f651..957501fe4 100644 --- a/BTCPayServer.Tests/ServerTester.cs +++ b/BTCPayServer.Tests/ServerTester.cs @@ -39,7 +39,7 @@ namespace BTCPayServer.Tests if (!Directory.Exists(_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); LTCExplorerNode = new RPCClient(RPCCredentialString.Parse(GetEnvironment("TESTS_LTCRPCCONNECTION", "server=http://127.0.0.1:43783;ceiwHEbqWI83:DwubwWsoo3")), NetworkProvider.GetNetwork("LTC").NBitcoinNetwork); diff --git a/BTCPayServer.Tests/UnitTest1.cs b/BTCPayServer.Tests/UnitTest1.cs index 6c1bfa5cf..78477346d 100644 --- a/BTCPayServer.Tests/UnitTest1.cs +++ b/BTCPayServer.Tests/UnitTest1.cs @@ -873,7 +873,7 @@ namespace BTCPayServer.Tests [Fact] public void CanParseDerivationScheme() { - var parser = new DerivationSchemeParser(Network.TestNet, NBXplorer.ChainType.Test); + var parser = new DerivationSchemeParser(Network.TestNet); NBXplorer.DerivationStrategy.DerivationStrategyBase result; // Passing electrum stuff // Native diff --git a/BTCPayServer.Tests/docker-compose.yml b/BTCPayServer.Tests/docker-compose.yml index 583d5a9b0..ec572053d 100644 --- a/BTCPayServer.Tests/docker-compose.yml +++ b/BTCPayServer.Tests/docker-compose.yml @@ -46,7 +46,7 @@ services: - lightning-charged nbxplorer: - image: nicolasdorier/nbxplorer:1.0.1.34 + image: nicolasdorier/nbxplorer:1.0.2.0 ports: - "32838:32838" expose: diff --git a/BTCPayServer/BTCPayNetwork.cs b/BTCPayServer/BTCPayNetwork.cs index 7a7cf1614..540a090c8 100644 --- a/BTCPayServer/BTCPayNetwork.cs +++ b/BTCPayServer/BTCPayNetwork.cs @@ -14,34 +14,28 @@ namespace BTCPayServer { static BTCPayDefaultSettings() { - _Settings = new Dictionary(); - foreach (var chainType in new[] { ChainType.Main, ChainType.Test, ChainType.Regtest }) + _Settings = new Dictionary(); + 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(); _Settings.Add(chainType, settings); - settings.ChainType = chainType; - settings.DefaultDataDirectory = StandardConfiguration.DefaultDataDirectory.GetDirectory("BTCPayServer", btcNetwork.Name); + settings.DefaultDataDirectory = StandardConfiguration.DefaultDataDirectory.GetDirectory("BTCPayServer", NBXplorerDefaultSettings.GetFolderName(chainType)); settings.DefaultConfigurationFile = Path.Combine(settings.DefaultDataDirectory, "settings.config"); - settings.DefaultPort = (chainType == ChainType.Main ? 23000 : - chainType == ChainType.Regtest ? 23002 : - chainType == ChainType.Test ? 23001 : throw new NotSupportedException(chainType.ToString())); + settings.DefaultPort = (chainType == NetworkType.Mainnet ? 23000 : + chainType == NetworkType.Regtest ? 23002 : + chainType == NetworkType.Testnet ? 23001 : throw new NotSupportedException(chainType.ToString())); } } - static Dictionary _Settings; + static Dictionary _Settings; - public static BTCPayDefaultSettings GetDefaultSettings(ChainType chainType) + public static BTCPayDefaultSettings GetDefaultSettings(NetworkType chainType) { return _Settings[chainType]; } public string DefaultDataDirectory { get; set; } public string DefaultConfigurationFile { get; set; } - public ChainType ChainType { get; internal set; } public int DefaultPort { get; set; } } public class BTCPayNetwork diff --git a/BTCPayServer/BTCPayNetworkProvider.Bitcoin.cs b/BTCPayServer/BTCPayNetworkProvider.Bitcoin.cs index 17fb163c0..ca803f0a4 100644 --- a/BTCPayServer/BTCPayNetworkProvider.Bitcoin.cs +++ b/BTCPayServer/BTCPayNetworkProvider.Bitcoin.cs @@ -20,15 +20,15 @@ namespace BTCPayServer Add(new BTCPayNetwork() { 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, NBXplorerNetwork = nbxplorerNetwork, UriScheme = "bitcoin", DefaultRateProvider = btcRate, CryptoImagePath = "imlegacy/bitcoin-symbol.svg", LightningImagePath = "imlegacy/btc-lightning.svg", - DefaultSettings = BTCPayDefaultSettings.GetDefaultSettings(NBXplorerNetworkProvider.ChainType), - CoinType = NBXplorerNetworkProvider.ChainType == ChainType.Main ? new KeyPath("0'") : new KeyPath("1'") + DefaultSettings = BTCPayDefaultSettings.GetDefaultSettings(NetworkType), + CoinType = NetworkType == NetworkType.Mainnet ? new KeyPath("0'") : new KeyPath("1'") }); } } diff --git a/BTCPayServer/BTCPayNetworkProvider.Dogecoin.cs b/BTCPayServer/BTCPayNetworkProvider.Dogecoin.cs index 8a388d8fa..18091ad91 100644 --- a/BTCPayServer/BTCPayNetworkProvider.Dogecoin.cs +++ b/BTCPayServer/BTCPayNetworkProvider.Dogecoin.cs @@ -12,20 +12,18 @@ namespace BTCPayServer { public void InitDogecoin() { - NBitcoin.Altcoins.Dogecoin.EnsureRegistered(); - var nbxplorerNetwork = NBXplorerNetworkProvider.GetFromCryptoCode("DOGE"); Add(new BTCPayNetwork() { 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, NBXplorerNetwork = nbxplorerNetwork, UriScheme = "dogecoin", DefaultRateProvider = new CoinAverageRateProviderDescription("DOGE"), CryptoImagePath = "imlegacy/dogecoin.png", - DefaultSettings = BTCPayDefaultSettings.GetDefaultSettings(NBXplorerNetworkProvider.ChainType), - CoinType = NBXplorerNetworkProvider.ChainType == ChainType.Main ? new KeyPath("3'") : new KeyPath("1'") + DefaultSettings = BTCPayDefaultSettings.GetDefaultSettings(NetworkType), + CoinType = NetworkType == NetworkType.Mainnet ? new KeyPath("3'") : new KeyPath("1'") }); } } diff --git a/BTCPayServer/BTCPayNetworkProvider.Litecoin.cs b/BTCPayServer/BTCPayNetworkProvider.Litecoin.cs index b95fff3c6..98550f9e0 100644 --- a/BTCPayServer/BTCPayNetworkProvider.Litecoin.cs +++ b/BTCPayServer/BTCPayNetworkProvider.Litecoin.cs @@ -12,21 +12,19 @@ namespace BTCPayServer { public void InitLitecoin() { - NBitcoin.Altcoins.Litecoin.EnsureRegistered(); - var nbxplorerNetwork = NBXplorerNetworkProvider.GetFromCryptoCode("LTC"); Add(new BTCPayNetwork() { 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, NBXplorerNetwork = nbxplorerNetwork, UriScheme = "litecoin", DefaultRateProvider = new CoinAverageRateProviderDescription("LTC"), CryptoImagePath = "imlegacy/litecoin-symbol.svg", LightningImagePath = "imlegacy/ltc-lightning.svg", - DefaultSettings = BTCPayDefaultSettings.GetDefaultSettings(NBXplorerNetworkProvider.ChainType), - CoinType = NBXplorerNetworkProvider.ChainType == ChainType.Main ? new KeyPath("2'") : new KeyPath("1'") + DefaultSettings = BTCPayDefaultSettings.GetDefaultSettings(NetworkType), + CoinType = NetworkType == NetworkType.Mainnet ? new KeyPath("2'") : new KeyPath("1'") }); } } diff --git a/BTCPayServer/BTCPayNetworkProvider.cs b/BTCPayServer/BTCPayNetworkProvider.cs index faef1e19f..1717adce2 100644 --- a/BTCPayServer/BTCPayNetworkProvider.cs +++ b/BTCPayServer/BTCPayNetworkProvider.cs @@ -27,8 +27,8 @@ namespace BTCPayServer BTCPayNetworkProvider(BTCPayNetworkProvider filtered, string[] cryptoCodes) { - ChainType = filtered.ChainType; - _NBXplorerNetworkProvider = new NBXplorerNetworkProvider(filtered.ChainType); + NetworkType = filtered.NetworkType; + _NBXplorerNetworkProvider = new NBXplorerNetworkProvider(filtered.NetworkType); _Networks = new Dictionary(); cryptoCodes = cryptoCodes.Select(c => c.ToUpperInvariant()).ToArray(); foreach (var network in filtered._Networks) @@ -40,11 +40,11 @@ namespace BTCPayServer } } - public ChainType ChainType { get; set; } - public BTCPayNetworkProvider(ChainType chainType) + public NetworkType NetworkType { get; private set; } + public BTCPayNetworkProvider(NetworkType networkType) { - _NBXplorerNetworkProvider = new NBXplorerNetworkProvider(chainType); - ChainType = chainType; + _NBXplorerNetworkProvider = new NBXplorerNetworkProvider(networkType); + NetworkType = networkType; InitBitcoin(); InitLitecoin(); InitDogecoin(); diff --git a/BTCPayServer/BTCPayServer.csproj b/BTCPayServer/BTCPayServer.csproj index bacd4accc..e349d51a6 100644 --- a/BTCPayServer/BTCPayServer.csproj +++ b/BTCPayServer/BTCPayServer.csproj @@ -39,10 +39,10 @@ - + - + diff --git a/BTCPayServer/Configuration/BTCPayServerOptions.cs b/BTCPayServer/Configuration/BTCPayServerOptions.cs index 804e77fa5..2ed2e665d 100644 --- a/BTCPayServer/Configuration/BTCPayServerOptions.cs +++ b/BTCPayServer/Configuration/BTCPayServerOptions.cs @@ -23,7 +23,7 @@ namespace BTCPayServer.Configuration public class BTCPayServerOptions { - public ChainType ChainType + public NetworkType NetworkType { get; set; } @@ -51,15 +51,15 @@ namespace BTCPayServer.Configuration public void LoadArgs(IConfiguration conf) { - ChainType = DefaultConfiguration.GetChainType(conf); - var defaultSettings = BTCPayDefaultSettings.GetDefaultSettings(ChainType); + NetworkType = DefaultConfiguration.GetNetworkType(conf); + var defaultSettings = BTCPayDefaultSettings.GetDefaultSettings(NetworkType); DataDir = conf.GetOrDefault("datadir", defaultSettings.DefaultDataDirectory); - Logs.Configuration.LogInformation("Network: " + ChainType.ToString()); + Logs.Configuration.LogInformation("Network: " + NetworkType.ToString()); var supportedChains = conf.GetOrDefault("chains", "btc") .Split(',', StringSplitOptions.RemoveEmptyEntries) .Select(t => t.ToUpperInvariant()); - NetworkProvider = new BTCPayNetworkProvider(ChainType).Filter(supportedChains.ToArray()); + NetworkProvider = new BTCPayNetworkProvider(NetworkType).Filter(supportedChains.ToArray()); foreach (var chain in supportedChains) { if (NetworkProvider.GetNetwork(chain) == null) diff --git a/BTCPayServer/Configuration/DefaultConfiguration.cs b/BTCPayServer/Configuration/DefaultConfiguration.cs index a25fb5bbd..d4bb141a3 100644 --- a/BTCPayServer/Configuration/DefaultConfiguration.cs +++ b/BTCPayServer/Configuration/DefaultConfiguration.cs @@ -18,7 +18,7 @@ namespace BTCPayServer.Configuration { 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()); CommandLineApplication app = new CommandLineApplication(true) { @@ -48,12 +48,12 @@ namespace BTCPayServer.Configuration protected override string GetDefaultDataDir(IConfiguration conf) { - return BTCPayDefaultSettings.GetDefaultSettings(GetChainType(conf)).DefaultDataDirectory; + return BTCPayDefaultSettings.GetDefaultSettings(GetNetworkType(conf)).DefaultDataDirectory; } protected override string GetDefaultConfigurationFile(IConfiguration conf) { - var network = BTCPayDefaultSettings.GetDefaultSettings(GetChainType(conf)); + var network = BTCPayDefaultSettings.GetDefaultSettings(GetNetworkType(conf)); var dataDir = conf["datadir"]; if (dataDir == null) return network.DefaultConfigurationFile; @@ -69,7 +69,7 @@ namespace BTCPayServer.Configuration return Path.Combine(chainDir, fileName); } - public static ChainType GetChainType(IConfiguration conf) + public static NetworkType GetNetworkType(IConfiguration conf) { var network = conf.GetOrDefault("network", null); if (network != null) @@ -79,17 +79,18 @@ namespace BTCPayServer.Configuration { throw new ConfigException($"Invalid network parameter '{network}'"); } - return n.ToChainType(); + return n.NetworkType; } - var net = conf.GetOrDefault("regtest", false) ? ChainType.Regtest : - conf.GetOrDefault("testnet", false) ? ChainType.Test : ChainType.Main; + var net = conf.GetOrDefault("regtest", false) ? NetworkType.Regtest : + conf.GetOrDefault("testnet", false) ? NetworkType.Testnet : NetworkType.Mainnet; return net; } 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(); builder.AppendLine("### Global settings ###"); 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(); 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.cookiefile={ n.NBXplorerNetwork.DefaultSettings.DefaultCookieFile}"); @@ -116,7 +117,7 @@ namespace BTCPayServer.Configuration 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); } } } diff --git a/BTCPayServer/Controllers/StoresController.cs b/BTCPayServer/Controllers/StoresController.cs index d7c93dccd..936172127 100644 --- a/BTCPayServer/Controllers/StoresController.cs +++ b/BTCPayServer/Controllers/StoresController.cs @@ -403,7 +403,7 @@ namespace BTCPayServer.Controllers 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; return new DerivationStrategy(parser.Parse(derivationScheme), network); } diff --git a/BTCPayServer/DerivationSchemeParser.cs b/BTCPayServer/DerivationSchemeParser.cs index 92736159c..30f188423 100644 --- a/BTCPayServer/DerivationSchemeParser.cs +++ b/BTCPayServer/DerivationSchemeParser.cs @@ -13,13 +13,11 @@ namespace BTCPayServer public class DerivationSchemeParser { public Network Network { get; set; } - public ChainType ChainType { get; set; } public Script HintScriptPubKey { get; set; } - public DerivationSchemeParser(Network expectedNetwork, ChainType chainType) + public DerivationSchemeParser(Network expectedNetwork) { Network = expectedNetwork; - ChainType = chainType; } public DerivationStrategyBase Parse(string str) @@ -78,7 +76,7 @@ namespace BTCPayServer if (data.Length < 4) continue; 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++) data[ii] = standardPrefix[ii]; diff --git a/BTCPayServer/HostedServices/NBXplorerWaiter.cs b/BTCPayServer/HostedServices/NBXplorerWaiter.cs index f66b544d6..3ac9b52ce 100644 --- a/BTCPayServer/HostedServices/NBXplorerWaiter.cs +++ b/BTCPayServer/HostedServices/NBXplorerWaiter.cs @@ -184,8 +184,8 @@ namespace BTCPayServer.HostedServices if(status != null && error == null) { - if(status.ChainType != _Network.NBXplorerNetwork.DefaultSettings.ChainType) - error = $"{_Network.CryptoCode}: NBXplorer is on a different ChainType (actual: {status.ChainType}, expected: {_Network.NBXplorerNetwork.DefaultSettings.ChainType})"; + if(status.NetworkType != _Network.NBitcoinNetwork.NetworkType) + error = $"{_Network.CryptoCode}: NBXplorer is on a different ChainType (actual: {status.NetworkType}, expected: {_Network.NBitcoinNetwork.NetworkType})"; } if (error != null) diff --git a/BTCPayServer/HostedServices/RatesHostedService.cs b/BTCPayServer/HostedServices/RatesHostedService.cs index 5f98d24b2..5bd1c1f0b 100644 --- a/BTCPayServer/HostedServices/RatesHostedService.cs +++ b/BTCPayServer/HostedServices/RatesHostedService.cs @@ -41,6 +41,7 @@ namespace BTCPayServer.HostedServices async Task Timer(Func act, CancellationToken cancellation, [CallerMemberName]string caller = null) { + await new SynchronizationContextRemover(); while (!cancellation.IsCancellationRequested) { try @@ -65,6 +66,7 @@ namespace BTCPayServer.HostedServices { return Timer(async () => { + await new SynchronizationContextRemover(); var tickers = await new CoinAverageRateProvider("BTC").GetExchangeTickersAsync(); _coinAverageSettings.AvailableExchanges = tickers .Exchanges @@ -79,6 +81,7 @@ namespace BTCPayServer.HostedServices { return Timer(async () => { + await new SynchronizationContextRemover(); var rates = (await _SettingsRepository.GetSettingAsync()) ?? new RatesSetting(); _RateProviderFactory.CacheSpan = TimeSpan.FromMinutes(rates.CacheInMinutes); if (!string.IsNullOrWhiteSpace(rates.PrivateKey) && !string.IsNullOrWhiteSpace(rates.PublicKey)) diff --git a/BTCPayServer/Hosting/BTCPayServerServices.cs b/BTCPayServer/Hosting/BTCPayServerServices.cs index 76dc65f92..254b6338c 100644 --- a/BTCPayServer/Hosting/BTCPayServerServices.cs +++ b/BTCPayServer/Hosting/BTCPayServerServices.cs @@ -161,7 +161,7 @@ namespace BTCPayServer.Hosting services.TryAddSingleton(); services.TryAddSingleton(o => { - if (o.GetRequiredService().ChainType == ChainType.Main) + if (o.GetRequiredService().NetworkType == NetworkType.Mainnet) return new Bitpay(new Key(), new Uri("https://bitpay.com/")); else return new Bitpay(new Key(), new Uri("https://test.bitpay.com/")); diff --git a/BTCPayServer/Services/BTCPayServerEnvironment.cs b/BTCPayServer/Services/BTCPayServerEnvironment.cs index fd8fc5bca..a8e5d1105 100644 --- a/BTCPayServer/Services/BTCPayServerEnvironment.cs +++ b/BTCPayServer/Services/BTCPayServerEnvironment.cs @@ -6,6 +6,7 @@ using System.Reflection; using System.Threading.Tasks; using System.Text; using NBXplorer; +using NBitcoin; namespace BTCPayServer.Services { @@ -20,13 +21,13 @@ namespace BTCPayServer.Services Build = "Release"; #endif Environment = env; - ChainType = provider.NBXplorerNetworkProvider.ChainType; + NetworkType = provider.NetworkType; } public IHostingEnvironment Environment { get; set; } - public ChainType ChainType { get; set; } + public NetworkType NetworkType { get; set; } public string Version { get; set; @@ -40,7 +41,7 @@ namespace BTCPayServer.Services { get { - return ChainType == ChainType.Regtest && Environment.IsDevelopment(); + return NetworkType == NetworkType.Regtest && Environment.IsDevelopment(); } } public override string ToString() diff --git a/BTCPayServer/Services/HardwareWalletService.cs b/BTCPayServer/Services/HardwareWalletService.cs index 3a138e918..28ae5a182 100644 --- a/BTCPayServer/Services/HardwareWalletService.cs +++ b/BTCPayServer/Services/HardwareWalletService.cs @@ -101,7 +101,7 @@ namespace BTCPayServer.Services var pubKey = await ledger.GetWalletPubKeyAsync(account); 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}"); } var fingerprint = onlyChaincode ? new byte[4] : (await ledger.GetWalletPubKeyAsync(account.Parent)).UncompressedPublicKey.Compress().Hash.ToBytes().Take(4).ToArray(); diff --git a/BTCPayServer/SynchronizationContextRemover.cs b/BTCPayServer/SynchronizationContextRemover.cs new file mode 100644 index 000000000..edd06e3ff --- /dev/null +++ b/BTCPayServer/SynchronizationContextRemover.cs @@ -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() + { + } + } +}