Перейти к содержимому
buybitcoinsmart

Глоссарий / Транзакции и комиссии

Относительный таймлок

Что такое относительный таймлок?
Относительный таймлок делает вход транзакции недействительным до тех пор, пока потраченный в нем биткоин не наберет заданное число блоков или интервалов по 512 секунд с момента своего подтверждения.

Определено в BIP-68.

BIP-68 придал четырехбайтовому полю последовательности на каждом входе консенсусное значение, но только для транзакций, объявляющих версию 2 или выше. Это правило пришло в сеть через развертывание versionbits по BIP-9 на бите 0, которое открылось 1 мая 2016 года и было выпущено вместе с BIP-112 и BIP-113. Если вы держите биткоины за скриптом восстановления или канала, отсчет начинается заново каждый раз, когда эти биткоины перемещаются.

Как это работает

Относительные таймлоки кодируются в поле последовательности, и старший бит решает, произойдет ли что-либо вообще.

Если бит 31 установлен, поле не несет консенсусного значения и вход может попасть в любой блок. Если бит 31 снят, узлы применяют к полю маску 0x0000ffff и читают оставшиеся 16 бит как период ожидания. Бит 22 выбирает единицу. Если он снят, число считает блоки, и BIP-68 задает диапазон от 0 до 65 535 блоков, который он называет 1,25 года. Если он установлен, число считает периоды по 512 секунд, диапазон, который BIP описывает как менее 33 554 431 секунд, около 1,06 года. Странное число 512 выбрано потому, что блоки приходят примерно каждые 600 секунд, так что обе единицы охватывают похожий промежуток в одних и тех же 16 битах.

Вход со значением n в блоках может быть включен через n блоков после блока, в котором был добыт потраченный выход, поэтому значение 1 снимается уже в следующем блоке, а не через один. Значения во времени никогда не сравниваются с часами. BIP-68 отсчитывает от медианного времени прошлого блока, предшествующего тому, в котором добыт выход, и сравнивает с медианным временем прошлого блока, предшествующего строящемуся блоку, а BIP-113 определяет эту величину как медиану отметок времени последних 11 блоков. Медианы используются вместо необработанных отметок времени потому, что правила консенсуса гарантируют монотонный рост медианы, что мешает майнеру собирать дополнительные комиссии, лгая о времени блока.

Важны два исключения. Правила никогда не применяются к полю последовательности входа транзакции coinbase. И шесть позиций, с 16 по 21, остались неопределенными, чтобы будущий мягкий форк мог повысить гранулярность или потолок без нового поля.

Где это встречается

BIP-112 показывает относительный таймлок на примере контракта эскроу, который истекает через 30 дней после его финансирования.

Alice, Bob и агент эскроу совместно используют скрипт 2-из-3. Любые двое могут потратить в любой момент; после задержки Alice подписывает одна. BIP прямо говорит о триггере: отсчет не начинается, пока не подтвердится платеж на адрес эскроу. В этом все отличие от календарного срока, и поэтому один скрипт обслуживает каждый новый эскроу без переписывания.

Это правило также определяет поведение мемпулов. Проверка блокировки последовательности в Bitcoin Core выполняется по высоте следующего блока, а не текущей вершины, и неподтвержденный родитель считается таким, будто он подтвердится в этом блоке, поэтому трата, ожидание которой истекает со следующим блоком, передается чуть раньше, чем становится доступной для траты. За пределами этого допуска очереди нет: незрелая трата недействительна, а не находится в ожидании.

Относительный таймлок vs OP_CHECKSEQUENCEVERIFY

Относительный таймлок находится на входе транзакции, тогда как OP_CHECKSEQUENCEVERIFY находится в скрипте монеты и проверяет, что тратящий вход соблюдает его.

Сам по себе BIP-68 никого ни к чему не обязывает. Тот, кто строит трату, выбирает значение последовательности, поэтому записанная там задержка является предпочтением, а не правилом, на которое может положиться контрагент. BIP-112 закрывает этот пробел, делая поле читаемым из скрипта: опкод завершается ошибкой, если версия транзакции ниже 2, если у последовательности входа установлен флаг отключения, если два значения расходятся в единице или если число в стеке превышает замаскированную последовательность. Если само значение в стеке несет флаг отключения, опкод ведет себя как NOP, намеренное место для будущего мягкого форка. Только с этими проверками ожидание становится тем, на что может рассчитывать агент эскроу или участник Lightning.

Не путать с

Часто задаваемые вопросы

Относительный таймлок отсчитывается с того дня, когда вы его создаете?

Нет, он отсчитывается с подтверждения потраченного биткоина. BIP-112 прямо говорит об этом в своем примере с эскроу: отсчет не начинается, пока не подтвердится платеж на адрес эскроу.

Почему мой относительный таймлок игнорируется?

Потому что транзакция объявляет версию 1 или потому что установлен бит 31 поля последовательности входа. BIP-68 применяется только начиная с версии 2, а установленный бит отключения лишает поле всякого консенсусного значения.

Измеряется ли относительный таймлок, основанный на времени, по часам?

Не по реальному времени. Блокировки, основанные на времени, сравниваются между двумя значениями медианного времени в прошлом, и BIP-113 определяет эту величину как медиану отметок времени последних 11 блоков, значение, которое правила консенсуса заставляют расти монотонно, чтобы майнер не мог задним числом датировать блок и ускорить созревание транзакции.

Читайте далее

Связанные термины

Еще в разделе «Транзакции и комиссии»

Читать эту страницу на английском