Почему смарт-контракты можно обновлять? Что такое прокси-контракты, права администратора и связанные с ними риски?

🔄 Код в блокчейне нельзя изменить — как же тогда обновлять смарт-контракты?
Обычно исходный код контракта не меняют, а разделяют систему на две части:
Прокси-контракт: сохраняет адрес для взаимодействия с пользователями, балансы и данные о состоянии
Контракт реализации: содержит фактическую бизнес-логику

Пользователи всегда взаимодействуют с прокси-контрактом. Прокси выполняет код контракта реализации через delegatecall, но среда выполнения, хранилище и баланс по-прежнему принадлежат прокси. При обновлении администратору достаточно заменить адрес реализации, записанный в прокси, с V1 на V2.

К распространённым шаблонам относятся:
Transparent: механизм обновления и администрирования находится на стороне прокси
UUPS: логика обновления находится в контракте реализации; функцию _authorizeUpgrade необходимо строго ограничить
Beacon: несколько прокси обращаются к одному Beacon; обновление Beacon позволяет одновременно переключить реализации этих прокси

Механизм обновления упрощает исправление уязвимостей и добавление функций, но права на обновление также могут позволить изменить правила комиссий, заморозки, выпуска токенов и переводов. Поэтому важно выяснить:
У кого есть право на обновление (у одного владельца ключа, у мультиподписи, под временной блокировкой или у DAO)
Опубликован ли исходный код новой реализации и прошёл ли он аудит
Совместима ли структура хранения данных (изменение порядка или типов переменных может повредить старые данные)
Можно ли вызвать функцию инициализации только один раз и заблокирован ли контракт реализации
Публикуются ли события обновления и предоставляется ли пользователям время на проверку

⚠️ Возможность обновления не означает, что системе можно доверять безоговорочно. Адрес прокси не меняется, но правила системы на самом деле определяются кодом реализации, на который он указывает в данный момент.

Анонс следующего выпуска|Пятница · Курс по торговым технологиям · Выпуск 006
«Что такое ATR? Как использовать волатильность для установки стоп-лосса вместо фиксированного процента?»