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