Example #1
0
        public void AddBlock(IBlockSnapshot blockSnapshot, string blockRawHex)
        {
            byte[] raw   = HexUtils.HexToBytes(blockRawHex);
            Block  block = Block.Parser.ParseFrom(raw);

            blockSnapshot.AddBlock(block);
            Console.WriteLine("Added BlockHeader: " + block.Header.Index);
        }
Example #2
0
 public BlockRequestManager(IBlockSnapshot blockSnapshot, ulong maxBlock, NodeStorage nodeStorage)
 {
     _nodeStorage   = nodeStorage;
     _blockSnapshot = blockSnapshot;
     _done          = 0;
     _maxBlock      = maxBlock;
     for (ulong i = 1; i <= _maxBlock; i++)
     {
         nextBlocksToDownload.Add(i);
     }
 }
Example #3
0
 public BlockchainSnapshot(
     IBalanceSnapshot balances,
     IContractSnapshot contracts,
     IStorageSnapshot storage,
     ITransactionSnapshot transactions,
     IBlockSnapshot blocks,
     IEventSnapshot events,
     IValidatorSnapshot validators
     )
 {
     Balances     = balances;
     Contracts    = contracts;
     Storage      = storage;
     Transactions = transactions;
     Blocks       = blocks;
     Events       = events;
     Validators   = validators;
 }
Example #4
0
        public void DownloadBlocks(NodeStorage nodeStorage, IBlockSnapshot blockSnapshot)
        {
            _blockRequestManager = new BlockRequestManager(blockSnapshot, Convert.ToUInt64(_blockNumber, 16), nodeStorage);

            while (!_blockRequestManager.Done())
            {
                if (!_peerManager.TryGetPeer(out var peer))
                {
                    Thread.Sleep(100);
                    continue;
                }
                if (!_blockRequestManager.TryGetBatch(out var batch))
                {
                    _peerManager.TryFreePeer(peer);
                    Thread.Sleep(100);
                    continue;
                }
                HandleRequest(peer, batch, 2);
            }
        }