Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }