Сегодня разгребал старый кошелёк и отозвал кучу разрешений на токены, о которых я даже не помнил. Одно из них было для DEX, которым я пользовался ровно один раз, больше года назад, для одного свапа. При этом всё это время там всё ещё висело неограниченное разрешение на траты. Это не редкость — почти у каждого в кошельке лежит три-четыре таких призрака.
Так что пока я кликал по revoke.cash из лёгкой паранойи, я задумался о том, насколько странно бинарными бывают права в большинстве DeFi. Либо ты разрешаешь контракт, либо нет. Как только ты его одобряешь, это не «разрешено для одного действия» — обычно это одобрение практически на всё и навсегда, пока ты не вспомнишь, что нужно отменить. А большинство людей не вспоминают.
И вот тогда до меня реально дошло — потери, которые разрушают людей, почти никогда не приходят из какого-то гениального эксплойта. Они происходят из разрешения, которое было слишком широким, висело себе тихо и оставалось активным месяцами после того, как уже никто не помнил, что вы его выдавали. Ошибка не драматичная. Она небольшая. Просто… оставлена открытой.

Из любопытства я вернулся к тому, что Newton Protocol строит дальше, потому что видел $NEWT в треде именно про эту проблему. Отличие не в том, что Newton добавляет больше «театра безопасности» поверх всего, а в том, что разрешения — это вообще не раз и навсегда переключатель «да/нет». Каждая транзакция проверяется по политике в момент её выполнения — лимиты на траты, одобренные получатели, ограничения по мандатам — вместо того чтобы полагаться на какое-то общее одобрение, выданное шесть месяцев назад, о котором вы уже забыли.
Что люди предполагают: если вы доверяете контракту, это доверие должно… просто сохраняться, а отзыв — это ваша задача, о которой нужно помнить. Что на самом деле происходит при такой схеме: «доверие» не висит где-то в виде постоянного одобрения, которое можно потом злоупотребить — оно пересматривается для каждой транзакции. Так что даже если где-то выше по цепочке что-то пойдёт не так, нет одного огромного открытого прохода — есть чекпоинт каждый раз.
Но вот что меня немного беспокоит. Это действительно защищает вас только в том случае, если каждый релевантный транзакционный вызов проходит через проверку политикой. Как только вы взаимодействуете с чем-то вне этого охвата — случайным контрактом, старым одобрением, которое вы выдали ещё до того, как вообще трогали Newton, абсолютно не связанным dApp — вы снова оказываетесь в старой бинарной модели разрешений. Это не исправляет задним числом уже накопившуюся «кашу» в ваших существующих настройках. Я почти забываю об этом, честно: хочется, чтобы это было всеобъемлющим решением, но это не так.
Сначала мне показалось, что это в основном история про улучшенный UX для организаций, кураторов хранилищ и тому подобного. Но чем больше я об этом думал, тем сильнее это ощущалось как история именно о масштабе зоны поражения. Небольшая ошибка — одно неосторожное одобрение, одно слишком широкое разрешение — раньше могла тихо лежать себе в стороне и в итоге стоить вам всего в этом кошельке. Сокращение того, что вообще может сделать одно конкретное разрешение, — это, по сути, вся игра здесь, больше, чем любое громкое «фичер безопасности».
Больше всего это важно для аккаунтов, которые люди не проверяют часто. Кошельки казначейства, «хранилища-автопилоты», всё, что подключено к агенту или боту и принимает решения без того, чтобы кто-то смотрел на это каждый день. То, что месяцами лежит тихо, — это именно то, что потом с пристрастием разбирают, когда наконец что-то всё-таки пойдёт не так.
Так или иначе, я всё ещё разбираюсь со своими старыми одобрениями и, по факту, нашёл ещё два, которые вообще не помню, что выдавал. Учитывая, насколько это обычно, это немного тревожно. Думаю, просто буду следить за тем, как модель политик Newton выдерживает проверку, когда через неё начнут прогонять больше таких старых, более «запутанных» кошельков, а не только свежие.
@NewtonProtocol #Newt