/// <summary> /// Initializes a new instance of the <see cref="ShareManager" /> class. /// </summary> /// <param name="pool"></param> /// <param name="daemonClient"></param> /// <param name="jobTracker"></param> /// <param name="storage"></param> public ShareManager(string pool, IDaemonClient daemonClient, IJobTracker jobTracker, IStorage storage) { _daemonClient = daemonClient; _jobTracker = jobTracker; _storage = storage; _logger = Log.ForContext<ShareManager>().ForContext("Component", pool); }
/** * The process of starting a job has 2 phases * In the first phase the tracker gets all metadada and code to be used needed for job execution * In the second phase the job is submitted * */ public bool newJob(string trackerUrl, string inputFilePath, string outputDir, int numOfSplits, string mapClass, string mapDll) { IJobTracker tracker = (IJobTracker)Activator.GetObject(typeof(IJobTracker), trackerUrl); try { if (!outputDir.EndsWith("\\")) { outputDir += "\\"; } this.openFile(inputFilePath); int id = tracker.sendMeta(Client.addr, inputFilePath, this.fileLinesCount(inputFilePath), mapClass, File.ReadAllBytes(mapDll)); this.outputs[inputFilePath] = outputDir; tracker.submitJob(id, numOfSplits); this.closeFile(inputFilePath); Console.WriteLine("<Job ended>"); return(true); } catch (SocketException) { return(false); } }
public DsgRollBackPublishedFundingVersionUndoTask(IPublishedFundingUndoCosmosRepository cosmos, IPublishedFundingUndoBlobStoreRepository blobStore, IProducerConsumerFactory producerConsumerFactory, ILogger logger, IJobTracker jobTracker) : base(cosmos, blobStore, producerConsumerFactory, logger, jobTracker) { }
/// <summary> /// Defines the method to be called when the command is invoked. /// </summary> /// <param name="parameter">Data used by the command. If the command /// does not require data to be passed, this object can be set to /// null.</param> public override void Execute(object parameter) { IJobTracker jobs = Container.Resolve <IJobTracker>(); IQueueDialog dialog = Container.Resolve <IQueueDialog>(); dialog.ShowDialog(jobs); }
public SoftDeletePublishedProviderVersionsUndoTask(IPublishedFundingUndoCosmosRepository cosmos, IPublishedFundingUndoBlobStoreRepository blobStore, IProducerConsumerFactory producerConsumerFactory, ILogger logger, IJobTracker jobTracker) : base(cosmos, blobStore, producerConsumerFactory, logger, jobTracker) { }
public PublishedFundingUndoContextInitialisationTask(IPublishedFundingUndoCosmosRepository cosmos, IPublishedFundingUndoBlobStoreRepository blobStore, IProducerConsumerFactory producerConsumerFactory, ILogger logger, IJobTracker jobTracker) : base(cosmos, blobStore, producerConsumerFactory, logger, jobTracker) { }
/// <summary> /// Initializes a new instance of the <see cref="ShareManager" /> class. /// </summary> /// <param name="poolConfig"></param> /// <param name="daemonClient"></param> /// <param name="jobTracker"></param> /// <param name="storageLayer"></param> /// <param name="blockProcessor"></param> public ShareManager(IPoolConfig poolConfig, IDaemonClient daemonClient, IJobTracker jobTracker, IStorageLayer storageLayer, IBlockProcessor blockProcessor) { _poolConfig = poolConfig; _daemonClient = daemonClient; _jobTracker = jobTracker; _storageLayer = storageLayer; _blockProcessor = blockProcessor; _logger = Log.ForContext <ShareManager>().ForContext("Component", poolConfig.Coin.Name); }
public void ShowDialog(IJobTracker jobs) { QueueWindow w = new QueueWindow(); QueueViewModel vm = new QueueViewModel(jobs); w.DataContext = vm; w.ShowInTaskbar = true; w.ShowDialog(); }
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(); }
/// <summary> /// Initializes a new instance of the <see cref="ShareManager" /> class. /// </summary> /// <param name="poolConfig"></param> /// <param name="daemonClient"></param> /// <param name="jobTracker"></param> /// <param name="storageLayer"></param> public ShareManager(IPoolConfig poolConfig, IDaemonClient daemonClient, IJobTracker jobTracker, IStorageLayer storageLayer) { _poolConfig = poolConfig; _daemonClient = daemonClient; _jobTracker = jobTracker; _storageLayer = storageLayer; _logger = Log.ForContext <ShareManager>().ForContext("Component", poolConfig.Coin.Name); FindPoolAccount(); }
/// <summary> /// Initializes a new instance of the <see cref="ShareManager" /> class. /// </summary> /// <param name="poolConfig"></param> /// <param name="daemonClient"></param> /// <param name="jobTracker"></param> /// <param name="storageLayer"></param> public ShareManager(IPoolConfig poolConfig, IDaemonClient daemonClient, IJobTracker jobTracker, IStorageLayer storageLayer) { _poolConfig = poolConfig; _daemonClient = daemonClient; _jobTracker = jobTracker; _storageLayer = storageLayer; _logger = Log.ForContext<ShareManager>().ForContext("Component", poolConfig.Coin.Name); FindPoolAccount(); }
/* * Creates a job using a JobMeta struct, needed if this worker will act as an auxiliary job tracker */ public Job(string masterUrl, JobMeta meta, int filelines, int trackerId, int trackerCount) { this.id = meta.jobId; this.fileLines = filelines; this.meta = meta; this.trackerCount = trackerCount; this.trackerId = trackerId; this.runningTrackersCount = 1; //if secondary I am the only one this.master = (IJobTracker)Activator.GetObject(typeof(IJobTracker), masterUrl); }
public PublishedProviderUndoTask(IPublishedFundingUndoCosmosRepository cosmos, IPublishedFundingUndoBlobStoreRepository blobStore, IProducerConsumerFactory producerConsumerFactory, ILogger logger, IJobTracker jobTracker, bool isHardDelete) : base(cosmos, blobStore, producerConsumerFactory, logger, jobTracker) { IsHardDelete = isHardDelete; }
/* * This constructor is used by the main job tracker */ public Job(string client, string filename, int fileLines, string map, byte[] code) { this.id = new Random().Next(); this.fileLines = fileLines; this.meta = new JobMeta(this.id, client, filename, map, code); this.trackerCount = JOB_TRACKER_FACTOR; this.trackerId = 1; this.runningTrackersCount = JOB_TRACKER_FACTOR; this.master = null; }
/// <summary> /// Gets the specified daemon client. /// </summary> /// <param name="jobTracker">The job manager.</param> /// <param name="daemonClient"></param> /// <param name="storage"></param> /// <returns></returns> public IShareManager Get(IDaemonClient daemonClient, IJobTracker jobTracker, IStorage storage) { var @params = new NamedParameterOverloads { {"daemonClient", daemonClient}, {"jobTracker", jobTracker}, {"storage", storage} }; return _applicationContext.Container.Resolve<IShareManager>(@params); }
/// <summary> /// Entry point to the threaded execute functionality /// </summary> private void _execute() { IProcessingService service = Container.Resolve <IProcessingService>(); ObjectJobDefinition d = new ObjectJobDefinition(_source.Pipeline, _filesToInputs()); JobRequest r = new JobRequest(d); r.Identifier = _source.Identifier; IJobTicket t = service.JobManager.EnqueueJob(r); IJobTracker tracker = Container.Resolve <IJobTracker>(); tracker.Add(t, _source.Handler); }
public void mainThread() { List <KeyValuePair <String, String> > taskOutputs = new List <KeyValuePair <String, String> >(); IClient client = null; while (true) { while (true) { Task?task = this.getTask(); if (task == null) { break; } this.statusWorking(task.Value); JobMeta meta = metas[task.Value.jobId]; client = ((IClient)Activator.GetObject(typeof(IClient), meta.clientAddr)); String[] splits = client.getSplit(meta.filename, task.Value.lower, task.Value.higher); if (splits == null) { break; } Map map = myMaps[meta.map]; foreach (String s in splits) { taskOutputs.AddRange(map.map(s)); } workerMre.WaitOne(); Console.WriteLine("Did: " + task.Value.id + "; Tracker: " + task.Value.trackerUrl); client.storeSplit(meta.filename, taskOutputs, task.Value.id); taskOutputs.Clear(); //This supposes that no tasks were stolen from the worker //If a task is stolen then the counter must go down if (--taskCounter[task.Value.jobId][task.Value.trackerUrl] <= 0) { IJobTracker tracker = (IJobTracker)Activator.GetObject(typeof(WorkRemote), task.Value.trackerUrl); new Thread(() => tracker.finishWorker(task.Value.jobId)).Start(); } } this.statusIdle(); Thread.Sleep(100); //sleep while no jobs in queue } }
public void unfreezec(int id) { IJobTracker t = (IJobTracker)getWorker(id); if (t != null) { new Thread(() => t.unfreezeTracker()).Start(); } else { Console.WriteLine("Tracker not found"); } }
/// <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); }
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); }
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); }
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); }
protected PublishedFundingUndoTaskFactoryBase(IPublishedFundingUndoCosmosRepository cosmos, IPublishedFundingUndoBlobStoreRepository blobStore, IProducerConsumerFactory producerConsumerFactory, ILogger logger, IJobTracker jobTracker) { Guard.ArgumentNotNull(cosmos, nameof(cosmos)); Guard.ArgumentNotNull(blobStore, nameof(blobStore)); Guard.ArgumentNotNull(producerConsumerFactory, nameof(producerConsumerFactory)); Guard.ArgumentNotNull(logger, nameof(logger)); Guard.ArgumentNotNull(jobTracker, nameof(jobTracker)); Cosmos = cosmos; BlobStore = blobStore; ProducerConsumerFactory = producerConsumerFactory; Logger = logger; JobTracker = jobTracker; }
private static PublishedProviderStatusUpdateService CreatePublishedProviderStatusUpdateService( IPublishedProviderVersioningService publishedProviderVersioningService = null, ILogger logger = null, IJobTracker jobTracker = null, IPublishedFundingRepository publishedFundingRepository = null, IPublishedFundingBulkRepository publishedFundingBulkRepository = null) { IConfiguration configuration = Mock.Of <IConfiguration>(); return(new PublishedProviderStatusUpdateService( publishedProviderVersioningService ?? CreateVersioningService().Object, publishedFundingRepository ?? CreatePublishedFundingRepository().Object, jobTracker ?? CreateJobTracker().Object, logger ?? CreateLogger().Object, new PublishedProviderStatusUpdateSettings(), publishedFundingBulkRepository ?? CreatePublishedFundingBulkRepository().Object)); }
/// <summary> /// Initializes a new instance of the <see cref="QueueViewModel"/> /// class. /// </summary> /// <param name="tracker">The <see cref="IJobTracker"/> to /// present within the queue.</param> /// <exception cref="ArgumentNullException">tracker is /// null.</exception> public QueueViewModel(IJobTracker tracker) { if (tracker == null) { throw new ArgumentNullException("tracker"); } CancelCommand = new CancelJobCommand(); _tracker = tracker; _tracker.PropertyChanged += _trackerPropertyChanged; _tracker.Pending.CollectionChanged += _pendingChanged; _tracker.Finished.CollectionChanged += _finishedChanged; Entries = new ObservableCollection <JobViewModel>(); IsPresentingQueued = false; CurrentJob = _tracker.Current; if (PostProcessAction == null) { PostProcessAction = new ComboBoxItem(); PostProcessAction.Content = "Nothing"; } }
public PublishedProviderStatusUpdateService( IPublishedProviderVersioningService publishedProviderVersioningService, IPublishedFundingRepository publishedFundingRepository, IJobTracker jobTracker, ILogger logger, IPublishedProviderStatusUpdateSettings settings, IPublishedFundingBulkRepository publishedFundingBulkRepository) { Guard.ArgumentNotNull(publishedProviderVersioningService, nameof(publishedProviderVersioningService)); Guard.ArgumentNotNull(publishedFundingRepository, nameof(publishedFundingRepository)); Guard.ArgumentNotNull(logger, nameof(logger)); Guard.ArgumentNotNull(jobTracker, nameof(jobTracker)); Guard.ArgumentNotNull(settings, nameof(settings)); Guard.ArgumentNotNull(publishedFundingBulkRepository, nameof(publishedFundingBulkRepository)); _publishedProviderVersioningService = publishedProviderVersioningService; _publishedFundingRepository = publishedFundingRepository; _logger = logger; _settings = settings; _jobTracker = jobTracker; _publishedFundingBulkRepository = publishedFundingBulkRepository; }
/** * Returns a specific amount of random workers from the network * */ private IList <IJobTracker> getRandomNodes(int numOfWorkers) { IList <IJobTracker> randWorkers = new List <IJobTracker>(); IList <IJobTracker> workers = this.getNodes().Cast <IJobTracker>().ToList(); IJobTracker worker = null; while (numOfWorkers > 0) { if (workers.Count == randWorkers.Count) { break; //if the number of workers specified is bigger than the number of workers available, exit the loop } worker = workers[(int)new Random().Next(workers.Count)]; if (randWorkers.Contains(worker)) { continue; } randWorkers.Add(worker); numOfWorkers--; } return(randWorkers); }
public IShareManager GetShareManager(IPoolConfig poolConfig, IDaemonClient daemonClient, IJobTracker jobTracker, IStorageLayer storageLayer) { var @params = new NamedParameterOverloads { { "poolConfig", poolConfig }, { "daemonClient", daemonClient }, { "jobTracker", jobTracker }, { "storageLayer", storageLayer } }; return(_applicationContext.Container.Resolve <IShareManager>(@params)); }
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)); }
public ShareTests() { /* * -- create-generation start -- * rpcData: {"version":2,"previousblockhash":"1c4eb88e47564cb796b5c6648c74bec51d7215ac12fc4168b14827aac74a8062","transactions":[{"data":"010000000332a82e92f522deee69b09e27858ba9b87585f2a4913ef71018df40909032fdc3000000006a473044022019ca05cb880a04f0d842268b7e75ac6d2695fc544df033e3daeb29239251a8970220031f6336767f2ea617347484e1290ec0bdcc71056ea2d3084e75384905250ec50121030dd394118fb66ca288bff71d8ea762678783b005770f7f9ba4128233191e0847ffffffff086747cbd339b21b950774186091653a7b8f5751b00a906ff6f5561b3a6fcee6010000006b4830450221009ae1ba9a216d313cc592fc2c1ef08f1e0e555a32b6c1b305f685ac882d38356b0220243106bbb5bb76dde142e574cba8f30c1e2f7059e8e9161770396fbd2b50420f0121030dd394118fb66ca288bff71d8ea762678783b005770f7f9ba4128233191e0847ffffffffe2f15804b1e41c36c925c6f64f219b2bdb3c9fbff4c97a4f0e8c7f31d7e6f2af000000006b48304502200be8894fdd7f5c19be248a979c08bbf2395f606e038c3e02c0266474c03699ab022100ff5de87086e487410f5d7b68012655ca6d814f0caeb9ca42d9c425a90f68b3030121030dd394118fb66ca288bff71d8ea762678783b005770f7f9ba4128233191e0847ffffffff02a0f01900000000001976a9141c50209a1dfdf53313d237b75e9aeb553ca1dfda88ac00e1f505000000001976a914cbb9a3e7a7c1651b1006f876f08b40be85b274f588ac00000000","hash":"dc3a80ec6c45aa489453b2c4abf6761eb6656d949e26d01793458c166640e5f3","depends":[],"fee":0,"sigops":2}],"coinbaseaux":{"flags":"062f503253482f"},"coinbasevalue":5000000000,"target":"00000048d4f70000000000000000000000000000000000000000000000000000","mintime":1403691059,"mutable":["time","transactions","prevblock"],"noncerange":"00000000ffffffff","sigoplimit":20000,"sizelimit":1000000,"curtime":1403691825,"bits":"1d48d4f7","height":315152} * * -- scriptSigPart data -- * -> height: 315152 serialized: 0310cf04 * -> coinbase: 062f503253482f hex: 062f503253482f * -> date: 1403691824760 final:1403691824 serialized: 0430a3aa53 * -- p1 data -- * txVersion: 1 packed: 01000000 * txInputsCount: 1 varIntBuffer: 01 * txInPrevOutHash: 0 uint256BufferFromHash: 0000000000000000000000000000000000000000000000000000000000000000 * txInPrevOutIndex: 4294967295 packUInt32LE: ffffffff * scriptSigPart1.length: 17 extraNoncePlaceholder.length:8 scriptSigPart2.length:14 all: 39 varIntBuffer: 27 * scriptSigPart1: 0310cf04062f503253482f0430a3aa5308 * p1: 01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff270310cf04062f503253482f0430a3aa5308 * -- generateOutputTransactions -- * block-reward: 5000000000 * recipient-reward: 50000000 packInt64LE: 80f0fa0200000000 * lenght: 25 varIntBuffer: 19 * script: 76a9147d576fbfca48b899dc750167dd2a2a6572fff49588ac * pool-reward: 4950000000 packInt64LE: 80010b2701000000 * lenght: 25 varIntBuffer: 19 * script: 76a914329035234168b8da5af106ceb20560401236849888ac * txOutputBuffers.lenght : 2 varIntBuffer: 02 * -- p2 -- * scriptSigPart2: 0d2f6e6f64655374726174756d2f * txInSequence: 0 packUInt32LE: 00000000 * outputTransactions: 0280010b27010000001976a914329035234168b8da5af106ceb20560401236849888ac80f0fa02000000001976a9147d576fbfca48b899dc750167dd2a2a6572fff49588ac * txLockTime: 0 packUInt32LE: 00000000 * txComment: * p2: 0d2f6e6f64655374726174756d2f000000000280010b27010000001976a914329035234168b8da5af106ceb20560401236849888ac80f0fa02000000001976a9147d576fbfca48b899dc750167dd2a2a6572fff49588ac00000000 * * getJobParams: ["2","c74a8062b14827aa12fc41681d7215ac8c74bec596b5c66447564cb71c4eb88e","01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff270310cf04062f503253482f0430a3aa5308","0d2f6e6f64655374726174756d2f000000000280010b27010000001976a914329035234168b8da5af106ceb20560401236849888ac80f0fa02000000001976a9147d576fbfca48b899dc750167dd2a2a6572fff49588ac00000000",["f3e54066168c459317d0269e946d65b61e76f6abc4b2539448aa456cec803adc"],"00000002","1d48d4f7","53aaa331",true] */ // daemon client _daemonClient = Substitute.For <IDaemonClient>(); _daemonClient.ValidateAddress(Arg.Any <string>()).Returns(new ValidateAddress { IsValid = true }); // block template const string json = "{\"result\":{\"version\":2,\"previousblockhash\":\"1c4eb88e47564cb796b5c6648c74bec51d7215ac12fc4168b14827aac74a8062\",\"transactions\":[{\"data\":\"010000000332a82e92f522deee69b09e27858ba9b87585f2a4913ef71018df40909032fdc3000000006a473044022019ca05cb880a04f0d842268b7e75ac6d2695fc544df033e3daeb29239251a8970220031f6336767f2ea617347484e1290ec0bdcc71056ea2d3084e75384905250ec50121030dd394118fb66ca288bff71d8ea762678783b005770f7f9ba4128233191e0847ffffffff086747cbd339b21b950774186091653a7b8f5751b00a906ff6f5561b3a6fcee6010000006b4830450221009ae1ba9a216d313cc592fc2c1ef08f1e0e555a32b6c1b305f685ac882d38356b0220243106bbb5bb76dde142e574cba8f30c1e2f7059e8e9161770396fbd2b50420f0121030dd394118fb66ca288bff71d8ea762678783b005770f7f9ba4128233191e0847ffffffffe2f15804b1e41c36c925c6f64f219b2bdb3c9fbff4c97a4f0e8c7f31d7e6f2af000000006b48304502200be8894fdd7f5c19be248a979c08bbf2395f606e038c3e02c0266474c03699ab022100ff5de87086e487410f5d7b68012655ca6d814f0caeb9ca42d9c425a90f68b3030121030dd394118fb66ca288bff71d8ea762678783b005770f7f9ba4128233191e0847ffffffff02a0f01900000000001976a9141c50209a1dfdf53313d237b75e9aeb553ca1dfda88ac00e1f505000000001976a914cbb9a3e7a7c1651b1006f876f08b40be85b274f588ac00000000\",\"hash\":\"dc3a80ec6c45aa489453b2c4abf6761eb6656d949e26d01793458c166640e5f3\",\"depends\":[],\"fee\":0,\"sigops\":2}],\"coinbaseaux\":{\"flags\":\"062f503253482f\"},\"coinbasevalue\":5000000000,\"target\":\"00000048d4f70000000000000000000000000000000000000000000000000000\",\"mintime\":1403691059,\"mutable\":[\"time\",\"transactions\",\"prevblock\"],\"noncerange\":\"00000000ffffffff\",\"sigoplimit\":20000,\"sizelimit\":1000000,\"curtime\":1403691825,\"bits\":\"1d48d4f7\",\"height\":315152},\"error\":null,\"id\":1}"; var blockTemplateObject = JsonConvert.DeserializeObject <DaemonResponse <BlockTemplate> >(json); _blockTemplate = blockTemplateObject.Result; // extra nonce _extraNonce = Substitute.For <ExtraNonce>((UInt32)0); // signature script _signatureScript = Substitute.For <SignatureScript>( _blockTemplate.Height, _blockTemplate.CoinBaseAux.Flags, 1403691824760, (byte)_extraNonce.ExtraNoncePlaceholder.Length, "/nodeStratum/"); // outputs _outputs = Substitute.For <Outputs>(_daemonClient); double blockReward = 5000000000; // the amount rewarded by the block. // sample reward recipient var rewardsConfig = Substitute.For <IRewardsConfig>(); var amount = blockReward * 0.01; blockReward -= amount; var rewards = new Dictionary <string, float> { { "mrwhWEDnU6dUtHZJ2oBswTpEdbBHgYiMji", (float)amount } }; rewardsConfig.GetEnumerator().Returns(rewards.GetEnumerator()); foreach (var pair in rewards) { _outputs.AddRecipient(pair.Key, pair.Value); } // sample pool wallet var walletConfig = Substitute.For <IWalletConfig>(); walletConfig.Adress.Returns("mk8JqN1kNWju8o3DXEijiJyn7iqkwktAWq"); _outputs.AddPoolWallet(walletConfig.Adress, blockReward); var metaConfig = Substitute.For <IMetaConfig>(); // generation transaction _generationTransaction = Substitute.For <GenerationTransaction>(_extraNonce, _daemonClient, _blockTemplate, walletConfig, rewardsConfig, metaConfig, false); //_generationTransaction.Inputs.First().SignatureScript = _signatureScript; //_generationTransaction.Outputs = _outputs; _generationTransaction.Create(); // hash algorithm _hashAlgorithm = Substitute.For <Scrypt>(); // the job. _job = new Job(2, _hashAlgorithm, _blockTemplate, _generationTransaction) { CleanJobs = true }; // the job tracker. _jobTracker = Substitute.For <IJobTracker>(); _jobTracker.Get(2).Returns(_job); // the job manager. _jobManager = Substitute.For <IJobManager>(); _jobManager.ExtraNonce.Next().Returns((UInt32)0x58000000); // coin config _miner = Substitute.For <IStratumMiner>(); _miner.ExtraNonce.Returns((UInt32)0x58000000); }
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); }
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); }
private static void StartWorker(IJobTracker workerService, string type) { Console.WriteLine("If the server does not respond wait for a minute..."); workerService.SubscribeWorker(type); }
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); }
public IShareManager GetShareManager(IPoolConfig poolConfig, IDaemonClient daemonClient, IJobTracker jobTracker, IStorageLayer storageLayer) { var @params = new NamedParameterOverloads { {"poolConfig", poolConfig}, {"daemonClient", daemonClient}, {"jobTracker", jobTracker}, {"storageLayer", storageLayer} }; return _applicationContext.Container.Resolve<IShareManager>(@params); }
/// <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>(); }
/// <summary> /// Initializes a new instance of the <see cref="ShareManager" /> class. /// </summary> /// <param name="daemonClient"></param> /// <param name="jobTracker"></param> /// <param name="storage"></param> public ShareManager(IDaemonClient daemonClient, IJobTracker jobTracker, IStorage storage) { _daemonClient = daemonClient; _jobTracker = jobTracker; _storage = storage; }
public ShareTests() { /* -- create-generation start -- rpcData: {"version":2,"previousblockhash":"1c4eb88e47564cb796b5c6648c74bec51d7215ac12fc4168b14827aac74a8062","transactions":[{"data":"010000000332a82e92f522deee69b09e27858ba9b87585f2a4913ef71018df40909032fdc3000000006a473044022019ca05cb880a04f0d842268b7e75ac6d2695fc544df033e3daeb29239251a8970220031f6336767f2ea617347484e1290ec0bdcc71056ea2d3084e75384905250ec50121030dd394118fb66ca288bff71d8ea762678783b005770f7f9ba4128233191e0847ffffffff086747cbd339b21b950774186091653a7b8f5751b00a906ff6f5561b3a6fcee6010000006b4830450221009ae1ba9a216d313cc592fc2c1ef08f1e0e555a32b6c1b305f685ac882d38356b0220243106bbb5bb76dde142e574cba8f30c1e2f7059e8e9161770396fbd2b50420f0121030dd394118fb66ca288bff71d8ea762678783b005770f7f9ba4128233191e0847ffffffffe2f15804b1e41c36c925c6f64f219b2bdb3c9fbff4c97a4f0e8c7f31d7e6f2af000000006b48304502200be8894fdd7f5c19be248a979c08bbf2395f606e038c3e02c0266474c03699ab022100ff5de87086e487410f5d7b68012655ca6d814f0caeb9ca42d9c425a90f68b3030121030dd394118fb66ca288bff71d8ea762678783b005770f7f9ba4128233191e0847ffffffff02a0f01900000000001976a9141c50209a1dfdf53313d237b75e9aeb553ca1dfda88ac00e1f505000000001976a914cbb9a3e7a7c1651b1006f876f08b40be85b274f588ac00000000","hash":"dc3a80ec6c45aa489453b2c4abf6761eb6656d949e26d01793458c166640e5f3","depends":[],"fee":0,"sigops":2}],"coinbaseaux":{"flags":"062f503253482f"},"coinbasevalue":5000000000,"target":"00000048d4f70000000000000000000000000000000000000000000000000000","mintime":1403691059,"mutable":["time","transactions","prevblock"],"noncerange":"00000000ffffffff","sigoplimit":20000,"sizelimit":1000000,"curtime":1403691825,"bits":"1d48d4f7","height":315152} -- scriptSigPart data -- -> height: 315152 serialized: 0310cf04 -> coinbase: 062f503253482f hex: 062f503253482f -> date: 1403691824760 final:1403691824 serialized: 0430a3aa53 -- p1 data -- txVersion: 1 packed: 01000000 txInputsCount: 1 varIntBuffer: 01 txInPrevOutHash: 0 uint256BufferFromHash: 0000000000000000000000000000000000000000000000000000000000000000 txInPrevOutIndex: 4294967295 packUInt32LE: ffffffff scriptSigPart1.length: 17 extraNoncePlaceholder.length:8 scriptSigPart2.length:14 all: 39 varIntBuffer: 27 scriptSigPart1: 0310cf04062f503253482f0430a3aa5308 p1: 01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff270310cf04062f503253482f0430a3aa5308 -- generateOutputTransactions -- block-reward: 5000000000 recipient-reward: 50000000 packInt64LE: 80f0fa0200000000 lenght: 25 varIntBuffer: 19 script: 76a9147d576fbfca48b899dc750167dd2a2a6572fff49588ac pool-reward: 4950000000 packInt64LE: 80010b2701000000 lenght: 25 varIntBuffer: 19 script: 76a914329035234168b8da5af106ceb20560401236849888ac txOutputBuffers.lenght : 2 varIntBuffer: 02 -- p2 -- scriptSigPart2: 0d2f6e6f64655374726174756d2f txInSequence: 0 packUInt32LE: 00000000 outputTransactions: 0280010b27010000001976a914329035234168b8da5af106ceb20560401236849888ac80f0fa02000000001976a9147d576fbfca48b899dc750167dd2a2a6572fff49588ac txLockTime: 0 packUInt32LE: 00000000 txComment: p2: 0d2f6e6f64655374726174756d2f000000000280010b27010000001976a914329035234168b8da5af106ceb20560401236849888ac80f0fa02000000001976a9147d576fbfca48b899dc750167dd2a2a6572fff49588ac00000000 getJobParams: ["2","c74a8062b14827aa12fc41681d7215ac8c74bec596b5c66447564cb71c4eb88e","01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff270310cf04062f503253482f0430a3aa5308","0d2f6e6f64655374726174756d2f000000000280010b27010000001976a914329035234168b8da5af106ceb20560401236849888ac80f0fa02000000001976a9147d576fbfca48b899dc750167dd2a2a6572fff49588ac00000000",["f3e54066168c459317d0269e946d65b61e76f6abc4b2539448aa456cec803adc"],"00000002","1d48d4f7","53aaa331",true] */ // daemon client _daemonClient = Substitute.For<IDaemonClient>(); _daemonClient.ValidateAddress(Arg.Any<string>()).Returns(new ValidateAddress { IsValid = true }); // block template const string json = "{\"result\":{\"version\":1,\"previousblockhash\":\"1c4eb88e47564cb796b5c6648c74bec51d7215ac12fc4168b14827aac74a8062\",\"transactions\":[{\"data\":\"010000000332a82e92f522deee69b09e27858ba9b87585f2a4913ef71018df40909032fdc3000000006a473044022019ca05cb880a04f0d842268b7e75ac6d2695fc544df033e3daeb29239251a8970220031f6336767f2ea617347484e1290ec0bdcc71056ea2d3084e75384905250ec50121030dd394118fb66ca288bff71d8ea762678783b005770f7f9ba4128233191e0847ffffffff086747cbd339b21b950774186091653a7b8f5751b00a906ff6f5561b3a6fcee6010000006b4830450221009ae1ba9a216d313cc592fc2c1ef08f1e0e555a32b6c1b305f685ac882d38356b0220243106bbb5bb76dde142e574cba8f30c1e2f7059e8e9161770396fbd2b50420f0121030dd394118fb66ca288bff71d8ea762678783b005770f7f9ba4128233191e0847ffffffffe2f15804b1e41c36c925c6f64f219b2bdb3c9fbff4c97a4f0e8c7f31d7e6f2af000000006b48304502200be8894fdd7f5c19be248a979c08bbf2395f606e038c3e02c0266474c03699ab022100ff5de87086e487410f5d7b68012655ca6d814f0caeb9ca42d9c425a90f68b3030121030dd394118fb66ca288bff71d8ea762678783b005770f7f9ba4128233191e0847ffffffff02a0f01900000000001976a9141c50209a1dfdf53313d237b75e9aeb553ca1dfda88ac00e1f505000000001976a914cbb9a3e7a7c1651b1006f876f08b40be85b274f588ac00000000\",\"hash\":\"dc3a80ec6c45aa489453b2c4abf6761eb6656d949e26d01793458c166640e5f3\",\"depends\":[],\"fee\":0,\"sigops\":2}],\"coinbaseaux\":{\"flags\":\"062f503253482f\"},\"coinbasevalue\":5000000000,\"target\":\"00000048d4f70000000000000000000000000000000000000000000000000000\",\"mintime\":1403691059,\"mutable\":[\"time\",\"transactions\",\"prevblock\"],\"noncerange\":\"00000000ffffffff\",\"sigoplimit\":20000,\"sizelimit\":1000000,\"curtime\":1403691825,\"bits\":\"1d48d4f7\",\"height\":315152},\"error\":null,\"id\":1}"; var blockTemplateObject = JsonConvert.DeserializeObject<DaemonResponse<BlockTemplate>>(json); _blockTemplate = blockTemplateObject.Result; // extra nonce _extraNonce = Substitute.For<ExtraNonce>((UInt32)0); // signature script _signatureScript = Substitute.For<SignatureScript>( _blockTemplate.Height, _blockTemplate.CoinBaseAux.Flags, 1403691824760, (byte)_extraNonce.ExtraNoncePlaceholder.Length, "/nodeStratum/"); // pool config var poolConfig = Substitute.For<IPoolConfig>(); // create coin config. var coinConfig = Substitute.For<ICoinConfig>(); coinConfig.Options.TxMessageSupported.Returns(false); coinConfig.Options.IsProofOfStakeHybrid.Returns(false); poolConfig.Coin.Returns(coinConfig); // outputs _outputs = Substitute.For<Outputs>(_daemonClient, coinConfig); double blockReward = 5000000000; // the amount rewarded by the block. // create rewards config. var rewardsConfig = Substitute.For<IRewardsConfig>(); poolConfig.Rewards.Returns(rewardsConfig); var amount = blockReward * 0.01; blockReward -= amount; var rewards = new Dictionary<string, float> { { "mrwhWEDnU6dUtHZJ2oBswTpEdbBHgYiMji", (float)amount } }; rewardsConfig.GetEnumerator().Returns(rewards.GetEnumerator()); foreach (var pair in rewards) { _outputs.AddRecipient(pair.Key, pair.Value); } // create wallet config. var walletConfig = Substitute.For<IWalletConfig>(); poolConfig.Wallet.Returns(walletConfig); // create sample pool central wallet output. walletConfig.Adress.Returns("mk8JqN1kNWju8o3DXEijiJyn7iqkwktAWq"); _outputs.AddPoolWallet(walletConfig.Adress, blockReward); // generation transaction _generationTransaction = Substitute.For<GenerationTransaction>(_extraNonce, _daemonClient, _blockTemplate, poolConfig); _generationTransaction.Inputs.First().SignatureScript = _signatureScript; _generationTransaction.Outputs = _outputs; _generationTransaction.Create(); // hash algorithm _hashAlgorithm = new Scrypt(); // the job. _job = new Job(2,_hashAlgorithm, _blockTemplate, _generationTransaction) { CleanJobs = true }; // the job tracker. _jobTracker = Substitute.For<IJobTracker>(); _jobTracker.Get(2).Returns(_job); // the job manager. _jobManager = Substitute.For<IJobManager>(); _jobManager.ExtraNonce.Next().Returns((UInt32)0x58000000); // coin config _miner = Substitute.For<IStratumMiner>(); _miner.ExtraNonce.Returns((UInt32)0x58000000); }