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); }
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); } }
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; }
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); } }