示例#1
0
        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();
                }
            });
        }
示例#2
0
        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}");
            }
        }
示例#3
0
        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();
        }