mirror of
https://github.com/aljazceru/btcpayserver.git
synced 2025-12-18 14:34:23 +01:00
Update NBXplorer
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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'")
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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'")
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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'")
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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" />
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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];
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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))
|
||||||
|
|||||||
@@ -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/"));
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
37
BTCPayServer/SynchronizationContextRemover.cs
Normal file
37
BTCPayServer/SynchronizationContextRemover.cs
Normal 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()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user