public CoreNode(string folder, INodeRunner runner, NodeBuilder builder)
        {
            _Runner       = runner;
            this._Builder = builder;
            this._Folder  = folder;
            _State        = CoreNodeState.Stopped;
            CleanFolder();
            Directory.CreateDirectory(folder);
            dataDir = Path.Combine(folder, "data");
            Directory.CreateDirectory(dataDir);
            var pass = Encoders.Hex.EncodeData(RandomUtils.GetBytes(20));

            creds   = new NetworkCredential(pass, pass);
            _Config = Path.Combine(dataDir, "bitcoin.conf");
            ConfigParameters.Import(builder.ConfigParameters);
            ports = new int[2];
            FindPorts(ports);
        }
        public async Task StartAsync()
        {
            NodeConfigParameters config = new NodeConfigParameters();

            config.Add("regtest", "1");
            config.Add("rest", "1");
            config.Add("server", "1");
            config.Add("txindex", "1");
            config.Add("rpcuser", this.creds.UserName);
            config.Add("rpcpassword", this.creds.Password);
            config.Add("port", this.ports[0].ToString());
            config.Add("rpcport", this.ports[1].ToString());
            config.Add("printtoconsole", "1");
            config.Add("keypool", "10");
            config.Import(this.ConfigParameters);
            File.WriteAllText(this.config, config.ToString());
            lock (this.lockObject)
            {
                this.runner.Start(this.dataDir);
                this.state = CoreNodeState.Starting;
            }
            while (true)
            {
                try
                {
                    await CreateRPCClient().GetBlockHashAsync(0);

                    this.state = CoreNodeState.Running;
                    break;
                }
                catch
                {
                }
                if (this.runner.HasExited)
                {
                    break;
                }
            }
        }