diff --git a/verification/src/chain_verifier.rs b/verification/src/chain_verifier.rs index 4d10f6a7..25fb7bc6 100644 --- a/verification/src/chain_verifier.rs +++ b/verification/src/chain_verifier.rs @@ -130,6 +130,9 @@ impl ChainVerifier { if sequence == 0 { return Ok(sigops); } + // must not be coinbase (sequence = 0 is returned above) + if transaction.is_coinbase() { return Err(TransactionError::MisplacedCoinbase(sequence)); } + if sigops >= MAX_BLOCK_SIGOPS { return Err(TransactionError::Sigops(sigops)); } // strict pay-to-script-hash signature operations count toward block diff --git a/verification/src/lib.rs b/verification/src/lib.rs index 1f74f9b3..5667ca58 100644 --- a/verification/src/lib.rs +++ b/verification/src/lib.rs @@ -77,6 +77,8 @@ pub enum TransactionError { Sigops(usize), /// Too many signature operations once p2sh operations included SigopsP2SH(usize), + /// Coinbase transaction is found at position that is not 0 + MisplacedCoinbase(usize), } #[derive(PartialEq, Debug)]