Exemple #1
0
        private void RunScenario(string directory)
        {
            NodeBuilder = NodeBuilder.Create(directory);
            User1       = NodeBuilder.CreateNode();
            User2       = NodeBuilder.CreateNode();
            Explorer    = NodeBuilder.CreateNode();
            NodeBuilder.StartAll();
            User1.CreateRPCClient().Generate(1);
            User1.Sync(Explorer, true);
            Explorer.CreateRPCClient().Generate(1);
            Explorer.Sync(User2, true);
            User2.CreateRPCClient().Generate(101);
            User1.Sync(User2, true);
            var a = User1.CreateRPCClient().GetBlockCount();
            var b = User1.CreateRPCClient().GetBlockCount();
            var c = User1.CreateRPCClient().GetBlockCount();

            Task.WaitAll(new Task[]
            {
                User1.CreateRPCClient().SendCommandAsync("stop"),
                User2.CreateRPCClient().SendCommandAsync("stop"),
                Explorer.CreateRPCClient().SendCommandAsync("stop")
            }.ToArray());

            User1.WaitForExit();
            User2.WaitForExit();
            Explorer.WaitForExit();
            NodeBuilder = null;
        }
Exemple #2
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);


                User1    = NodeBuilder.CreateNode();
                User2    = NodeBuilder.CreateNode();
                Explorer = NodeBuilder.CreateNode();
                foreach (var node in NodeBuilder.Nodes)
                {
                    node.WhiteBind  = true;
                    node.CookieAuth = cryptoSettings.SupportCookieAuthentication;
                }
                NodeBuilder.StartAll();

                User1.CreateRPCClient().Generate(1);
                User1.Sync(Explorer, true);
                Explorer.CreateRPCClient().Generate(1);
                Explorer.Sync(User2, true);
                User2.CreateRPCClient().EnsureGenerate(Network.Consensus.CoinbaseMaturity + 1);
                User1.Sync(User2, true);

                var datadir = Path.Combine(directory, "explorer");
                DeleteRecursivelyWithMagicDust(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(("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", "2"));
                keyValues.Add(("maxgapsize", "4"));
                keyValues.Add(($"{CryptoCode.ToLowerInvariant()}startheight", Explorer.CreateRPCClient().GetBlockCount().ToString()));
                keyValues.Add(($"{CryptoCode.ToLowerInvariant()}nodeendpoint", $"{Explorer.Endpoint.Address}:{Explorer.Endpoint.Port}"));

                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();

                _Client = new ExplorerClient(nbxnetwork, Address);
                _Client.SetCookieAuth(Path.Combine(conf.DataDir, ".cookie"));
            }
            catch
            {
                Dispose();
                throw;
            }
        }