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.