Разбор · факты проверены 25.10.2026

Мониторинг обновляемого прокси-контракта

Обновляемому прокси можно подменить код целиком одной транзакцией. Пользователи доверяли коду за ним, а часть его и аудировала. Тихое обновление заменяет этот код, а злоумышленнику, получившему ключ обновления, баг вообще не нужен.

Мониторинг обновлений отвечает на три вопроса: изменился ли код, кто может его менять и можно ли узнать об изменении до того, как оно вступит в силу.

Адрес

Какой адрес добавить

Добавьте адрес прокси, а не реализации. Прокси хранит состояние и средства и именно он выдаёт события обновления. Адрес реализации меняется при каждом обновлении.

Для верифицированных прокси SmartAlert распознаёт паттерн ERC-1967 и сам предлагает шаблон обновления.

В зависимости от паттерна добавьте ещё один или два адреса:

Transparent proxy
Кто может обновить
Владелец отдельного контракта ProxyAdmin
Что ещё добавить
Контракт ProxyAdmin, чтобы ставить алерт на OwnershipTransferred
UUPS
Кто может обновить
Тот, кто проходит проверку в реализации, обычно владелец или роль
Что ещё добавить
Ничего лишнего: следите за OwnershipTransferred или RoleGranted на самом прокси
Обновление через мультисиг
Кто может обновить
Подписанты Safe
Что ещё добавить
Safe, чтобы ставить алерт на смену владельцев и порога
Обновление через timelock
Кто может обновить
Тот, кто может планировать операции в timelock
Что ещё добавить
TimelockController, чтобы ставить алерт на CallScheduled
Алерты

Алерты

Следим за
Upgraded(implementation) на прокси
Срабатывает
На любое событие
Уровень
Критично
Админ прокси сменился
Следим за
AdminChanged(previousAdmin, newAdmin) на прокси
Срабатывает
На любое событие
Уровень
Критично
Следим за
OwnershipTransferred на прокси или ProxyAdmin
Срабатывает
На любое событие
Уровень
Критично
Следим за
RoleGranted, RoleRevoked
Срабатывает
На любое событие
Уровень
Критично
Следим за
AddedOwner, RemovedOwner, ChangedThreshold на Safe
Срабатывает
На любое событие
Уровень
Критично

Алерт об обновлении называет адрес новой реализации. Алерт об админе называет нового админа. Сверьте их с тем, что команда планировала выкатить.

Это правила «любое событие», а не пороги. В обычный месяц обновления редки и плановые, поэтому каждое стоит сообщения. Проверка на истории перед включением правила покажет, сколько обновлений у контракта было за последние 30 дней.

Timelock

Узнать об обновлении до его исполнения

Если обновления идут через OpenZeppelin TimelockController, обновление сначала объявляется, а исполняется после задержки. Добавьте адрес timelock и поставьте алерт на CallScheduled: алерт придёт, когда обновление поставлено в очередь, за часы или дни до смены кода. В это окно пользователи могут выйти, а команда — отменить через Cancelled.

Без timelock алерт Upgraded приходит постфактум. Он всё равно важен: чем раньше команда узнает, тем раньше сможет поставить паузу или предупредить пользователей.

Честно

Ограничения

  • SmartAlert следит за событиями и view-функциями. Прокси, который меняет слот реализации без события Upgraded, нестандартный: алерт его не увидит.
  • У неверифицированного прокси нет ABI. Загрузите ABI вручную, иначе шаблон не предложится.
  • Алерты сообщают быстро, но не отменяют обновление. Для отмены нужны пауза или действие админа, заранее продуманные.
Вопросы

Вопросы и ответы

Я добавил реализацию и не вижу событий. Почему?

События выдаёт прокси. Добавьте вместо этого адрес прокси.

Нужно ли менять контракт?

Нет. Всё здесь читает публичные события. Без редеплоя и без кода.

Какие сети?

Ethereum, BNB Chain, Base и Arbitrum.

Попробуйте на своём контракте

Достаточно адреса. Первые 14 дней действуют лимиты Pro, а правила проверяются на истории до включения.