private void OnNewBlock(object obj) { var block = (Block)obj; if (_blockVerifier.Verify(block)) { SaveBlock(block); _logger.Log($"Got new verified block {block.Body.Id}"); _mappingService.Broadcast(block); if (block.Body.LastBlockId == Info.EndOfLongestChain) { Info.EndOfLongestChain = block.Body.Id; Info.Height++; } else { CalculateLongestChain(); } Info.EditTime = DateTime.UtcNow; SaveLocalInfo(); ClearMemPool(block); _minerService.TryRestartingWorkers(); _eventManager.PassNewTrigger(block, EventTypes.EventType.NewVerifiedBlock); } else { _logger.Log($"Got new shit block {block.Body.Id}"); ClearMemPool(block); } Task.Run(delegate { Task.Delay(2000).Wait(); if (_minerService.MemPool.Count == 0 && Configurations.Config.CM) { _minerService.MemPool.Add(_walletService.AssembleTransaction(_walletService.Address, 1, "getme")); _minerService.TryRestartingWorkers(); } }); }
public void OnNewTransaction(object obj) { var trans = (Transaction)obj; if (Verify(trans)) { _logger.Log($"New transaction {trans.Body.TransactionId}"); if (!_minerService.HasTransactionInMemPool(trans.Body.TransactionId)) { _minerService.MemPool.Add(trans); _minerService.TryRestartingWorkers(); _mappingService.Broadcast(trans); } else { _logger.Log("Already had transaction received", 1); } } else { _logger.Log($"Bad new transaction {trans.Body.TransactionId}"); } }
private void LoadDataInOrder() { _logger.Log("Caught up ! Starting .."); var files = Directory.GetFiles(_catchDataFullPath); foreach (var file in files) { var tokens = file.Split('\\'); var name = tokens[tokens.Length - 1]; _logger.Log("Copied new block from catch : " + name); File.Copy(file, $"{Configurations.CurrentPath}\\BlockChain\\Chain\\{name}"); File.Delete(file); } //process blocks in order var order = bufferedBlockInfos.OrderBy(r => r.Height).ToList(); foreach (var blockInfo in order) { var bb = _blockChainService.LookUpBlock(blockInfo.Id); _eventManager.PassNewTrigger(bb, EventTypes.EventType.NewBlock); } _blockChainService.TryLoadSavedInfo(); _minerService.TryRestartingWorkers(); }