pub fn is_final_tx(tx: &Transaction, height: u64, block_time: u64) -> boolExpand 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:
- tx.lock_time == 0 (no locktime restriction), OR
- If locktime < LOCKTIME_THRESHOLD (block height): height > tx.lock_time
- If locktime >= LOCKTIME_THRESHOLD (timestamp): block_time > tx.lock_time
- 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:
- tx.lock_time == 0 (no locktime restriction), OR
- If locktime < LOCKTIME_THRESHOLD (block height): height > tx.lock_time
- If locktime >= LOCKTIME_THRESHOLD (timestamp): block_time > tx.lock_time
- 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 checkheight- Current block heightblock_time- Median time-past of chain tip (BIP113) for timestamp locktime validation