Esempio n. 1
1
        /// <summary>
        /// Creates a new miner instance.
        /// </summary>
        /// <param name="id"></param>
        /// <param name="extraNonce"></param>
        /// <param name="connection"></param>
        /// <param name="pool"></param>
        /// <param name="minerManager"></param>
        /// <param name="storageLayer"></param>
        public StratumMiner(int id, UInt32 extraNonce, IConnection connection, IPool pool, IMinerManager minerManager, IStorageLayer storageLayer)
        {
            Id = id; // the id of the miner.
            ExtraNonce = extraNonce;
            Connection = connection; // the underlying connection.
            Pool = pool;
            _minerManager = minerManager;
            _storageLayer = storageLayer;

            Subscribed = false; // miner has to subscribe.
            Authenticated = false; // miner has to authenticate.

            _logger = Log.ForContext<StratumMiner>().ForContext("Component", pool.Config.Coin.Name);
            _packetLogger = LogManager.PacketLogger.ForContext<StratumMiner>().ForContext("Component", pool.Config.Coin.Name);

            _rpcResultHandler = callback =>
            {
                var asyncData = ((JsonRpcStateAsync)callback); // get the async data.
                var result = asyncData.Result + "\n"; // read the result.
                var response = Encoding.UTF8.GetBytes(result); // set the response.

                Connection.Send(response); // send the response.

                _packetLogger.Verbose("tx: {0}", result.PrettifyJson());
            };
        }
        /// <summary>
        /// Creates a new miner instance.
        /// </summary>
        /// <param name="id"></param>
        /// <param name="extraNonce"></param>
        /// <param name="connection"></param>
        /// <param name="pool"></param>
        /// <param name="minerManager"></param>
        /// <param name="storageLayer"></param>
        public StratumMiner(int id, UInt32 extraNonce, IConnection connection, IPool pool, IMinerManager minerManager, IStorageLayer storageLayer)
        {
            Id            = id;         // the id of the miner.
            ExtraNonce    = extraNonce;
            Connection    = connection; // the underlying connection.
            Pool          = pool;
            _minerManager = minerManager;
            _storageLayer = storageLayer;

            Subscribed    = false; // miner has to subscribe.
            Authenticated = false; // miner has to authenticate.

            _logger       = Log.ForContext <StratumMiner>().ForContext("Component", pool.Config.Coin.Name);
            _packetLogger = LogManager.PacketLogger.ForContext <StratumMiner>().ForContext("Component", pool.Config.Coin.Name);

            _rpcResultHandler = callback =>
            {
                var asyncData = ((JsonRpcStateAsync)callback);  // get the async data.
                var result    = asyncData.Result + "\n";        // read the result.
                var response  = Encoding.UTF8.GetBytes(result); // set the response.

                Connection.Send(response);                      // send the response.

                _packetLogger.Verbose("tx: {0}", result.PrettifyJson());
            };
        }
Esempio n. 3
0
 public VanillaServer(IPool pool, IMinerManager minerManager, IJobManager jobManager, ICoinConfig coinConfig)
 {
     _pool = pool;
     _minerManager = minerManager;
     _jobManager = jobManager;
     _logger = Log.ForContext<VanillaServer>().ForContext("Component", coinConfig.Name);
 }
Esempio n. 4
0
        private void InitManagers()
        {
            //try
            //{
            var storage = _objectFactory.GetStorage(Storages.Redis, Config);

            _minerManager = _objectFactory.GetMinerManager(Config, _daemonClient);

            var jobTracker = _objectFactory.GetJobTracker();

            var blockProcessor = _objectFactory.GetBlockProcessor(Config, _daemonClient);

            _shareManager = _objectFactory.GetShareManager(Config, _daemonClient, jobTracker, storage, blockProcessor);

            var vardiffManager = _objectFactory.GetVardiffManager(Config, _shareManager);

            _banningManager = _objectFactory.GetBanManager(Config, _shareManager);

            _jobManager = _objectFactory.GetJobManager(Config, _daemonClient, jobTracker, _shareManager, _minerManager, _hashAlgorithm);
            _jobManager.Initialize(InstanceId);

            var paymentProcessor = _objectFactory.GetPaymentProcessor(Config, _daemonClient, storage, blockProcessor);

            paymentProcessor.Initialize(Config.Payments);

            var latestBlocks = _objectFactory.GetLatestBlocks(storage);
            var blockStats   = _objectFactory.GetBlockStats(latestBlocks, storage);

            Statistics = _objectFactory.GetPerPoolStats(Config, _daemonClient, _minerManager, _hashAlgorithm, blockStats, storage);
            //}
            //catch (Exception e)
            //{
            //    _logger.Error("Pool initialization error: {0:l}", e.Message);
            //}
        }
Esempio n. 5
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="id"></param>
        /// <param name="pool"></param>
        /// <param name="minerManager"></param>
        public GetworkMiner(int id, IPool pool, IMinerManager minerManager)
        {
            Id = id; // the id of the miner.
            Pool = pool;
            _minerManager = minerManager;

            Authenticated = false; // miner has to authenticate.

            Software = MinerSoftware.Unknown;
            SoftwareVersion = new Version();

            _logger = Log.ForContext<GetworkMiner>().ForContext("Component", pool.Config.Coin.Name);
            _packetLogger = LogManager.PacketLogger.ForContext<GetworkMiner>().ForContext("Component", pool.Config.Coin.Name);

            _rpcResultHandler = callback =>
            {
                var asyncData = ((JsonRpcStateAsync) callback);
                var result = asyncData.Result;
                var response = Encoding.UTF8.GetBytes(result);
                var context = (GetworkContext) asyncData.AsyncState;

                context.Response.ContentType = "application/json";
                context.Response.ContentEncoding = Encoding.UTF8;
                context.Response.ContentLength64 = response.Length;
                context.Response.OutputStream.Write(response, 0, response.Length);

                _packetLogger.Verbose("tx: {0}", result.PrettifyJson());
            };
        }
Esempio n. 6
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="id"></param>
        /// <param name="pool"></param>
        /// <param name="minerManager"></param>
        public GetworkMiner(int id, IPool pool, IMinerManager minerManager)
        {
            Id            = id; // the id of the miner.
            Pool          = pool;
            _minerManager = minerManager;

            Authenticated = false; // miner has to authenticate.

            Software        = MinerSoftware.Unknown;
            SoftwareVersion = new Version();

            _logger       = Log.ForContext <GetworkMiner>().ForContext("Component", pool.Config.Coin.Name);
            _packetLogger = LogManager.PacketLogger.ForContext <GetworkMiner>().ForContext("Component", pool.Config.Coin.Name);

            _rpcResultHandler = callback =>
            {
                var asyncData = ((JsonRpcStateAsync)callback);
                var result    = asyncData.Result;
                var response  = Encoding.UTF8.GetBytes(result);
                var context   = (GetworkContext)asyncData.AsyncState;

                context.Response.ContentType     = "application/json";
                context.Response.ContentEncoding = Encoding.UTF8;
                context.Response.ContentLength64 = response.Length;
                context.Response.OutputStream.Write(response, 0, response.Length);

                _packetLogger.Verbose("tx: {0}", result.PrettifyJson());
            };
        }
Esempio n. 7
0
 public VanillaServer(IPoolConfig poolConfig, IPool pool, IMinerManager minerManager, IJobManager jobManager)
 {
     _pool         = pool;
     _minerManager = minerManager;
     _jobManager   = jobManager;
     _logger       = Log.ForContext <VanillaServer>().ForContext("Component", poolConfig.Coin.Name);
 }
Esempio n. 8
0
 /// <summary>
 /// Initializes a new instance of the <see cref="StratumServer"/> class.
 /// </summary>
 /// <param name="pool"></param>
 /// <param name="minerManager">The miner manager.</param>
 /// <param name="jobManager"></param>
 /// <param name="banManager"></param>
 /// <param name="poolConfig"></param>
 public StratumServer(IPoolConfig poolConfig, IPool pool, IMinerManager minerManager, IJobManager jobManager, IBanManager banManager)
 {
     _pool = pool;
     _minerManager = minerManager;
     _jobManager = jobManager;
     _banManager = banManager;
     _logger = Log.ForContext<StratumServer>().ForContext("Component", poolConfig.Coin.Name);
 }
Esempio n. 9
0
 /// <summary>
 /// Initializes a new instance of the <see cref="StratumServer"/> class.
 /// </summary>
 /// <param name="pool"></param>
 /// <param name="minerManager">The miner manager.</param>
 /// <param name="jobManager"></param>
 /// <param name="banManager"></param>
 /// <param name="poolConfig"></param>
 public StratumServer(IPoolConfig poolConfig, IPool pool, IMinerManager minerManager, IJobManager jobManager, IBanManager banManager)
 {
     _pool         = pool;
     _minerManager = minerManager;
     _jobManager   = jobManager;
     _banManager   = banManager;
     _logger       = Log.ForContext <StratumServer>().ForContext("Component", poolConfig.Coin.Name);
 }
Esempio n. 10
0
 public JobManager(IDaemonClient daemonClient, IJobTracker jobTracker, IShareManager shareManager, IMinerManager minerManager, IHashAlgorithm hashAlgorithm)
 {
     _daemonClient = daemonClient;
     _jobTracker = jobTracker;
     _shareManager = shareManager;
     _minerManager = minerManager;
     _hashAlgorithm = hashAlgorithm;
     _jobCounter = new JobCounter();
 }
Esempio n. 11
0
 /// <summary>
 /// Gets the specified service name.
 /// </summary>
 /// <param name="serverName">Name of the service.</param>
 /// <param name="pool"></param>
 /// <param name="minerManager">The miner manager.</param>
 /// <returns></returns>
 public IMiningServer Get(string serverName, IPool pool, IMinerManager minerManager, IJobManager jobManager)
 {
     var @params = new NamedParameterOverloads
     {
         {"pool", pool},
         {"minerManager", minerManager},
         {"jobManager", jobManager}
     };
     return _applicationContext.Container.Resolve<IMiningServer>(serverName, @params);
 }
Esempio n. 12
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="id"></param>
        /// <param name="pool"></param>
        /// <param name="minerManager"></param>
        /// <param name="logManager"></param>
        public VanillaMiner(int id, IPool pool, IMinerManager minerManager)
        {
            Id = id; // the id of the miner.
            Pool = pool;
            _minerManager = minerManager;

            Authenticated = false; // miner has to authenticate.

            _logger = LogManager.PacketLogger.ForContext<VanillaMiner>().ForContext("Component", pool.Config.Coin.Name);
        }
Esempio n. 13
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="id"></param>
        /// <param name="minerManager"></param>
        public VanillaMiner(int id, IMinerManager minerManager)
        {
            Id = id; // the id of the miner.
            _minerManager = minerManager;
            Difficulty = new Difficulty(16);

            Subscribed = true; // vanilla miners are subscribed by default.
            Authenticated = false; // miner has to authenticate.
            SupportsJobNotifications = false; // vanilla miner's doesn't support new mining job notifications.
        }
Esempio n. 14
0
        public PerPool(IPoolConfig poolConfig, IDaemonClient daemonClient,IMinerManager minerManager, IHashAlgorithm hashAlgorithm, IBlocks blockStatistics, IStorage storage)
        {
            Config = poolConfig;
            _daemonClient = daemonClient;
            _minerManager = minerManager;
            Blocks = blockStatistics;
            _storage = storage;

            _response = new ExpandoObject();
            _shareMultiplier = Math.Pow(2, 32) / hashAlgorithm.Multiplier;
        }
Esempio n. 15
0
        /// <summary>
        /// Creates a new miner instance.
        /// </summary>
        /// <param name="id"></param>
        /// <param name="extraNonce"></param>
        /// <param name="connection"></param>
        /// <param name="pool"></param>
        /// <param name="minerManager"></param>
        public StratumMiner(int id, UInt32 extraNonce, IConnection connection, IPool pool, IMinerManager minerManager)
        {
            Id = id; // the id of the miner.
            ExtraNonce = extraNonce;
            Connection = connection; // the underlying connection.
            _minerManager = minerManager;
            Pool = pool;
            Difficulty = new Difficulty(16); // set miner difficulty.

            Subscribed = false; // miner has to subscribe.
            Authenticated = false; // miner has to authenticate.
            SupportsJobNotifications = true; // stratum miner'ssupports new mining job notifications.
        }
Esempio n. 16
0
        /// <summary>
        /// Gets the specified daemon client.
        /// </summary>
        /// <param name="daemonClient">The daemon client.</param>
        /// <param name="jobTracker"></param>
        /// <param name="shareManager"></param>
        /// <param name="minerManager">The miner manager.</param>
        /// <param name="hashAlgorithm"></param>
        /// <returns></returns>
        public IJobManager Get(IDaemonClient daemonClient, IJobTracker jobTracker, IShareManager shareManager, IMinerManager minerManager, IHashAlgorithm hashAlgorithm)
        {
            var @params = new NamedParameterOverloads
            {
                {"daemonClient", daemonClient},
                {"jobTracker", jobTracker},
                {"shareManager", shareManager},
                {"minerManager", minerManager},
                {"hashAlgorithm", hashAlgorithm}
            };

            return _applicationContext.Container.Resolve<IJobManager>(@params);
        }
Esempio n. 17
0
        public PerPool(IPoolConfig poolConfig, IConfigManager configManager, IDaemonClient daemonClient, IMinerManager minerManager, IHashAlgorithm hashAlgorithm, IBlocksCount blockStatistics, IStorage storage)
        {
            Config            = poolConfig;
            _statisticsConfig = configManager.WebServerConfig.Statistics;
            _daemonClient     = daemonClient;
            _minerManager     = minerManager;
            _storage          = storage;

            Blocks  = blockStatistics;
            Workers = new Dictionary <string, double>();

            _response        = new ExpandoObject();
            _shareMultiplier = Math.Pow(2, 32) / hashAlgorithm.Multiplier;
        }
Esempio n. 18
0
        private Timer _reBroadcastTimer; // timer for rebroadcasting jobs after an pre-configured idle perioud.

        #endregion Fields

        #region Constructors

        public JobManager(IPoolConfig poolConfig, IDaemonClient daemonClient, IJobTracker jobTracker, IShareManager shareManager,
            IMinerManager minerManager, IHashAlgorithm hashAlgorithm)
        {
            _daemonClient = daemonClient;
            _jobTracker = jobTracker;
            _shareManager = shareManager;
            _minerManager = minerManager;
            _hashAlgorithm = hashAlgorithm;
            _poolConfig = poolConfig;

            _jobCounter = new JobCounter(); // todo make this ioc based too.

            _logger = Log.ForContext<JobManager>().ForContext("Component", poolConfig.Coin.Name);
        }
Esempio n. 19
0
        private Timer _blockPollerTimer; // timer for polling new blocks.

        public JobManager(IPoolConfig poolConfig, IDaemonClient daemonClient, IJobTracker jobTracker, IShareManager shareManager,
                          IMinerManager minerManager, IHashAlgorithm hashAlgorithm)
        {
            _daemonClient  = daemonClient;
            _jobTracker    = jobTracker;
            _shareManager  = shareManager;
            _minerManager  = minerManager;
            _hashAlgorithm = hashAlgorithm;
            _poolConfig    = poolConfig;

            _jobCounter = new JobCounter(); // todo make this ioc based too.

            _logger = Log.ForContext <JobManager>().ForContext("Component", poolConfig.Coin.Name);
        }
Esempio n. 20
0
        /// <summary>
        /// Creates a new miner instance.
        /// </summary>
        /// <param name="id"></param>
        /// <param name="extraNonce"></param>
        /// <param name="connection"></param>
        /// <param name="pool"></param>
        /// <param name="minerManager"></param>
        /// <param name="logManager"></param>
        public StratumMiner(int id, UInt32 extraNonce, IConnection connection, IPool pool, IMinerManager minerManager)
        {
            Id = id; // the id of the miner.
            ExtraNonce = extraNonce;
            Connection = connection; // the underlying connection.
            _minerManager = minerManager;
            Pool = pool;

            Difficulty = 16; // set miner difficulty.

            Subscribed = false; // miner has to subscribe.
            Authenticated = false; // miner has to authenticate.

            _logger = LogManager.PacketLogger.ForContext<StratumMiner>().ForContext("Component", pool.Config.Coin.Name);
        }
Esempio n. 21
0
        public IJobManager GetJobManager(IPoolConfig poolConfig, IDaemonClient daemonClient, IJobTracker jobTracker, IShareManager shareManager,
                                         IMinerManager minerManager, IHashAlgorithm hashAlgorithm)
        {
            var @params = new NamedParameterOverloads
            {
                { "poolConfig", poolConfig },
                { "daemonClient", daemonClient },
                { "jobTracker", jobTracker },
                { "shareManager", shareManager },
                { "minerManager", minerManager },
                { "hashAlgorithm", hashAlgorithm },
            };

            return(_applicationContext.Container.Resolve <IJobManager>(@params));
        }
Esempio n. 22
0
        public JobManager(string pool, IDaemonClient daemonClient, IJobTracker jobTracker, IShareManager shareManager,
            IMinerManager minerManager, IHashAlgorithm hashAlgorithm, IWalletConfig walletConfig,
            IRewardsConfig rewardsConfig)
        {
            _daemonClient = daemonClient;
            _jobTracker = jobTracker;
            _shareManager = shareManager;
            _minerManager = minerManager;
            _hashAlgorithm = hashAlgorithm;
            _walletConfig = walletConfig;
            _rewardsConfig = rewardsConfig;
            _jobCounter = new JobCounter(); // todo make this ioc based too.

            _logger = Log.ForContext<JobManager>().ForContext("Component", pool);
        }
Esempio n. 23
0
 public VanillaServer(IPool pool, IMinerManager minerManager, IJobManager jobManager)
 {
     _pool = pool;
     _minerManager = minerManager;
     _jobManager = jobManager;
 }
Esempio n. 24
0
        private void InitManagers()
        {
            // init the algorithm
            _hashAlgorithm = _objectFactory.GetHashAlgorithm(Config.Coin.Algorithm);

            _storage = _objectFactory.GetStorage(Storages.Redis, Config);

            _paymentProcessor = _objectFactory.GetPaymentProcessor(Config.Coin.Name, _daemonClient, _storage, Config.Wallet);
            _paymentProcessor.Initialize(Config.Payments);

            _minerManager = _objectFactory.GetMiningManager(Config.Coin.Name, _daemonClient);

            _jobTracker = _objectFactory.GetJobTracker();

            _shareManager = _objectFactory.GetShareManager(Config.Coin.Name, _daemonClient, _jobTracker, _storage);

            _vardiffManager = _objectFactory.GetVardiffManager(Config.Coin.Name, _shareManager, Config.Stratum.Vardiff);

            _banningManager = _objectFactory.GetBanManager(Config.Coin.Name, _shareManager, Config.Banning);

            _jobManager = _objectFactory.GetJobManager(Config.Coin.Name, _daemonClient, _jobTracker, _shareManager, _minerManager,
                _hashAlgorithm, Config.Wallet, Config.Rewards);

            _jobManager.Initialize(InstanceId);

            var latestBlocks = _objectFactory.GetLatestBlocks(_storage);
            var blockStats = _objectFactory.GetBlockStats(latestBlocks, _storage);
            Statistics = _objectFactory.GetPerPoolStats(Config, _daemonClient, _minerManager, _hashAlgorithm, blockStats, _storage);
        }
Esempio n. 25
0
 /// <summary>
 /// Initializes a new instance of the <see cref="StratumServer"/> class.
 /// </summary>
 /// <param name="pool"></param>
 /// <param name="minerManager">The miner manager.</param>
 /// <param name="jobManager"></param>
 public StratumServer(IPool pool, IMinerManager minerManager, IJobManager jobManager)
 {
     _pool = pool;
     _minerManager = minerManager;
     _jobManager = jobManager;
 }
Esempio n. 26
0
        public IMiningServer GetMiningServer(string type, IPoolConfig poolConfig, IPool pool, IMinerManager minerManager, IJobManager jobManager, IBanManager banManager)
        {
            var @params = new NamedParameterOverloads
            {
                { "poolConfig", poolConfig },
                { "pool", pool },
                { "minerManager", minerManager },
                { "jobManager", jobManager },
                { "banManager", banManager },
            };

            return(_applicationContext.Container.Resolve <IMiningServer>(type, @params));
        }
Esempio n. 27
0
        private void InitManagers()
        {
            _storageManager = _storageManagerFactory.Get(Storages.Redis);

            _minerManager = _minerManagerFactory.Get(_daemonClient);

            _jobTracker = _jobTrackerFactory.Get();

            _shareManager = _shareManagerFactory.Get(_daemonClient, _jobTracker, _storageManager);

            _jobManager = _jobManagerFactory.Get(_daemonClient, _jobTracker, _shareManager, _minerManager, _hashAlgorithmFactory.Get(Config.Coin.Algorithm));
            _jobManager.Initialize(InstanceId);
        }
Esempio n. 28
0
        public IMiningServer GetMiningServer(string type, IPoolConfig poolConfig, IPool pool, IMinerManager minerManager, IJobManager jobManager, IBanManager banManager)
        {
            var @params = new NamedParameterOverloads
            {
                {"poolConfig", poolConfig},
                {"pool", pool},
                {"minerManager", minerManager},
                {"jobManager", jobManager},
                {"banManager", banManager},
            };

            return _applicationContext.Container.Resolve<IMiningServer>(type, @params);
        }
Esempio n. 29
0
        public IPerPool GetPerPoolStats(IPoolConfig poolConfig, IDaemonClient daemonClient, IMinerManager minerManager, IHashAlgorithm hashAlgorithm, IBlocksCount blockStatistics, IStorage storage)
        {
            var @params = new NamedParameterOverloads
            {
                { "poolConfig", poolConfig },
                { "daemonClient", daemonClient },
                { "minerManager", minerManager },
                { "hashAlgorithm", hashAlgorithm },
                { "blockStatistics", blockStatistics },
                { "storage", storage },
            };

            return(_applicationContext.Container.Resolve <IPerPool>(@params));
        }
Esempio n. 30
0
        public IJobManager GetJobManager(string pool, IDaemonClient daemonClient, IJobTracker jobTracker, IShareManager shareManager,
            IMinerManager minerManager, IHashAlgorithm hashAlgorithm, IWalletConfig walletConfig, IRewardsConfig rewardsConfig)
        {
            var @params = new NamedParameterOverloads
            {
                {"pool", pool},
                {"daemonClient", daemonClient},
                {"jobTracker", jobTracker},
                {"shareManager", shareManager},
                {"minerManager", minerManager},
                {"hashAlgorithm", hashAlgorithm},
                {"walletConfig", walletConfig},
                {"rewardsConfig", rewardsConfig},
            };

            return _applicationContext.Container.Resolve<IJobManager>(@params);
        }
Esempio n. 31
0
        /// <summary>
        /// Initialize mock objects.
        /// </summary>
        public PoolTests()
        {
            _jobManagerFactory = Substitute.For<IJobManagerFactory>();
            _jobTrackerFactory = Substitute.For<IJobTrackerFactory>();
            _hashAlgorithmFactory = Substitute.For<IHashAlgorithmFactory>();
            _shareManagerFactory = Substitute.For<IShareManagerFactory>();
            _minerManagerFactory = Substitute.For<IMinerManagerFactory>();
            _serverFactory = Substitute.For<IServerFactory>();
            _serviceFactory = Substitute.For<IServiceFactory>();
            _storageManagerFactory = Substitute.For<IStorageFactory>();
            _globalConfigFactory = Substitute.For<IGlobalConfigFactory>();

            _daemonClient = Substitute.For<IDaemonClient>();
            _minerManager = Substitute.For<IMinerManager>();
            _jobManager = Substitute.For<IJobManager>();
            _jobTracker = Substitute.For<IJobTracker>();
            _shareManager = Substitute.For<IShareManager>();
            _miningServer = Substitute.For<IMiningServer>();
            _rpcService = Substitute.For<IRpcService>();
            _storage = Substitute.For<IStorage>();
        }
Esempio n. 32
0
 public GetworkServer(IPoolConfig poolConfig, IPool pool, IMinerManager minerManager, IJobManager jobManager)
 {
     _pool = pool;
     _minerManager = minerManager;
     _logger = Log.ForContext<GetworkServer>().ForContext("Component", poolConfig.Coin.Name);
 }
Esempio n. 33
0
        public IPerPool GetPerPoolStats(IPoolConfig poolConfig, IDaemonClient daemonClient, IMinerManager minerManager, IHashAlgorithm hashAlgorithm, IBlocks blockStatistics, IStorage storage)
        {
            var @params = new NamedParameterOverloads
            {
                {"poolConfig", poolConfig},
                {"daemonClient", daemonClient},
                {"minerManager",minerManager},
                {"hashAlgorithm", hashAlgorithm},
                {"blockStatistics", blockStatistics},
                {"storage", storage},
            };

            return _applicationContext.Container.Resolve<IPerPool>(@params);
        }