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);
        }
Beispiel #2
0
 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();
     }
 }
Beispiel #3
0
        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");
        }
Beispiel #4
0
        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);
            }
        }
Beispiel #5
0
 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]);
 }
Beispiel #6
0
 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);
            }
        }
Beispiel #9
0
 private NBXplorerDefaultSettings GetDefaultSettings(IConfiguration conf)
 {
     return(NBXplorerDefaultSettings.GetDefaultSettings(GetNetworkType(conf)));
 }
Beispiel #10
0
        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));
        }