Четыре поверхности одного Safe
ПоверхностьЧто делаетГлавный риск
Owners + thresholdАвторизуют обычный execTransactionКомпрометация или потеря нужного числа owner keys
ModuleВызывает execTransactionFromModule по своей логикеПеревод без нового owner-threshold для каждой операции
Transaction guardПроверяет обычную Safe transaction до и после executionОшибка или malicious logic блокирует операции
Fallback handlerОбрабатывает неизвестные core selectors и добавляет интерфейсыНеожиданная логика подписи, callback или dispatch
Четыре поверхности одного Safe
Поверхность
Owners + threshold
Что делает
Авторизуют обычный execTransaction
Главный риск
Компрометация или потеря нужного числа owner keys
Поверхность
Module
Что делает
Вызывает execTransactionFromModule по своей логике
Главный риск
Перевод без нового owner-threshold для каждой операции
Поверхность
Transaction guard
Что делает
Проверяет обычную Safe transaction до и после execution
Главный риск
Ошибка или malicious logic блокирует операции
Поверхность
Fallback handler
Что делает
Обрабатывает неизвестные core selectors и добавляет интерфейсы
Главный риск
Неожиданная логика подписи, callback или dispatch

Module добавляет второй путь исполнения

Базовый мультисиг для малого бизнеса полезен только после проверки расширений. Safe хранит enabled modules в linked list и позволяет читать их через getModulesPaginated. Разрешённый module вызывает execTransactionFromModule; core проверяет, что caller включён, но не собирает owner signatures заново. Ограничение суммы, адресов или времени существует лишь тогда, когда его действительно реализует и соблюдает код module.

Guard способен разрешить меньше, но и остановить всё

Transaction guard вызывается вокруг обычного execTransaction и может проверять destination, value, data и operation. Safe прямо предупреждает: сломанный guard способен создать denial of service. В Safe 1.5.0 ModuleManager также поддерживает отдельный module guard для execTransactionFromModule. Эти адреса нельзя смешивать: transaction guard не автоматически проверяет module path, а наличие module guard нужно подтверждать по версии и on-chain storage.

Очередь и Safe nonce остаются отдельной задачей: guard отвечает на допустимость исполнения, но не превращает off-chain предложение в on-chain отмену. Если guard отклонил вызов, сначала сохраните revert data, guard address и точный payload; не создавайте конкурирующие предложения ради обхода неизвестного правила.

Fallback handler расширяет интерфейс proxy

Когда selector не совпадает с core-функцией Safe, fallback manager может переслать calldata настроенному handler и добавить original caller в конец. Официальные handlers реализуют token callbacks, ERC-1271 signatures или дополнительные dispatch rules, но произвольный handler расширяет attack surface. Проверьте его runtime code, proxy/implementation и конфигурацию так же строго, как аудит смарт-контракта, а не по знакомому имени в приложении.

Decision tool для инвентаризации
НаблюдениеВыводСледующее действие
Modules пусты, guard и fallback нулевыеДополнительные paths по этим slots не найденыВсё равно сверить singleton/version, owners и threshold
Есть неизвестный enabled moduleВозможен самостоятельный execution pathОстановить пополнение; получить code, config, audit и removal plan
Есть transaction guardОбычные операции зависят от его pre/post checksПроверить код и тест удаления/аварийного исполнения
Есть fallback handlerProxy обслуживает дополнительные selectors/callbacksПроверить handler implementation и ожидаемые interfaces
Safe 1.5.0 использует module guardModule executions имеют отдельный контрольный слойПроверить оба guard-address и их recovery независимо
Decision tool для инвентаризации
Наблюдение
Modules пусты, guard и fallback нулевые
Вывод
Дополнительные paths по этим slots не найдены
Следующее действие
Всё равно сверить singleton/version, owners и threshold
Наблюдение
Есть неизвестный enabled module
Вывод
Возможен самостоятельный execution path
Следующее действие
Остановить пополнение; получить code, config, audit и removal plan
Наблюдение
Есть transaction guard
Вывод
Обычные операции зависят от его pre/post checks
Следующее действие
Проверить код и тест удаления/аварийного исполнения
Наблюдение
Есть fallback handler
Вывод
Proxy обслуживает дополнительные selectors/callbacks
Следующее действие
Проверить handler implementation и ожидаемые interfaces
Наблюдение
Safe 1.5.0 использует module guard
Вывод
Module executions имеют отдельный контрольный слой
Следующее действие
Проверить оба guard-address и их recovery независимо

Снимок состояния должен быть воспроизводимым

Проверка до перевода

  1. 1
    Закрепите сеть и proxy

    Сохраните chain ID, Safe address, block number и текущий singleton/implementation. Один адрес в другой сети — другой state.

  2. 2
    Прочитайте базовый контроль

    Получите owners, threshold и nonce напрямую из контракта или независимого RPC.

  3. 3
    Перечислите modules

    Пройдите getModulesPaginated до sentinel и сохраните порядок; один первый page не доказывает полный список.

  4. 4
    Получите guards и fallback

    Зафиксируйте transaction guard, module guard при поддерживаемой версии и fallback handler.

  5. 5
    Свяжите адрес с кодом

    Для каждого extension проверьте bytecode/proxy, implementation, config, audit scope и управляющие ключи на этом блоке.

  6. 6
    Проверьте recovery

    На тестовой копии или малом Safe воспроизведите disable/remove path до хранения существенных средств.

Удаление расширения тоже проходит через существующую архитектуру

Stop-сигналы

  • интерфейс показывает только owners и скрывает modules, guards или fallback;
  • extension address не имеет проверенного кода либо указывает на изменяемый proxy без понятного admin;
  • guard не имеет испытанного removal path и может заблокировать транзакцию собственного удаления;
  • module обещает лимит, который не находится в code/config конкретного deployment;
  • новый handler добавляют вместе с несвязанным переводом или delegatecall;
  • подписантам не показывают, что именно подписывает кошелёк в self-call Safe.

Проверка закрыта, когда другой reviewer получает тот же block-pinned список owners, modules, guards и fallback handler, связывает каждый адрес с кодом и воспроизводит ожидаемый removal path. Если опасное расширение уже включено, остановите новые поступления и не импровизируйте: guard может блокировать обычный путь, module — сохранять альтернативный. Сначала смоделируйте exact self-call, threshold, predecessor и порядок исполнения; затем покажите участникам, что именно подписывает кошелёк, соберите подписи и независимо проверьте итоговый state.

Источники

Мы используем прямые ссылки и фиксируем дату проверки. Полный текст чужих материалов не перепечатывается.

  1. Safe Docs — Smart Account Modules Safe · Проверено 22 августа 2026 г. в 10:35 GMT+5
  2. Safe Docs — Smart Account Guards Safe · Проверено 22 августа 2026 г. в 10:35 GMT+5
  3. Safe Docs — Fallback Handler Safe · Проверено 22 августа 2026 г. в 10:35 GMT+5
  4. Safe 1.5.0 — ModuleManager.sol Safe · Проверено 22 августа 2026 г. в 10:35 GMT+5
  5. Safe Smart Account — Safe.sol Safe · Проверено 22 августа 2026 г. в 10:35 GMT+5
Материал носит информационный характер и не является индивидуальной рекомендацией. Криптоактивы связаны с риском волатильности, технических сбоев, хищения и полной потери средств.