public async Task ExtractConsensusExtraData_Test()
        {
            var chain = await _blockchainService.GetChainAsync();

            var height = chain.BestChainHeight;
            var hash   = chain.BestChainHash;

            var header = new BlockHeader
            {
                PreviousBlockHash = hash,
                Height            = height,
                SignerPubkey      = ByteString.CopyFromUtf8("fake-pubkey")
            };
            var result = _consensusExtraDataExtractor.ExtractConsensusExtraData(header);

            result.ShouldBeNull();

            header.SignerPubkey = ByteString.CopyFromUtf8("real-pubkey");
            result = _consensusExtraDataExtractor.ExtractConsensusExtraData(header);
            result.ShouldNotBeNull();
        }
Esempio n. 2
0
        public async Task <bool> ValidateBeforeAttachAsync(IBlock block)
        {
            if (block.Header.Height == Constants.GenesisBlockHeight)
            {
                return(true);
            }

            if (block.Header.ExtraData.Count == 0)
            {
                Logger.LogWarning($"Block header extra data is empty {block}");
                return(false);
            }

            var consensusExtraData = _consensusExtraDataExtractor.ExtractConsensusExtraData(block.Header);

            if (consensusExtraData == null || consensusExtraData.IsEmpty)
            {
                Logger.LogWarning($"Invalid consensus extra data {block}");
                return(false);
            }

            return(await ValidateTransactionCount(block));
        }