public BlockForValidation ValidateBlockBeforeAppend(IBlock block)
        {
            Logger.Log("[BlockBasicInformationValidationProvider] Validating.\n");

            var blockForValidation = new BlockForValidation(block);

            if (block?.BlockHeader == null || block.BlockBody == null)
            {
                blockForValidation.ValidationMessage = "Null";
                return(blockForValidation);
            }

            var blockHeader = block.BlockHeader;

            if (blockHeader.Height == 0 || blockHeader.PreviousBlockHash == null ||
                blockHeader.MerkleTreeRootHash == null)
            {
                blockForValidation.ValidationMessage = "Incorrect information.";
                return(blockForValidation);
            }

            var blockBody = block.BlockBody;

            if (blockBody.Transactions == null)
            {
                blockForValidation.ValidationMessage = "Transactions is null.";
                return(blockForValidation);
            }

            blockForValidation.Success = true;
            return(blockForValidation);
        }
        public BlockForValidation ValidateBlockBeforeAppend(IBlock block)
        {
            Logger.Log("[BlockTransactionValidationProvider] Validating.\n");

            var blockForValidation = new BlockForValidation(block);

            var txCount = block.BlockHeader.TransactionIds.Count;

            if (txCount == 0)
            {
                blockForValidation.ValidationMessage = "No tx.";
                return(blockForValidation);
            }

            if (block.BlockBody.Transactions.Count != txCount)
            {
                blockForValidation.ValidationMessage = "Tx count not match.";
                return(blockForValidation);
            }

            var txIdsInHeader = block.BlockHeader.TransactionIds.Select(tx => tx.ToHex());
            var txIdsInBody   = block.BlockBody.Transactions.Select(tx => tx.GetTransactionId().ToHex());

            if (txIdsInHeader.Intersect(txIdsInBody).Count() != txCount)
            {
                blockForValidation.ValidationMessage = "Incorrect txs.";
            }

            blockForValidation.Success = true;
            return(blockForValidation);
        }