Timelock охоплює nLockTime, OP_CHECKLOCKTIMEVERIFY (CLTV/BIP65), відносну nSequence за BIP68 та OP_CHECKSEQUENCEVERIFY (CSV/BIP112). Поля транзакції задають часові умови чинності; Script може вимагати їх налаштування. Часові варіанти використовують Median Time Past (MTP), а не годинник гаманця. Виконання блокування не гарантує прийняття чи підтвердження.
nLockTime і CLTV утворюють абсолютну пару, BIP68 і CSV — відносну. nLockTime обмежує конкретну транзакцію цілком; сам по собі він не блокує UTXO від іншої транзакції з іншими налаштуваннями. CLTV або CSV у виконуваній гілці скрипту вимагають відповідних полів транзакції витрачання. Інша дозволена гілка може мати інші умови. [BIP 65 — OP_CHECKLOCKTIMEVERIFY] [BIP 68 — Relative lock-time] [BIP 112 — CHECKSEQUENCEVERIFY]
nLockTime — беззнакове 32-бітове поле; нуль вимикає абсолютну часову умову. Якщо всі входи мають SEQUENCE_FINAL зі значенням 0xffffffff, невиконаний nLockTime ігнорується. Для дієвого абсолютного блокування принаймні один вхід повинен мати іншу nSequence. Оцінюється саме ця транзакція, а не постійне заморожування її входів. [Bitcoin Core v31.0 — Transaction finality] [Bitcoin Core v31.0 — Sequence constants]
LOCKTIME_THRESHOLD дорівнює 500000000. Менший nLockTime означає висоту блоку, рівний або більший — Unix timestamp. За ввімкненої абсолютної перевірки nLockTime має бути строго меншим за висоту кандидатного блоку або відповідний MTP. Рівності недостатньо; це не сума, середня висота чи дата активації протоколу. [Bitcoin Core v31.0 — Transaction finality] [Bitcoin Core v31.0 — Locktime threshold]
BIP113 використовує MTP попереднього блоку для часової фінальності: медіану часових міток останніх 11 блоків, включно з цим блоком. Це не середнє арифметичне, поточний час користувача чи мітка кандидатного блоку. Bitcoin Core використовує GetMedianTimePast; настання календарної дати саме по собі не гарантує виконання блокування. [BIP 113 — Median time-past]
OP_CHECKLOCKTIMEVERIFY вимагає невід’ємного операнда, такого самого типу висота/час, як nLockTime, і значення не більшого за nLockTime. Відповідний вхід витрачання не може мати nSequence 0xffffffff. Opcode не читає годинник або висоту ланцюга безпосередньо; налаштування транзакції перевіряються окремо під час оцінки її часової чинності. Решта умов Script залишаються обов’язковими. [BIP 65 — OP_CHECKLOCKTIMEVERIFY] [Bitcoin Core v31.0 — Script interpreter]
Для транзакцій версії 2 або вище BIP68 вмикає відносну умову для входів без установленого біта 31. Нижні 16 бітів задають затримку; біт 22 обирає одиниці по 512 секунд, інакше використовуються блоки. Блокова затримка рахується від висоти підтвердження виходу, що витрачається. Часова — від MTP блоку перед його підтвердженням до MTP перед кандидатним блоком. Це не час від створення транзакції в гаманці. [BIP 68 — Relative lock-time] [Bitcoin Core v31.0 — Transaction finality]
OP_CHECKSEQUENCEVERIFY з активним невід’ємним операндом вимагає версії щонайменше 2, невстановленого disable flag входу, однакового типу затримки та достатньої маскованої nSequence. Фактичний вік окремо перевіряє BIP68. CSV дозволяє відкладену гілку відновлення. У виході Lightning to_local затримка to_self_delay обмежує власника commitment transaction; інша сторона з правильним ключем відкликання може використати штрафну гілку без цієї затримки. [BIP 112 — CHECKSEQUENCEVERIFY] [BOLT 3 — Commitment transaction outputs]
Біт 31 — це SEQUENCE_LOCKTIME_DISABLE_FLAG; він вимикає відносну інтерпретацію BIP68 лише для цього входу. Значення 0xfffffffe містить його, але не є SEQUENCE_FINAL: воно дозволяє дієві nLockTime і CLTV. Значення 0xffffffff є final. Невід’ємний операнд CSV з установленим disable flag поводиться як NOP; натомість такий flag у вході не задовольняє активну вимогу CSV. Ці два випадки не можна плутати. [BIP 112 — CHECKSEQUENCEVERIFY] [Bitcoin Core v31.0 — Sequence constants]
Часове блокування задає умову допустимості, а не розклад надсилання. Гаманець має зберегти чи створити транзакцію, надати підписи та інші дані, виконати всі умови й забезпечити комісію та поширення. Місцева політика й вибір майнера додатково впливають на підтвердження. Реорганізація може змінити висоту підтвердження входу та його відносний вік; минулий час не гарантує незворотності результату. [BIP 68 — Relative lock-time] [Bitcoin Core v31.0 — Transaction finality]
RPC decoderawtransaction у Core 31 показує version, locktime та sequence кожного входу. Для CLTV/CSV перевір фактично використаний Script і вихід, що витрачається; саме декодування не доводить чинності. RPC testmempoolaccept перевіряє підписаного кандидата щодо поточного ланцюга та місцевих перевірок консенсусу й політики, без прийняття до mempool і без трансляції. Перевір allowed і причину відмови; успіх не обіцяє майбутнього підтвердження. [Bitcoin Core 31.0 — decoderawtransaction RPC] [Bitcoin Core 31.0 — testmempoolaccept RPC] [Bitcoin Core v31.0 — Mempool RPC implementation]
Для повної картини прочитайте також CHECKLOCKTIMEVERIFY, CHECKSEQUENCEVERIFY, Lightning Network, Payment Channel, Транзакція, Bitcoin Script. На цю статтю також посилаються Підтвердження, Bitcoin Script, HTLC, CHECKLOCKTIMEVERIFY.