public ExplorerConfiguration LoadArgs(IConfiguration config) { NetworkProvider = new NBXplorerNetworkProvider(DefaultConfiguration.GetChainType(config)); var defaultSettings = NBXplorerDefaultSettings.GetDefaultSettings(NetworkProvider.ChainType); Logs.Configuration.LogInformation("Network: " + NetworkProvider.ChainType.ToString()); var supportedChains = config.GetOrDefault <string>("chains", "btc") .Split(',', StringSplitOptions.RemoveEmptyEntries) .Select(t => t.ToUpperInvariant()); var validChains = new List <string>(); foreach (var network in NetworkProvider.GetAll()) { if (supportedChains.Contains(network.CryptoCode)) { validChains.Add(network.CryptoCode); var chainConfiguration = new ChainConfiguration(); chainConfiguration.Rescan = config.GetOrDefault <bool>($"{network.CryptoCode}.rescan", false); chainConfiguration.CryptoCode = network.CryptoCode; var args = RPCArgs.Parse(config, network.NBitcoinNetwork, network.CryptoCode); chainConfiguration.RPC = args.ConfigureRPCClient(network); chainConfiguration.NodeEndpoint = DefaultConfiguration.ConvertToEndpoint(config.GetOrDefault <string>($"{network.CryptoCode}.node.endpoint", "127.0.0.1"), network.NBitcoinNetwork.DefaultPort); chainConfiguration.StartHeight = config.GetOrDefault <int>($"{network.CryptoCode}.startheight", -1); ChainConfigurations.Add(chainConfiguration); } } var invalidChains = String.Join(',', supportedChains.Where(s => !validChains.Contains(s)).ToArray()); if (!string.IsNullOrEmpty(invalidChains)) { throw new ConfigException($"Invalid chains {invalidChains}"); } Logs.Configuration.LogInformation("Supported chains: " + String.Join(',', supportedChains.ToArray())); BaseDataDir = config.GetOrDefault <string>("datadir", Path.GetDirectoryName(defaultSettings.DefaultDataDirectory)); MinGapSize = config.GetOrDefault <int>("mingapsize", 20); MaxGapSize = config.GetOrDefault <int>("maxgapsize", 30); if (MinGapSize >= MaxGapSize) { throw new ConfigException("mingapsize should be equal or lower than maxgapsize"); } if (!Directory.Exists(BaseDataDir)) { Directory.CreateDirectory(BaseDataDir); } DataDir = Path.Combine(BaseDataDir, NetworkProvider.ChainType.ToNetwork().Name); if (!Directory.Exists(DataDir)) { Directory.CreateDirectory(DataDir); } CacheChain = config.GetOrDefault <bool>("cachechain", true); NoAuthentication = config.GetOrDefault <bool>("noauth", false); return(this); }
static NRustLightningDefaultSettings() { _Settings = new Dictionary <NetworkType, NRustLightningDefaultSettings>(); foreach (var nType in new [] { NetworkType.Mainnet, NetworkType.Testnet, NetworkType.Regtest }) { var settings = new NRustLightningDefaultSettings(); _Settings.Add(nType, settings); settings.DefaultDataDir = StandardConfiguration.DefaultDataDirectory.GetDirectory("NRustLightning", GetFolderName(nType), false); settings.DefaultConfigurationFile = Path.Combine(settings.DefaultDataDir, "nrustlightning.conf"); settings.DefaultCookieFile = Path.Combine(settings.DefaultDataDir, ".cookie"); settings.NBXplorerSettings = NBXplorerDefaultSettings.GetDefaultSettings(nType); settings.DefaultPort = Constants.DefaultP2PPort; settings.RustLightningConfig = UserConfig.GetDefault(); } }
public async Task StartAsync() { if (!Directory.Exists(_Directory)) { Directory.CreateDirectory(_Directory); } string chain = NBXplorerDefaultSettings.GetFolderName(NetworkType.Regtest); string chainDirectory = Path.Combine(_Directory, chain); if (!Directory.Exists(chainDirectory)) { Directory.CreateDirectory(chainDirectory); } StringBuilder config = new StringBuilder(); config.AppendLine($"{chain.ToLowerInvariant()}=1"); if (InContainer) { config.AppendLine($"bind=0.0.0.0"); } config.AppendLine($"port={Port}"); config.AppendLine($"chains={string.Join(',', Chains)}"); if (Chains.Contains("BTC", StringComparer.OrdinalIgnoreCase)) { config.AppendLine($"btc.explorer.url={NBXplorerUri.AbsoluteUri}"); config.AppendLine($"btc.explorer.cookiefile=0"); } if (UseLightning) { config.AppendLine($"btc.lightning={IntegratedLightning.AbsoluteUri}"); var localLndBackupFile = Path.Combine(_Directory, "walletunlock.json"); File.Copy(TestUtils.GetTestDataFullPath("LndSeedBackup/walletunlock.json"), localLndBackupFile, true); config.AppendLine($"btc.external.lndseedbackup={localLndBackupFile}"); } if (Chains.Contains("LTC", StringComparer.OrdinalIgnoreCase)) { config.AppendLine($"ltc.explorer.url={LTCNBXplorerUri.AbsoluteUri}"); config.AppendLine($"ltc.explorer.cookiefile=0"); } if (Chains.Contains("LBTC", StringComparer.OrdinalIgnoreCase)) { config.AppendLine($"lbtc.explorer.url={LBTCNBXplorerUri.AbsoluteUri}"); config.AppendLine($"lbtc.explorer.cookiefile=0"); } if (AllowAdminRegistration) { config.AppendLine("allow-admin-registration=1"); } config.AppendLine($"torrcfile={TestUtils.GetTestDataFullPath("Tor/torrc")}"); config.AppendLine($"socksendpoint={SocksEndpoint}"); config.AppendLine($"debuglog=debug.log"); if (!string.IsNullOrEmpty(SSHPassword) && string.IsNullOrEmpty(SSHKeyFile)) { config.AppendLine($"sshpassword={SSHPassword}"); } if (!string.IsNullOrEmpty(SSHKeyFile)) { config.AppendLine($"sshkeyfile={SSHKeyFile}"); } if (!string.IsNullOrEmpty(SSHConnection)) { config.AppendLine($"sshconnection={SSHConnection}"); } if (TestDatabase == TestDatabases.MySQL && !String.IsNullOrEmpty(MySQL)) { config.AppendLine($"mysql=" + MySQL); } else if (!String.IsNullOrEmpty(Postgres)) { config.AppendLine($"postgres=" + Postgres); } var confPath = Path.Combine(chainDirectory, "settings.config"); await File.WriteAllTextAsync(confPath, config.ToString()); ServerUri = new Uri("http://" + HostName + ":" + Port + "/"); HttpClient = new HttpClient(); HttpClient.BaseAddress = ServerUri; Environment.SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "Development"); var conf = new DefaultConfiguration() { Logger = Logs.LogProvider.CreateLogger("Console") }.CreateConfiguration(new[] { "--datadir", _Directory, "--conf", confPath, "--disable-registration", DisableRegistration ? "true" : "false" }); _Host = new WebHostBuilder() .UseConfiguration(conf) .UseContentRoot(FindBTCPayServerDirectory()) .UseWebRoot(Path.Combine(FindBTCPayServerDirectory(), "wwwroot")) .ConfigureServices(s => { s.AddLogging(l => { l.AddFilter("System.Net.Http.HttpClient", LogLevel.Critical); l.SetMinimumLevel(LogLevel.Information) .AddFilter("Microsoft", LogLevel.Error) .AddFilter("Hangfire", LogLevel.Error) .AddProvider(Logs.LogProvider); }); }) .ConfigureServices(services => { services.TryAddSingleton <IFeeProviderFactory>(new BTCPayServer.Services.Fees.FixedFeeProvider(new FeeRate(100L, 1))); }) .UseKestrel() .UseStartup <Startup>() .Build(); await _Host.StartWithTasksAsync(); var urls = _Host.ServerFeatures.Get <IServerAddressesFeature>().Addresses; foreach (var url in urls) { Logs.Tester.LogInformation("Listening on " + url); } Logs.Tester.LogInformation("Server URI " + ServerUri); InvoiceRepository = (InvoiceRepository)_Host.Services.GetService(typeof(InvoiceRepository)); StoreRepository = (StoreRepository)_Host.Services.GetService(typeof(StoreRepository)); Networks = (BTCPayNetworkProvider)_Host.Services.GetService(typeof(BTCPayNetworkProvider)); if (MockRates) { var rateProvider = (RateProviderFactory)_Host.Services.GetService(typeof(RateProviderFactory)); rateProvider.Providers.Clear(); coinAverageMock = new MockRateProvider(); coinAverageMock.ExchangeRates.Add(new PairRate(CurrencyPair.Parse("BTC_USD"), new BidAsk(5000m))); coinAverageMock.ExchangeRates.Add(new PairRate(CurrencyPair.Parse("BTC_CAD"), new BidAsk(4500m))); coinAverageMock.ExchangeRates.Add(new PairRate(CurrencyPair.Parse("BTC_LTC"), new BidAsk(162m))); coinAverageMock.ExchangeRates.Add(new PairRate(CurrencyPair.Parse("LTC_USD"), new BidAsk(500m))); rateProvider.Providers.Add("coingecko", coinAverageMock); var bitflyerMock = new MockRateProvider(); bitflyerMock.ExchangeRates.Add(new PairRate(CurrencyPair.Parse("BTC_JPY"), new BidAsk(700000m))); rateProvider.Providers.Add("bitflyer", bitflyerMock); var quadrigacx = new MockRateProvider(); quadrigacx.ExchangeRates.Add(new PairRate(CurrencyPair.Parse("BTC_CAD"), new BidAsk(6000m))); rateProvider.Providers.Add("quadrigacx", quadrigacx); var bittrex = new MockRateProvider(); bittrex.ExchangeRates.Add(new PairRate(CurrencyPair.Parse("DOGE_BTC"), new BidAsk(0.004m))); rateProvider.Providers.Add("bittrex", bittrex); var bitfinex = new MockRateProvider(); bitfinex.ExchangeRates.Add(new PairRate(CurrencyPair.Parse("UST_BTC"), new BidAsk(0.000136m))); rateProvider.Providers.Add("bitfinex", bitfinex); var bitpay = new MockRateProvider(); bitpay.ExchangeRates.Add(new PairRate(CurrencyPair.Parse("ETB_BTC"), new BidAsk(0.1m))); rateProvider.Providers.Add("bitpay", bitpay); } Logs.Tester.LogInformation("Waiting site is operational..."); await WaitSiteIsOperational(); Logs.Tester.LogInformation("Site is now operational"); }
public void Start() { if (!Directory.Exists(_Directory)) { Directory.CreateDirectory(_Directory); } string chain = NBXplorerDefaultSettings.GetFolderName(NetworkType.Regtest); string chainDirectory = Path.Combine(_Directory, chain); if (!Directory.Exists(chainDirectory)) { Directory.CreateDirectory(chainDirectory); } StringBuilder config = new StringBuilder(); config.AppendLine($"{chain.ToLowerInvariant()}=1"); config.AppendLine($"port={Port}"); config.AppendLine($"chains=btc,ltc"); config.AppendLine($"btc.explorer.url={NBXplorerUri.AbsoluteUri}"); config.AppendLine($"btc.explorer.cookiefile=0"); config.AppendLine("allow-admin-registration=1"); config.AppendLine($"ltc.explorer.url={LTCNBXplorerUri.AbsoluteUri}"); config.AppendLine($"ltc.explorer.cookiefile=0"); config.AppendLine($"btc.lightning={IntegratedLightning.AbsoluteUri}"); if (TestDatabase == TestDatabases.MySQL && !String.IsNullOrEmpty(MySQL)) { config.AppendLine($"mysql=" + MySQL); } else if (!String.IsNullOrEmpty(Postgres)) { config.AppendLine($"postgres=" + Postgres); } var confPath = Path.Combine(chainDirectory, "settings.config"); File.WriteAllText(confPath, config.ToString()); ServerUri = new Uri("http://" + HostName + ":" + Port + "/"); HttpClient = new HttpClient(); HttpClient.BaseAddress = ServerUri; Environment.SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "Development"); var conf = new DefaultConfiguration() { Logger = Logs.LogProvider.CreateLogger("Console") }.CreateConfiguration(new[] { "--datadir", _Directory, "--conf", confPath, "--disable-registration", "false" }); _Host = new WebHostBuilder() .UseConfiguration(conf) .UseContentRoot(FindBTCPayServerDirectory()) .ConfigureServices(s => { s.AddLogging(l => { l.AddFilter("System.Net.Http.HttpClient", LogLevel.Critical); l.SetMinimumLevel(LogLevel.Information) .AddFilter("Microsoft", LogLevel.Error) .AddFilter("Hangfire", LogLevel.Error) .AddProvider(Logs.LogProvider); }); }) .UseKestrel() .UseStartup <Startup>() .Build(); _Host.Start(); InvoiceRepository = (InvoiceRepository)_Host.Services.GetService(typeof(InvoiceRepository)); StoreRepository = (StoreRepository)_Host.Services.GetService(typeof(StoreRepository)); Networks = (BTCPayNetworkProvider)_Host.Services.GetService(typeof(BTCPayNetworkProvider)); var dashBoard = (NBXplorerDashboard)_Host.Services.GetService(typeof(NBXplorerDashboard)); while (!dashBoard.IsFullySynched()) { Thread.Sleep(10); } if (MockRates) { var rateProvider = (RateProviderFactory)_Host.Services.GetService(typeof(RateProviderFactory)); rateProvider.Providers.Clear(); var coinAverageMock = new MockRateProvider(); coinAverageMock.ExchangeRates.Add(new Rating.ExchangeRate() { Exchange = "coinaverage", CurrencyPair = CurrencyPair.Parse("BTC_USD"), BidAsk = new BidAsk(5000m) }); coinAverageMock.ExchangeRates.Add(new Rating.ExchangeRate() { Exchange = "coinaverage", CurrencyPair = CurrencyPair.Parse("BTC_CAD"), BidAsk = new BidAsk(4500m) }); coinAverageMock.ExchangeRates.Add(new Rating.ExchangeRate() { Exchange = "coinaverage", CurrencyPair = CurrencyPair.Parse("LTC_BTC"), BidAsk = new BidAsk(0.001m) }); coinAverageMock.ExchangeRates.Add(new Rating.ExchangeRate() { Exchange = "coinaverage", CurrencyPair = CurrencyPair.Parse("LTC_USD"), BidAsk = new BidAsk(500m) }); rateProvider.Providers.Add("coinaverage", coinAverageMock); var bitflyerMock = new MockRateProvider(); bitflyerMock.ExchangeRates.Add(new Rating.ExchangeRate() { Exchange = "bitflyer", CurrencyPair = CurrencyPair.Parse("BTC_JPY"), BidAsk = new BidAsk(700000m) }); rateProvider.Providers.Add("bitflyer", bitflyerMock); var quadrigacx = new MockRateProvider(); quadrigacx.ExchangeRates.Add(new Rating.ExchangeRate() { Exchange = "quadrigacx", CurrencyPair = CurrencyPair.Parse("BTC_CAD"), BidAsk = new BidAsk(6000m) }); rateProvider.Providers.Add("quadrigacx", quadrigacx); var bittrex = new MockRateProvider(); bittrex.ExchangeRates.Add(new Rating.ExchangeRate() { Exchange = "bittrex", CurrencyPair = CurrencyPair.Parse("DOGE_BTC"), BidAsk = new BidAsk(0.004m) }); rateProvider.Providers.Add("bittrex", bittrex); } }
public static BTCPayDefaultSettings GetDefaultSettings(ChainName chainType) { if (_Settings.TryGetValue(chainType, out var v)) { return(v); } lock (_Settings) { if (_Settings.TryGetValue(chainType, out v)) { return(v); } var settings = new BTCPayDefaultSettings(); _Settings.Add(chainType, settings); settings.DefaultDataDirectory = StandardConfiguration.DefaultDataDirectory.GetDirectory("BTCPayServer", NBXplorerDefaultSettings.GetFolderName(chainType)); settings.DefaultPluginDirectory = StandardConfiguration.DefaultDataDirectory.GetDirectory("BTCPayServer", "Plugins"); settings.DefaultConfigurationFile = Path.Combine(settings.DefaultDataDirectory, "settings.config"); settings.DefaultPort = (chainType == ChainName.Mainnet ? 23000 : chainType == ChainName.Regtest ? 23002 : 23001); } return(_Settings[chainType]); }
static BTCPayDefaultSettings() { _Settings = new Dictionary <NetworkType, BTCPayDefaultSettings>(); foreach (var chainType in new[] { NetworkType.Mainnet, NetworkType.Testnet, NetworkType.Regtest }) { var settings = new BTCPayDefaultSettings(); _Settings.Add(chainType, settings); settings.DefaultDataDirectory = StandardConfiguration.DefaultDataDirectory.GetDirectory("BTCPayServer", NBXplorerDefaultSettings.GetFolderName(chainType)); settings.DefaultConfigurationFile = Path.Combine(settings.DefaultDataDirectory, "settings.config"); settings.DefaultPort = (chainType == NetworkType.Mainnet ? 23000 : chainType == NetworkType.Regtest ? 23002 : chainType == NetworkType.Testnet ? 23001 : throw new NotSupportedException(chainType.ToString())); } }
public ExplorerConfiguration LoadArgs(IConfiguration config) { NetworkProvider = new NBXplorerNetworkProvider(DefaultConfiguration.GetNetworkType(config)); var defaultSettings = NBXplorerDefaultSettings.GetDefaultSettings(NetworkProvider.NetworkType); BaseDataDir = config.GetOrDefault <string>("datadir", null); if (BaseDataDir == null) { BaseDataDir = Path.GetDirectoryName(defaultSettings.DefaultDataDirectory); if (!Directory.Exists(BaseDataDir)) { Directory.CreateDirectory(BaseDataDir); } if (!Directory.Exists(defaultSettings.DefaultDataDirectory)) { Directory.CreateDirectory(defaultSettings.DefaultDataDirectory); } } Logs.Configuration.LogInformation("Network: " + NetworkProvider.NetworkType.ToString()); var supportedChains = config.GetOrDefault <string>("chains", "btc") .Split(',', StringSplitOptions.RemoveEmptyEntries) .Select(t => t.ToUpperInvariant()); var validChains = new List <string>(); foreach (var network in NetworkProvider.GetAll()) { if (supportedChains.Contains(network.CryptoCode)) { validChains.Add(network.CryptoCode); var chainConfiguration = new ChainConfiguration(); chainConfiguration.Rescan = config.GetOrDefault <bool>($"{network.CryptoCode}.rescan", false); chainConfiguration.CryptoCode = network.CryptoCode; var args = RPCArgs.Parse(config, network.NBitcoinNetwork, network.CryptoCode); chainConfiguration.RPC = args.ConfigureRPCClient(network); if (chainConfiguration.RPC.Address.Port == network.NBitcoinNetwork.DefaultPort) { Logs.Configuration.LogWarning($"{network.CryptoCode}: It seems that the RPC port ({chainConfiguration.RPC.Address.Port}) is equal to the default P2P port ({network.NBitcoinNetwork.DefaultPort}), this is probably a misconfiguration."); } if ((chainConfiguration.RPC.CredentialString.CookieFile != null || chainConfiguration.RPC.CredentialString.UseDefault) && !network.SupportCookieAuthentication) { throw new ConfigException($"Chain {network.CryptoCode} does not support cookie file authentication,\n" + $"Please use {network.CryptoCode.ToLowerInvariant()}rpcuser and {network.CryptoCode.ToLowerInvariant()}rpcpassword settings in NBXplorer" + $"And configure rpcuser and rpcpassword in the configuration file or in commandline or your node"); } chainConfiguration.NodeEndpoint = NBitcoin.Utils.ParseEndpoint(config.GetOrDefault <string>($"{network.CryptoCode}.node.endpoint", "127.0.0.1"), network.NBitcoinNetwork.DefaultPort); if (GetPort(chainConfiguration.NodeEndpoint) == network.NBitcoinNetwork.RPCPort) { Logs.Configuration.LogWarning($"{network.CryptoCode}: It seems that the node endpoint port ({GetPort(chainConfiguration.NodeEndpoint)}) is equal to the default RPC port ({network.NBitcoinNetwork.RPCPort}), this is probably a misconfiguration."); } chainConfiguration.StartHeight = config.GetOrDefault <int>($"{network.CryptoCode}.startheight", -1); chainConfiguration.HasTxIndex = config.GetOrDefault <bool>($"{network.CryptoCode}.hastxindex", false); ChainConfigurations.Add(chainConfiguration); } } var invalidChains = String.Join(',', supportedChains.Where(s => !validChains.Contains(s)).ToArray()); if (!string.IsNullOrEmpty(invalidChains)) { throw new ConfigException($"Invalid chains {invalidChains}"); } Logs.Configuration.LogInformation("Supported chains: " + String.Join(',', supportedChains.ToArray())); MinGapSize = config.GetOrDefault <int>("mingapsize", 20); MaxGapSize = config.GetOrDefault <int>("maxgapsize", 30); if (MinGapSize >= MaxGapSize) { throw new ConfigException("mingapsize should be equal or lower than maxgapsize"); } if (!Directory.Exists(BaseDataDir)) { Directory.CreateDirectory(BaseDataDir); } DataDir = Path.Combine(BaseDataDir, NBXplorerDefaultSettings.GetFolderName(NetworkProvider.NetworkType)); if (!Directory.Exists(DataDir)) { Directory.CreateDirectory(DataDir); } SignalFilesDir = config.GetOrDefault <string>("signalfilesdir", null); SignalFilesDir = SignalFilesDir ?? DataDir; if (!Directory.Exists(SignalFilesDir)) { Directory.CreateDirectory(SignalFilesDir); } CacheChain = config.GetOrDefault <bool>("cachechain", true); NoAuthentication = config.GetOrDefault <bool>("noauth", false); var customKeyPathTemplate = config.GetOrDefault <string>("customkeypathtemplate", null); if (!string.IsNullOrEmpty(customKeyPathTemplate)) { if (!KeyPathTemplate.TryParse(customKeyPathTemplate, out var v)) { throw new ConfigException("Invalid customKeyPathTemplate"); } if (v.PostIndexes.IsHardened || v.PreIndexes.IsHardened) { throw new ConfigException("customKeyPathTemplate should not be an hardened path"); } CustomKeyPathTemplate = v; } AzureServiceBusConnectionString = config.GetOrDefault <string>("asbcnstr", ""); AzureServiceBusBlockQueue = config.GetOrDefault <string>("asbblockq", ""); AzureServiceBusTransactionQueue = config.GetOrDefault <string>("asbtranq", ""); AzureServiceBusBlockTopic = config.GetOrDefault <string>("asbblockt", ""); AzureServiceBusTransactionTopic = config.GetOrDefault <string>("asbtrant", ""); return(this); }
public void Start() { if (!Directory.Exists(_Directory)) { Directory.CreateDirectory(_Directory); } string chain = NBXplorerDefaultSettings.GetFolderName(NetworkType.Regtest); string chainDirectory = Path.Combine(_Directory, chain); if (!Directory.Exists(chainDirectory)) { Directory.CreateDirectory(chainDirectory); } StringBuilder config = new StringBuilder(); config.AppendLine($"{chain.ToLowerInvariant()}=1"); config.AppendLine($"port={Port}"); config.AppendLine($"chains=btc,ltc"); config.AppendLine($"btc.explorer.url={NBXplorerUri.AbsoluteUri}"); config.AppendLine($"btc.explorer.cookiefile=0"); config.AppendLine($"ltc.explorer.url={LTCNBXplorerUri.AbsoluteUri}"); config.AppendLine($"ltc.explorer.cookiefile=0"); config.AppendLine($"btc.lightning={IntegratedLightning.AbsoluteUri}"); if (Postgres != null) { config.AppendLine($"postgres=" + Postgres); } var confPath = Path.Combine(chainDirectory, "settings.config"); File.WriteAllText(confPath, config.ToString()); ServerUri = new Uri("http://" + HostName + ":" + Port + "/"); Environment.SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "Development"); var conf = new DefaultConfiguration() { Logger = Logs.LogProvider.CreateLogger("Console") }.CreateConfiguration(new[] { "--datadir", _Directory, "--conf", confPath }); _Host = new WebHostBuilder() .UseConfiguration(conf) .ConfigureServices(s => { s.AddLogging(l => { l.SetMinimumLevel(LogLevel.Information) .AddFilter("Microsoft", LogLevel.Error) .AddFilter("Hangfire", LogLevel.Error) .AddProvider(Logs.LogProvider); }); }) .UseKestrel() .UseStartup <Startup>() .Build(); _Host.Start(); InvoiceRepository = (InvoiceRepository)_Host.Services.GetService(typeof(InvoiceRepository)); StoreRepository = (StoreRepository)_Host.Services.GetService(typeof(StoreRepository)); if (MockRates) { var rateProvider = (RateProviderFactory)_Host.Services.GetService(typeof(RateProviderFactory)); rateProvider.Providers.Clear(); var coinAverageMock = new MockRateProvider(); coinAverageMock.ExchangeRates.Add(new Rating.ExchangeRate() { Exchange = "coinaverage", CurrencyPair = CurrencyPair.Parse("BTC_USD"), BidAsk = new BidAsk(5000m) }); coinAverageMock.ExchangeRates.Add(new Rating.ExchangeRate() { Exchange = "coinaverage", CurrencyPair = CurrencyPair.Parse("BTC_CAD"), BidAsk = new BidAsk(4500m) }); coinAverageMock.ExchangeRates.Add(new Rating.ExchangeRate() { Exchange = "coinaverage", CurrencyPair = CurrencyPair.Parse("LTC_BTC"), BidAsk = new BidAsk(0.001m) }); coinAverageMock.ExchangeRates.Add(new Rating.ExchangeRate() { Exchange = "coinaverage", CurrencyPair = CurrencyPair.Parse("LTC_USD"), BidAsk = new BidAsk(500m) }); rateProvider.Providers.Add("coinaverage", coinAverageMock); var bitflyerMock = new MockRateProvider(); bitflyerMock.ExchangeRates.Add(new Rating.ExchangeRate() { Exchange = "bitflyer", CurrencyPair = CurrencyPair.Parse("BTC_JPY"), BidAsk = new BidAsk(700000m) }); rateProvider.Providers.Add("bitflyer", bitflyerMock); var quadrigacx = new MockRateProvider(); quadrigacx.ExchangeRates.Add(new Rating.ExchangeRate() { Exchange = "quadrigacx", CurrencyPair = CurrencyPair.Parse("BTC_CAD"), BidAsk = new BidAsk(6000m) }); rateProvider.Providers.Add("quadrigacx", quadrigacx); var bittrex = new MockRateProvider(); bittrex.ExchangeRates.Add(new Rating.ExchangeRate() { Exchange = "bittrex", CurrencyPair = CurrencyPair.Parse("DOGE_BTC"), BidAsk = new BidAsk(0.004m) }); rateProvider.Providers.Add("bittrex", bittrex); } }
private NBXplorerDefaultSettings GetDefaultSettings(IConfiguration conf) { return(NBXplorerDefaultSettings.GetDefaultSettings(GetNetworkType(conf))); }
public ExplorerConfiguration LoadArgs(IConfiguration config) { NetworkProvider = new NBXplorerNetworkProvider(DefaultConfiguration.GetNetworkType(config)); var defaultSettings = NBXplorerDefaultSettings.GetDefaultSettings(NetworkProvider.NetworkType); BaseDataDir = config.GetOrDefault <string>("datadir", null); if (BaseDataDir == null) { BaseDataDir = Path.GetDirectoryName(defaultSettings.DefaultDataDirectory); if (!Directory.Exists(BaseDataDir)) { Directory.CreateDirectory(BaseDataDir); } if (!Directory.Exists(defaultSettings.DefaultDataDirectory)) { Directory.CreateDirectory(defaultSettings.DefaultDataDirectory); } } Logs.Configuration.LogInformation("Network: " + NetworkProvider.NetworkType.ToString()); var supportedChains = config.GetOrDefault <string>("chains", "btc") .Split(',', StringSplitOptions.RemoveEmptyEntries) .Select(t => t.ToUpperInvariant()); var validChains = new List <string>(); foreach (var network in NetworkProvider.GetAll()) { if (supportedChains.Contains(network.CryptoCode)) { validChains.Add(network.CryptoCode); var chainConfiguration = new ChainConfiguration(); chainConfiguration.Rescan = config.GetOrDefault <bool>($"{network.CryptoCode}.rescan", false); chainConfiguration.CryptoCode = network.CryptoCode; var args = RPCArgs.Parse(config, network.NBitcoinNetwork, network.CryptoCode); chainConfiguration.RPC = args.ConfigureRPCClient(network); if ((chainConfiguration.RPC.CredentialString.CookieFile != null || chainConfiguration.RPC.CredentialString.UseDefault) && !network.SupportCookieAuthentication) { throw new ConfigException($"Chain {network.CryptoCode} does not support cookie file authentication,\n" + $"Please use {network.CryptoCode.ToLowerInvariant()}rpcuser and {network.CryptoCode.ToLowerInvariant()}rpcpassword settings in NBXplorer" + $"And configure rpcuser and rpcpassword in the configuration file or in commandline or your node"); } chainConfiguration.NodeEndpoint = DefaultConfiguration.ConvertToEndpoint(config.GetOrDefault <string>($"{network.CryptoCode}.node.endpoint", "127.0.0.1"), network.NBitcoinNetwork.DefaultPort); chainConfiguration.StartHeight = config.GetOrDefault <int>($"{network.CryptoCode}.startheight", -1); ChainConfigurations.Add(chainConfiguration); } } var invalidChains = String.Join(',', supportedChains.Where(s => !validChains.Contains(s)).ToArray()); if (!string.IsNullOrEmpty(invalidChains)) { throw new ConfigException($"Invalid chains {invalidChains}"); } Logs.Configuration.LogInformation("Supported chains: " + String.Join(',', supportedChains.ToArray())); AutoPruningTime = TimeSpan.FromSeconds(config.GetOrDefault <int>("autopruning", -1)); if (AutoPruningTime.Value < TimeSpan.Zero) { AutoPruningTime = null; } MinGapSize = config.GetOrDefault <int>("mingapsize", 20); MaxGapSize = config.GetOrDefault <int>("maxgapsize", 30); if (MinGapSize >= MaxGapSize) { throw new ConfigException("mingapsize should be equal or lower than maxgapsize"); } if (!Directory.Exists(BaseDataDir)) { Directory.CreateDirectory(BaseDataDir); } DataDir = Path.Combine(BaseDataDir, NBXplorerDefaultSettings.GetFolderName(NetworkProvider.NetworkType)); if (!Directory.Exists(DataDir)) { Directory.CreateDirectory(DataDir); } CacheChain = config.GetOrDefault <bool>("cachechain", true); NoAuthentication = config.GetOrDefault <bool>("noauth", false); AzureServiceBusConnectionString = config.GetOrDefault <string>("asbcnstr", ""); AzureServiceBusBlockQueue = config.GetOrDefault <string>("asbblockq", ""); AzureServiceBusTransactionQueue = config.GetOrDefault <string>("asbtranq", ""); AzureServiceBusBlockTopic = config.GetOrDefault <string>("asbblockt", ""); AzureServiceBusTransactionTopic = config.GetOrDefault <string>("asbtrant", ""); return(this); }
public void Start() { if (!Directory.Exists(_Directory)) { Directory.CreateDirectory(_Directory); } string chain = NBXplorerDefaultSettings.GetFolderName(NetworkType.Regtest); string chainDirectory = Path.Combine(_Directory, chain); if (!Directory.Exists(chainDirectory)) { Directory.CreateDirectory(chainDirectory); } StringBuilder config = new StringBuilder(); config.AppendLine($"{chain.ToLowerInvariant()}=1"); config.AppendLine($"port={Port}"); config.AppendLine($"chains=btc,ltc"); config.AppendLine($"btc.explorer.url={NBXplorerUri.AbsoluteUri}"); config.AppendLine($"btc.explorer.cookiefile=0"); config.AppendLine($"ltc.explorer.url={LTCNBXplorerUri.AbsoluteUri}"); config.AppendLine($"ltc.explorer.cookiefile=0"); config.AppendLine($"btc.lightning={IntegratedLightning.AbsoluteUri}"); if (Postgres != null) { config.AppendLine($"postgres=" + Postgres); } var confPath = Path.Combine(chainDirectory, "settings.config"); File.WriteAllText(confPath, config.ToString()); ServerUri = new Uri("http://" + HostName + ":" + Port + "/"); Environment.SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "Development"); var conf = new DefaultConfiguration() { Logger = Logs.LogProvider.CreateLogger("Console") }.CreateConfiguration(new[] { "--datadir", _Directory, "--conf", confPath }); _Host = new WebHostBuilder() .UseConfiguration(conf) .ConfigureServices(s => { if (MockRates) { var mockRates = new MockRateProviderFactory(); var btc = new MockRateProvider("BTC", new Rate("USD", 5000m), new Rate("CAD", 4500m)); var ltc = new MockRateProvider("LTC", new Rate("USD", 500m)); mockRates.AddMock(btc); mockRates.AddMock(ltc); s.AddSingleton <IRateProviderFactory>(mockRates); } s.AddLogging(l => { l.SetMinimumLevel(LogLevel.Information) .AddFilter("Microsoft", LogLevel.Error) .AddFilter("Hangfire", LogLevel.Error) .AddProvider(Logs.LogProvider); }); }) .UseKestrel() .UseStartup <Startup>() .Build(); _Host.Start(); InvoiceRepository = (InvoiceRepository)_Host.Services.GetService(typeof(InvoiceRepository)); }