54 / 691TIME

Timelock

Часове блокування

Timelock визначає найраніше дозволене консенсусом включення транзакції до блоку або використання певного шляху витрачання. Абсолютне блокування спирається на висоту чи час ланцюга, відносне — на вік виходу, що витрачається.

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.

DOC · 001BIP 65 — OP_CHECKLOCKTIMEVERIFYСпецифікація ↗DOC · 002BIP 68 — Relative lock-timeСпецифікація ↗DOC · 003BIP 112 — CHECKSEQUENCEVERIFYСпецифікація ↗DOC · 004BIP 113 — Median time-pastСпецифікація ↗DOC · 005Bitcoin Core v31.0 — Transaction finalityДокументація ↗DOC · 006Bitcoin Core v31.0 — Script interpreterДокументація ↗DOC · 007Bitcoin Core v31.0 — Sequence constantsДокументація ↗DOC · 008Bitcoin Core v31.0 — Locktime thresholdДокументація ↗DOC · 009BOLT 3 — Commitment transaction outputsСпецифікація ↗DOC · 010Bitcoin Core 31.0 — decoderawtransaction RPCДокументація ↗DOC · 011Bitcoin Core 31.0 — testmempoolaccept RPCДокументація ↗DOC · 012Bitcoin Core v31.0 — Mempool RPC implementationДокументація ↗
Спочатку джерела · Не інвестиційна порада