Записки о вдумчивом участии в Gnosis Safe кошельках ---- В запросе (proposal) выполнить транзакцию должно быть четко сформулировано намерение: какое контракт (его адрес) или контракты будут вызываться в ходе исполнения транзакции. Какие данные будут передаваться в вызов, и что эти данные значат. Также запрос простыми словами объясняет, что делает транзакция и почему необходимо сделать то или иное действие. Варианты действий, которые будут рассматриваться ниже: - переводит токены - апгрейдит контракты - изменяет настройки контрактов Step 1: В интерфейсе GnosisSafe смотрим с какими контрактами происходит взаимодействие. Какой метод контракта вызвается, какие данные передаются в метод. Сравниваются адрес контракта и данные с намерением. Step 2: Делаем симуляцию исполнения в tenderly -- для этого нужно начать подтверждение транзакции, после чего появится ссылка на симуляцию. На что смотрим в Tenderly: 1. Если это перевод токенов, то смотрим в Events - количество Transfer должно быть столько сколько намеревалось. В событии смотрим: - контракт испускающий событие - контракт токена - кто отправитель - кто получатель - сумма - соответствуют ли эти данные намерению Метод Transfer может отсутствовать, если выполняется перевод нативных токенов. Тогда нужно в tenderly оценить изменение баланса в State Changes для соответствующих отправителя и получателя. 2. Если это апгрейд контрактов, то смотрим по трейсам (для контрактов поддерживающих стандартный proxy шаблон): - у каких proxy вызваются методы апгрейда имплементации - какой адрес имплементации передается в метод апгрейда - происходит ли вызова методов совместно с вызовом апгрейда - соответствуют ли эти данные намерению В запросе на апгрейд должна быть представлена delta для имплементации. Необходимо оценить дельту - нет ли там очевидных внедрений вредоносного кода. Также важно пройтись по имплементациям в блок эксплорере и оценить их код, соответствует ли он коду из delta, кем и когда он был задеплоен. При этом, если вызывалась метод имплементации, как часть апгрейда, оценить логику этого метода используя исходный код в блок эсплорере и tenderly. Если в запросе на апгрейд обновляются несколько контрактов, то необходимо выполнить шаги выше для каждого из контрактов. 3. Если вызывается метод для изменения настройки параметров (или вызов контрактов для других целей), то в tenderly нужно оценить вызываются ли те методы и с теми данными, которые намеревались. Важно зайти в исходный код контракта и посмотреть код вызываемых методов, чтобы оценить не выполняется ли в них вредоносный код. По tenderly оценить трейсы, какие методы и какие контракты выполняются ниже по стеку. Не содержит ли трейс каких-то подозрительных действий. Отдельно нужно проинспектировать события в tenderly - нет ли там чего-то подозрительного. Если есть Transfer или изменения балансов нативного токена в State Changes, то нужно оценить отправителя, получателя, сумму -- соотносятся ли они с намерением.