
Тайм-локи: монеты, которые нельзя переместить до определённого момента
Большая часть безопасности в криптовалютах связана с тем, кто может тратить средства: какие ключи, сколько подписей. Тайм-локи добавляют второе измерение — когда. Монету с тайм-локом нельзя потратить раньше заданной даты или высоты блока, независимо от того, у кого находятся ключи.
Звучит как узкоспециальная функция, но тайм-локи незаметно лежат в основе многого в криптомире: платёжных каналов, графиков вестинга, планов наследования и задержек в управлении (governance). Понимание тайм-локов также объясняет одно проектное решение, которое вы встретите в большинстве кошельков.
Два вида времени
Блокчейны измеряют время двумя способами, и тайм-локи используют оба:
- Абсолютное время. «Не раньше 1 января 2030 года» или «не раньше блока 1 000 000». Монета заблокирована до этого момента, а затем ведёт себя как обычно.
- Относительное время. «Не раньше чем через 1000 блоков после получения этой монеты». Отсчёт начинается в момент создания монеты, поэтому у каждого поступления свой обратный отсчёт.
Абсолютные блокировки подходят для фиксированных дат, например для начального периода (клиффа) вестинга. Относительные подходят для правил вроде «если в течение 30 дней никто другой не предпримет действий, тратить может вот этот другой ключ» — такая схема встречается в решениях для восстановления доступа и наследования.
Как это устроено в Bitcoin
В Bitcoin тайм-локи существуют на двух уровнях:
- Уровень транзакции. У каждой транзакции есть поле
nLockTime. Если в нём указано будущее время или блок, сеть не примет транзакцию до этого момента. Это блокирует транзакцию, а не монету: владелец ключей по-прежнему может подписать другую транзакцию без блокировки. - Уровень скрипта. Два опкода,
OP_CHECKLOCKTIMEVERIFY(абсолютный) иOP_CHECKSEQUENCEVERIFY(относительный), позволяют собственным правилам расходования адреса требовать, чтобы прошло определённое время. Они блокируют монету: ни одна транзакция не сможет потратить её досрочно, кто бы её ни подписал.
Именно версии на уровне скрипта по-настоящему мощные. Они позволяют создавать адреса с несколькими путями расходования, например «2 из этих 3 ключей в любое время или вот этот единственный резервный ключ через год».
Как это устроено в сетях со смарт-контрактами
В Ethereum и похожих сетях тайм-лок — это просто логика контракта: контракт сравнивает время текущего блока с сохранённым сроком и отказывается действовать раньше него. Это делает тайм-локи гибкими: контракты вестинга, которые ежемесячно разблокируют токены; системы управления, которые обязывают выждать паузу между принятием решения голосованием и его исполнением; обновляемые контракты, которые объявляют об изменениях за несколько дней, чтобы пользователи успели отреагировать.
Последний вариант важен для безопасности. Задержка между «ключ администратора что-то решил» и «это произошло» даёт всем время заметить вредоносное изменение — это один из вопросов, которые стоит задать о правах на обновление любого контракта.
Для чего нужны тайм-локи
- Наследование и экстренный доступ. Резервный путь, который открывается только после долгого периода бездействия, позволяет наследникам восстановить средства, но не даёт им прикоснуться к ним, пока вы активны. Планирование наследования часто сводится именно к такому правилу.
- Ключи восстановления. Ключ восстановления, который может действовать в одиночку, но только после задержки, гораздо менее опасен в случае кражи: у владельца есть время первым переместить средства.
- Платёжные каналы. Lightning Network опирается на относительные тайм-локи, чтобы дать каждой стороне окно для оспаривания попытки мошенничества.
- Вестинг и обязательства. Блокировка токенов до определённой даты делает обещание исполняемым самой сетью, а не на доверии.
Компромиссы
Тайм-локи не даются бесплатно:
- Они блокируют и вас. Блокировка не отличит злоумышленника от экстренной ситуации. Если деньги понадобятся раньше срока, они так и останутся заблокированными.
- Сложность имеет цену. Скрипты с несколькими путями труднее создавать, проверять и восстанавливать. Ошибка в скрипте с тайм-локом может сделать средства непотратимыми — и обнаружиться лишь годы спустя, когда блокировка истечёт.
- Относительные блокировки требуют обслуживания. Схемы вида «после года бездействия» обычно требуют, чтобы владелец периодически обновлял свои монеты и тем самым перезапускал отсчёт.
- Поддержка в кошельках неравномерна. Адрес с тайм-локом полезен лишь тогда, когда программа, с помощью которой вы в итоге будете восстанавливать доступ, его понимает.
Тайм-локи и SSP
Сегодня хранилища SSP — это чистый мультисиг: набор ключей M из N без каких-либо условий расходования, основанных на времени. Ваше хранилище 2 из 2 можно потратить в любой момент, когда оба ключа согласны, и никогда иначе. Это осознанный компромисс: простой скрипт легко проверить, легко восстановить стандартными инструментами, и в нём нет часов, которые могут преподнести вам сюрприз через несколько лет.
Восстановление в SSP работает через ваши ключи и их резервные копии, а не через пути с временной задержкой. Сравнение разных конфигураций мультисига разбирает варианты, важные для большинства людей, а для команд хранилища SSP Enterprise позволяют выбрать, сколько подписантов должны дать одобрение.
Честный итог
Тайм-локи позволяют сети обеспечивать соблюдение того, когда монеты могут перемещаться, а не только того, кто может их перемещать. Они делают возможными планы наследования, ключи восстановления и платёжные каналы, не требуя доверять кому-то, что он подождёт.
Вместе с тем они добавляют сложности и могут отрезать владельцев от средств так же надёжно, как и злоумышленников. При аккуратном использовании это один из самых полезных инструментов в криптомире — и самые простые скрипты по-прежнему зачастую оказываются самыми безопасными.


