public bool Check(IBlockValidationContext context, ref BlockValidationState validationState) { int transactionsCount = context.Block.Transactions !.Length; if ( transactionsCount == 0 || transactionsCount * _consensusParameters.WitnessScaleFactor > _consensusParameters.MaxBlockWeight || GetBlockSize(context.Block) * _consensusParameters.WitnessScaleFactor > _consensusParameters.MaxBlockWeight ) { return(validationState.Invalid(BlockValidationStateResults.Consensus, "bad-blk-length", "size limits failed")); } return(true); }
public bool Check(IBlockValidationContext context, ref BlockValidationState validationState) { Transaction[] transactions = context.Block.Transactions !; for (int i = 0; i < transactions.Length; i++) { if (!PerformCheck(transactions[i], out TransactionValidationState? transactionValidationState)) { // checks performed here are context-free validation checks. The only possible failures are consensus failures. return(validationState.Invalid(BlockValidationStateResults.Consensus, transactionValidationState.RejectReason !, transactionValidationState.DebugMessage !)); } } return(true); }
public bool Check(IBlockValidationContext context, ref BlockValidationState validationState) { if (IsBlockMalleated(context.Block.Transactions !)) { return(validationState.Invalid(BlockValidationStateResults.Mutated, "bad-txns-duplicate", "duplicate transaction")); } UInt256 computedMerkleRoot = _merkleRootCalculator.GetBlockMerkleRoot(context.Block); if (context.Block.Header !.MerkleRoot != computedMerkleRoot) { return(validationState.Invalid(BlockValidationStateResults.Mutated, "bad-txnmrklroot", "hashMerkleRoot mismatch")); } return(true); }
public bool Check(IBlockValidationContext context, ref BlockValidationState validationState) { Protocol.Types.Transaction[] transactions = context.Block.Transactions !; // First transaction must be coinbase, the rest must not be if ((transactions.Length == 0) || !transactions[0].IsCoinBase()) { validationState.Invalid(BlockValidationStateResults.Consensus, "bad-cb-missing", "first tx is not coinbase"); return(false); } for (int i = 1; i < transactions.Length; i++) { if (transactions[i].IsCoinBase()) { validationState.Invalid(BlockValidationStateResults.Consensus, "bad-cb-multiple", "more than one coinbase"); return(false); } } return(true); }