Смарт-контракт по определению неизменяем. Чтобы обойти это ограничение, разработчики разделяют логику и данные: адрес, с которым взаимодействует пользователь, хранит состояние и переадресует вызовы на отдельный контракт с кодом. Заменили адрес кода — обновили протокол, не трогая балансы.
Технический обзор описывает набор используемых схем: прозрачные прокси, UUPS, маячковые и алмазный стандарт разделяют логику и хранилище состояния, позволяя обновляться без миграции данных, а исполнение решений идёт через контракты управления, координацию мультиподписи или оптимистичное голосование. Источник
Что говорит за
- Ошибку можно исправить, не перенося весь протокол на новый адрес и не заставляя пользователей мигрировать вручную.
- Пользователю не нужно ничего мигрировать.
- Развитие продукта не требует перезапуска.
- Интеграции с другими протоколами не ломаются, потому что внешний адрес остаётся прежним и партнёрам не нужно ничего переписывать.
Что говорит против
Тот, кто может обновить логику, может заменить её полностью: аудит проверял один код, а работать завтра будет другой, и никакого уведомления при этом может не быть вовсе.
Разбор уязвимостей отмечает, что в списке OWASP за 2026 год недостатки прокси и обновляемости вынесены в отдельную категорию топ-10, а поводом стала живая кампания: боты следят за появлением свежих неинициализированных прокси и вызывают инициализацию первыми, назначая себя владельцем до того, как это успевает сделать разработчик. Потери по одному случаю оценивались примерно в 1,55 млн долларов, а по всей кампании — более чем в 10 млн. Источник
Что проверять
- Существует ли право на обновление вообще.
- У кого оно есть и через какую процедуру исполняется.
- Заблокирован ли контракт логики от прямой инициализации.
Третий пункт проверяется за минуту и, по моим наблюдениям, проверяется реже всего.
Тот же обзор указывает и на масштаб проблемы в статистике: в списке 2026 года контроль доступа сохранил первое место с историческими потерями около 953,2 млн долларов, а логические ошибки бизнес-уровня поднялись на вторую позицию. Источник
Вывод
Прокси решает реальную задачу и создаёт реальный риск. Оценивать нужно не факт обновляемости, а процедуру: кто принимает решение, сколько подписей требуется и есть ли задержка перед исполнением. Механику задержки разбирал в отдельном материале, аудиты — здесь.
Частые вопросы
Как узнать, что контракт обновляемый?
По наличию адреса реализации в стандартном слоте хранилища, который виден в обозревателе. У неизменяемых контрактов такого слота нет.
Что такое незакрытая инициализация?
Ситуация, когда контракт логики можно инициализировать напрямую и назначить себя владельцем. Защита занимает одну строку кода, но её регулярно забывают.
Всегда ли неизменяемый контракт безопаснее?
Не всегда: найденную в нём ошибку исправить невозможно. Выбор зависит от сложности логики и от того, насколько долго она уже работает без инцидентов.
Обсуждение
Добавить комментарий