public Span <byte> GetBlockInfo(GetBlockInfoRequest request) { // the request is the same for committed and uncommitted blocks // which is why one needs to look for it among the committed and // uncommitted blocks of the blockchain. if (_store.TryGetCommittedBlock(request.BlockAlias, out var committedBlock)) { return(new GetBlockInfoResponse( ref request.MessageHeader, committedBlock.BlockId, committedBlock.Alias, committedBlock.Parent, committedBlock.BlockHeight, request.Mask, _pool).Span); } _store.TryGetUncommittedBlock(request.BlockAlias, out var uncommittedBlock); return(new GetBlockInfoResponse( ref request.MessageHeader, uncommittedBlock.BlockId, uncommittedBlock.Alias, uncommittedBlock.Parent, uncommittedBlock.BlockHeight, request.Mask, _pool).Span); }
public void RetrieveBlock() { AddValidBlocksWithForkAllUncommitted(); Assert.True(_store.TryGetCommittedBlock(BlockAlias.Genesis, out var genesisBlock)); Assert.True(_store.TryGetCommittedBlock(_1, out var height1Block)); Assert.True(_store.TryGetUncommittedBlock(_2, out var firstBlockU)); Assert.True(_store.TryGetUncommittedBlock(_2_1, out var secondBlockU)); Assert.Equal(CommittedBlockId.Genesis, genesisBlock.BlockId); Assert.Equal(_hash1, height1Block.BlockId); Assert.Equal(_tmpId3, firstBlockU.BlockId); Assert.Equal(_tmpId4, secondBlockU.BlockId); Assert.Equal(_1, firstBlockU.Parent); Assert.Equal(_1, secondBlockU.Parent); Assert.Equal(0, genesisBlock.BlockHeight); Assert.Equal(2, firstBlockU.BlockHeight); Assert.Equal(2, secondBlockU.BlockHeight); var status1 = _store.TryCommitBlock(_2, _hash1, out _); var status2 = _store.TryCommitBlock(_2_1, _hash2, out _); Assert.Equal(CommitBlockStatus.Success, status1); Assert.Equal(CommitBlockStatus.Success, status2); Assert.True(_store.TryGetCommittedBlock(_2, out var firstBlock)); Assert.True(_store.TryGetCommittedBlock(_2_1, out var secondBlock)); Assert.Equal(_hash1, firstBlock.BlockId); Assert.Equal(_hash2, secondBlock.BlockId); Assert.Equal(_1, firstBlock.Parent); Assert.Equal(_1, secondBlock.Parent); Assert.Equal(0, genesisBlock.BlockHeight); Assert.Equal(2, firstBlock.BlockHeight); Assert.Equal(2, secondBlock.BlockHeight); }