Skip to main content

is_final_tx

Function is_final_tx 

Source
pub fn is_final_tx(tx: &Transaction, height: u64, block_time: u64) -> bool
Expand description

Spec-locked to Orange Paper Section 9.1: IsFinalTx

Function ‘IsFinalTx’ referenced but not yet in spec section 9.1 (Migration mode). Available: AcceptToMemoryPool, Finality Check if transaction is final (Orange Paper Section 9.1 - Transaction Finality)

IsFinalTx — locktime/sequence validation (BIP65/68).

A transaction is final if:

  1. tx.lock_time == 0 (no locktime restriction), OR
  2. If locktime < LOCKTIME_THRESHOLD (block height): height > tx.lock_time
  3. If locktime >= LOCKTIME_THRESHOLD (timestamp): block_time > tx.lock_time
  4. OR if all inputs have SEQUENCE_FINAL (0xffffffff), locktime is ignored

Mathematical specification: ∀ tx ∈ Transaction, height ∈ ℕ, block_time ∈ ℕ:

  • is_final_tx(tx, height, block_time) = true ⟹ (tx.lock_time = 0 ∨ (tx.lock_time < LOCKTIME_THRESHOLD ∧ height > tx.lock_time) ∨ (tx.lock_time >= LOCKTIME_THRESHOLD ∧ block_time > tx.lock_time) ∨ (∀ input ∈ tx.inputs: input.sequence == SEQUENCE_FINAL))

Check if transaction is final (Orange Paper Section 9.1 - Transaction Finality)

IsFinalTx — locktime/sequence validation (BIP65/68).

A transaction is final if:

  1. tx.lock_time == 0 (no locktime restriction), OR
  2. If locktime < LOCKTIME_THRESHOLD (block height): height > tx.lock_time
  3. If locktime >= LOCKTIME_THRESHOLD (timestamp): block_time > tx.lock_time
  4. OR if all inputs have SEQUENCE_FINAL (0xffffffff), locktime is ignored

Mathematical specification: ∀ tx ∈ Transaction, height ∈ ℕ, block_time ∈ ℕ:

  • is_final_tx(tx, height, block_time) = true ⟹ (tx.lock_time = 0 ∨ (tx.lock_time < LOCKTIME_THRESHOLD ∧ height > tx.lock_time) ∨ (tx.lock_time >= LOCKTIME_THRESHOLD ∧ block_time > tx.lock_time) ∨ (∀ input ∈ tx.inputs: input.sequence == SEQUENCE_FINAL))

§Arguments

  • tx - Transaction to check
  • height - Current block height
  • block_time - Median time-past of chain tip (BIP113) for timestamp locktime validation