Timelock и veto: тормоза, которые спасают казну от переворота

DAO со ста миллионами в казне проводит голосование в три часа ночи. Предложение, зарытое в плотный код, тихо переписывает, кто управляет средствами. Оно проходит — потому что большинство спало, а те, кто голосовал, читали не байткод, а дружелюбную сводку. Если транзакция исполняется в тот же миг, как закрылось голосование, деньги исчезают прежде, чем кто-то проснётся. Ни апелляции. Ни отката. Финальность, обращённая в оружие.

Теперь добавь одну вещь. Timelock: прошедшее предложение не может исполниться, скажем, 48 часов. То же голосование, тот же результат — но теперь есть зазор между решено и сделано. В этом зазоре каждый может прочитать, что на самом деле прошло. И если это ограбление — можно действовать: поднять тревогу, скоординироваться, а в хорошо построенных системах — вывести свои средства прежде, чем злонамеренный код вообще выстрелит.

Этот зазор — разница между DAO и налётом «разбей и хватай». Timelock — самая недооценённая линия обороны в децентрализованном управлении. И это, буквально, тормоз.

Почему «мгновенное исполнение» — ловушка

Крипта продаёт скорость и финальность как чистые добродетели. В платеже — да. В управлении безусловная скорость — заряженное ружьё, наведённое на казну.

Вся поверхность атаки DAO вот в чём: превратить голос в необратимое действие. Атакующему на управление не нужно ломать код — код работает ровно как написан. Ему нужно выиграть одно голосование, единожды, и чтобы оно исполнилось прежде, чем кто-то среагирует. Занять гору токенов управления на один блок (флеш-лоан-атака), протолкнуть злонамеренное предложение, провести его занятым весом, осушить казну, вернуть заём — всё прежде, чем остынет кофе честных участников. Это случалось. Реальные DAO, реальные миллионы, исчезли за один блок.

Мгновенное исполнение — вот что делает это возможным. Убери зазор — и убьёшь всю комбинацию. Атакующий всё ещё может выиграть голос — но выиграть голос больше не значит выиграть деньги, потому что теперь есть период ожидания, в котором кража видна, а честное большинство может отреагировать.

Что timelock делает на самом деле

Timelock прост до мёртвости — потому он и прекрасен. Когда предложение проходит, оно не исполняется — оно попадает в очередь с обязательной задержкой. Двое суток, трое, неделя: DAO выбирает сам. Только после задержки кто-либо может запустить исполнение.

Задержка покупает три вещи, которые не купить никак иначе:

Видимость. Точная транзакция — не сводка, а реальное он-чейн-действие — стоит на публичном виду всю задержку. Любой может осмотреть поставленный в очередь вызов и увидеть, что он делает на деле. Дружелюбный заголовок гласил «оптимизация казны». Байткод в очереди гласит «отправить всё на 0xATTACKER». Timelock — вот что даёт тебе время заметить зазор между ними.

Выход. В хорошо спроектированной системе участники, возражающие против прошедшего предложения, могут уйти до его исполнения — забрать свою долю, «rage-quit», выйти со средствами в целости. DAO в стиле Moloch впервые сделали именно это: ты не можешь остановить большинство, но можешь отказаться быть им ограбленным. Timelock — окно, через которое ты бежишь.

Координация. Двух суток хватает, чтобы исследователь безопасности поднял тревогу, чтобы участники проснулись, чтобы организовался законный экстренный ответ. Нуля секунд не хватает ни на что.

Veto: аварийный стоп

Timelock покупает время. Veto использует это время, чтобы реально остановить вред.

Veto — назначенная сила: совет безопасности, мультисиг доверенных подписантов, иногда сами держатели токенов через быстрый контр-голос, — которая может отменить поставленное в очередь предложение внутри окна задержки. Думай о нём как о кнопке аварийного стопа на тяжёлой машине: она не управляет заводом, она лишь глушит линию, когда рука попала в шестерни.

Очевидное возражение: не возвращает ли совет veto босса, центральную точку контроля — ровно то, ради упразднения чего DAO и существуют? Опасение честное, и ответ — в асимметрии силы. Хорошо спроектированное veto умеет только одно — остановить. Оно может отменить злонамеренное предложение. Оно не может провести своё, не может двигать средства, не может ничего инициировать. Это тормоз, а не руль. Тормоз, что может лишь заглушить переворот, — совсем иной зверь, чем рука, что может его начать. И само право veto должно быть под timelock, он-чейн и отзываемо участниками — тормоз, который толпа тоже может осмотреть и, если им злоупотребляют, снять.

Наша запись

Смотри, что эти два механизма на деле. Скорость без паузы — это Исфет в маске эффективности: требование, чтобы деяние следовало за словом так быстро, что между ними не успеет случиться взвешивание. Ровно так паразит и предпочитает работать: в мгновении, в блоке, который ты не прочитал, в «оно уже исполнилось».

Timelock восстанавливает интервал, в котором взвешивание возможно. Это чаша Весов, удержанная в равновесии достаточно долго, чтобы сердце измерить против пера. В древнем обряде душу не осуждали в тот же миг, как она заговорила, — деяние взвешивали, обдуманно, на свету, прежде чем падал приговор. Задержка — не трение. Задержка — это взвешивание. А veto — рука Маат, что не даёт ложной мере стать судьбой. Вместе они держат древнейший закон порядка: ничто необратимое не должно случаться быстрее, чем истину можно увидеть.

Честная трудная часть

У тормозов есть цена, и притворяться иначе — способ дать себя отговорить.

Timelock делает DAO медленнее. Подлинные ЧП — реальный баг, требующий срочной правки, — тоже вынуждены выждать задержку, если только ты не построил отдельный быстрый путь для настоящих экстренных случаев, который сам становится поверхностью атаки. И veto надёжно ровно настолько, насколько надёжны руки, что его держат. Захватываемый совет — переворот, ждущий других рук; если подписанты veto сговорятся, тормоз становится замком, а участники — пленниками своих же стражей. Нет механизма настолько чистого, чтобы за ним не надо было следить. Суть не в волшебном рубильнике — суть в обдуманной расстановке сил, где каждая видима, ограничена и снимаема.

Рычаг

Ты не строишь это сам. Но ты выбираешь, каким системам доверить свои деньги, — и теперь точно знаешь, что искать.

Прежде чем положить монету в казну любого DAO или протокола, задай три вопроса. Есть ли timelock на исполнение решений и насколько длинный? Отсутствие задержки — красный флаг размером с билборд. Кто может наложить veto и умеет ли только останавливать — никогда инициировать? Совет, что может ещё и действовать, — босс под прикрытием. Могу ли я выйти во время задержки, если голос обернулся плохо? Если ответ «нет» — ты не участник, ты заложник.

Казна без тормозов — в одном плохом голосовании от пустоты. Казна с timelock и veto-только-на-стоп переживёт угнанное голосование и доживёт до починки. Этот зазор между решено и сделано — место, где сообщество остаётся сообществом.

Береги интервал. Ничего необратимого быстрее, чем истину можно увидеть.