예제 #1
0
        private void StartNBXplorer()
        {
            var port = CustomServer.FreeTcpPort();
            List <(string key, string value)> keyValues = new List <(string key, string value)>();

            keyValues.Add(("conf", Path.Combine(datadir, "settings.config")));
            keyValues.Add(("datadir", datadir));
            keyValues.Add(("port", port.ToString()));
            keyValues.Add(("network", "regtest"));
            keyValues.Add(("chains", CryptoCode.ToLowerInvariant()));
            keyValues.Add(("verbose", "1"));
            keyValues.Add(($"{CryptoCode.ToLowerInvariant()}rpcauth", Explorer.GetRPCAuth()));
            keyValues.Add(($"{CryptoCode.ToLowerInvariant()}rpcurl", Explorer.CreateRPCClient().Address.AbsoluteUri));
            keyValues.Add(("cachechain", "0"));
            keyValues.Add(("rpcnotest", "1"));
            keyValues.Add(("mingapsize", "3"));
            keyValues.Add(("maxgapsize", "8"));
            keyValues.Add(($"{CryptoCode.ToLowerInvariant()}startheight", Explorer.CreateRPCClient().GetBlockCount().ToString()));
            keyValues.Add(($"{CryptoCode.ToLowerInvariant()}nodeendpoint", $"{Explorer.Endpoint.Address}:{Explorer.Endpoint.Port}"));
            keyValues.Add(("asbcnstr", AzureServiceBusTestConfig.ConnectionString));
            keyValues.Add(("asbblockq", AzureServiceBusTestConfig.NewBlockQueue));
            keyValues.Add(("asbtranq", AzureServiceBusTestConfig.NewTransactionQueue));
            keyValues.Add(("asbblockt", AzureServiceBusTestConfig.NewBlockTopic));
            keyValues.Add(("asbtrant", AzureServiceBusTestConfig.NewTransactionTopic));

            var args = keyValues.SelectMany(kv => new[] { $"--{kv.key}", kv.value }
                                            .Concat(new[] { $"--{CryptoCode.ToLowerInvariant()}hastxindex" })).ToArray();

            Host = new WebHostBuilder()
                   .UseConfiguration(new DefaultConfiguration().CreateConfiguration(args))
                   .UseKestrel()
                   .ConfigureLogging(l =>
            {
                l.SetMinimumLevel(LogLevel.Information)
                .AddFilter("System.Net.Http.HttpClient", LogLevel.Error)
                .AddFilter("Microsoft", LogLevel.Error)
                .AddFilter("Hangfire", LogLevel.Error)
                .AddFilter("NBXplorer.Authentication.BasicAuthenticationHandler", LogLevel.Critical)
                .AddProvider(Logs.LogProvider);
            })
                   .UseStartup <Startup>()
                   .Build();

            RPC = ((RPCClientProvider)Host.Services.GetService(typeof(RPCClientProvider))).GetRPCClient(CryptoCode);
            var nbxnetwork = ((NBXplorerNetworkProvider)Host.Services.GetService(typeof(NBXplorerNetworkProvider))).GetFromCryptoCode(CryptoCode);

            Network = nbxnetwork.NBitcoinNetwork;
            var conf = (ExplorerConfiguration)Host.Services.GetService(typeof(ExplorerConfiguration));

            Host.Start();
            Configuration = conf;
            _Client       = new ExplorerClient(nbxnetwork, Address);
            _Client.SetCookieAuth(Path.Combine(conf.DataDir, ".cookie"));
            Notifications = _Client.CreateLongPollingNotificationSession();
        }
예제 #2
0
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            var session = _explorerClient.CreateLongPollingNotificationSession();

            await ListenToSessionLoop(session, stoppingToken);
        }
예제 #3
0
        public ServerTester(string directory)
        {
            SetEnvironment();
            try
            {
                var rootTestData = "TestData";
                directory  = Path.Combine(rootTestData, directory);
                _Directory = directory;
                if (!Directory.Exists(rootTestData))
                {
                    Directory.CreateDirectory(rootTestData);
                }

                var cryptoSettings = new NBXplorerNetworkProvider(NetworkType.Regtest).GetFromCryptoCode(CryptoCode);
                NodeBuilder = NodeBuilder.Create(nodeDownloadData, Network, directory);

                Explorer = NodeBuilder.CreateNode();
                foreach (var node in NodeBuilder.Nodes)
                {
                    node.WhiteBind  = true;
                    node.CookieAuth = cryptoSettings.SupportCookieAuthentication;
                }
                NodeBuilder.StartAll();
                Explorer.CreateRPCClient().EnsureGenerate(Network.Consensus.CoinbaseMaturity + 1);

                var port    = CustomServer.FreeTcpPort();
                var datadir = Path.Combine(directory, "explorer");
                DeleteFolderRecursive(datadir);
                List <(string key, string value)> keyValues = new List <(string key, string value)>();
                keyValues.Add(("conf", Path.Combine(directory, "explorer", "settings.config")));
                keyValues.Add(("datadir", datadir));
                keyValues.Add(("port", port.ToString()));
                keyValues.Add(("network", "regtest"));
                keyValues.Add(("chains", CryptoCode.ToLowerInvariant()));
                keyValues.Add(("verbose", "1"));
                keyValues.Add(($"{CryptoCode.ToLowerInvariant()}rpcauth", Explorer.GetRPCAuth()));
                keyValues.Add(($"{CryptoCode.ToLowerInvariant()}rpcurl", Explorer.CreateRPCClient().Address.AbsoluteUri));
                keyValues.Add(("cachechain", "0"));
                keyValues.Add(("rpcnotest", "1"));
                keyValues.Add(("mingapsize", "3"));
                keyValues.Add(("maxgapsize", "8"));
                keyValues.Add(($"{CryptoCode.ToLowerInvariant()}startheight", Explorer.CreateRPCClient().GetBlockCount().ToString()));
                keyValues.Add(($"{CryptoCode.ToLowerInvariant()}nodeendpoint", $"{Explorer.Endpoint.Address}:{Explorer.Endpoint.Port}"));
                keyValues.Add(("asbcnstr", AzureServiceBusTestConfig.ConnectionString));
                keyValues.Add(("asbblockq", AzureServiceBusTestConfig.NewBlockQueue));
                keyValues.Add(("asbtranq", AzureServiceBusTestConfig.NewTransactionQueue));
                keyValues.Add(("asbblockt", AzureServiceBusTestConfig.NewBlockTopic));
                keyValues.Add(("asbtrant", AzureServiceBusTestConfig.NewTransactionTopic));

                var args = keyValues.SelectMany(kv => new[] { $"--{kv.key}", kv.value }).ToArray();
                Host = new WebHostBuilder()
                       .UseConfiguration(new DefaultConfiguration().CreateConfiguration(args))
                       .UseKestrel()
                       .ConfigureLogging(l =>
                {
                    l.SetMinimumLevel(LogLevel.Information)
                    .AddFilter("Microsoft", LogLevel.Error)
                    .AddFilter("Hangfire", LogLevel.Error)
                    .AddFilter("NBXplorer.Authentication.BasicAuthenticationHandler", LogLevel.Critical)
                    .AddProvider(Logs.LogProvider);
                })
                       .UseStartup <Startup>()
                       .Build();

                RPC = ((RPCClientProvider)Host.Services.GetService(typeof(RPCClientProvider))).GetRPCClient(CryptoCode);
                var nbxnetwork = ((NBXplorerNetworkProvider)Host.Services.GetService(typeof(NBXplorerNetworkProvider))).GetFromCryptoCode(CryptoCode);
                Network = nbxnetwork.NBitcoinNetwork;
                var conf = (ExplorerConfiguration)Host.Services.GetService(typeof(ExplorerConfiguration));
                Host.Start();
                Configuration = conf;
                _Client       = new ExplorerClient(nbxnetwork, Address);
                _Client.SetCookieAuth(Path.Combine(conf.DataDir, ".cookie"));
                Notifications = _Client.CreateLongPollingNotificationSession();
                this.Client.WaitServerStarted();
            }
            catch
            {
                Dispose();
                throw;
            }
        }