diff --git a/packages/engine/src/errors.cairo b/packages/engine/src/errors.cairo index 22167a8f..c87aec26 100644 --- a/packages/engine/src/errors.cairo +++ b/packages/engine/src/errors.cairo @@ -17,7 +17,6 @@ pub mod Error { pub const UNSATISFIED_LOCKTIME: felt252 = 'Unsatisfied locktime'; pub const SCRIPT_STRICT_MULTISIG: felt252 = 'OP_CHECKMULTISIG invalid dummy'; pub const FINALIZED_TX_CLTV: felt252 = 'Finalized tx in OP_CLTV'; - pub const INVALID_TX_VERSION: felt252 = 'Invalid transaction version'; pub const SCRIPT_INVALID: felt252 = 'Invalid script data'; pub const INVALID_COINBASE: felt252 = 'Invalid coinbase transaction'; pub const SIG_NULLFAIL: felt252 = 'Sig non-zero on failed checksig'; diff --git a/packages/engine/src/opcodes/locktime.cairo b/packages/engine/src/opcodes/locktime.cairo index 7bb810f2..8921df9e 100644 --- a/packages/engine/src/opcodes/locktime.cairo +++ b/packages/engine/src/opcodes/locktime.cairo @@ -118,6 +118,14 @@ pub fn opcode_checksequenceverify< return Result::Ok(()); } + // Prevent trigger OP_CHECKSEQUENCEVERIFY before tx version 2 + let version = EngineTransactionTrait::< + T, I, O, IEngineTransactionInputTrait, IEngineTransactionOutputTrait + >::get_version(engine.transaction); + if version < 2 { + return Result::Err(Error::UNSATISFIED_LOCKTIME); + } + let transaction_input = EngineTransactionTrait::< T, I, O, IEngineTransactionInputTrait, IEngineTransactionOutputTrait >::get_transaction_inputs(engine.transaction) @@ -129,14 +137,6 @@ pub fn opcode_checksequenceverify< return Result::Err(Error::UNSATISFIED_LOCKTIME); } - // Prevent trigger OP_CHECKSEQUENCEVERIFY before tx version 2 - let version = EngineTransactionTrait::< - T, I, O, IEngineTransactionInputTrait, IEngineTransactionOutputTrait - >::get_version(engine.transaction); - if version < 2 { - return Result::Err(Error::INVALID_TX_VERSION); - } - // Mask off non-consensus bits before comparisons let locktime_mask = SEQUENCE_LOCKTIME_IS_SECOND | SEQUENCE_LOCKTIME_MASK; verify_locktime( diff --git a/packages/tests/src/tests/opcodes/test_locktime.cairo b/packages/tests/src/tests/opcodes/test_locktime.cairo index d0de19ed..91f837cf 100644 --- a/packages/tests/src/tests/opcodes/test_locktime.cairo +++ b/packages/tests/src/tests/opcodes/test_locktime.cairo @@ -148,7 +148,6 @@ fn test_opcode_checksequence_as_op_nop_fail() { } #[test] -#[ignore] fn test_opcode_checksequence_tx_version_fail() { let mut program = "OP_DATA_4 0x40000000 OP_CHECKSEQUENCEVERIFY"; // 0x40000000 == 64 in ScriptNum @@ -157,7 +156,7 @@ fn test_opcode_checksequence_tx_version_fail() { // Running with tx v1 let flags: u32 = ScriptFlags::ScriptVerifyCheckSequenceVerify.into(); let mut engine = utils::test_compile_and_run_with_tx_flags_err( - program, tx, flags, Error::INVALID_TX_VERSION + program, tx, flags, Error::UNSATISFIED_LOCKTIME ); utils::check_dstack_size(ref engine, 1); }