Действительно ли ваш ончейн-контракт — это тот самый код, который прошел аудит?
При каждом деплое и обновлении команды должны убедиться, что код, работающий в блокчейне, совпадает с тем кодом, который они проверили, одобрили и на который получили аудит.
Аудит смарт-контрактов оценивает кодовую базу в определенный момент времени. Аудиторы изучают конкретный коммит в Git, оценивают риски и выпускают отчет об уязвимостях для этой версии кода.
Но пользователи взаимодействуют не с коммитом в Git. Они взаимодействуют с развернутым байт-кодом.
На практике существует три разных артефакта:
- Пройденный аудит коммита в Git
- Развернутый контракт
- Верифицированный исходный код в обозревателе блокчейна (block explorer)
Отчет об аудите говорит вам, какой именно коммит в Git проверяли аудиторы. Обозреватель блокчейна показывает, какой исходный код компилируется в байт-код, развернутый в блокчейне.
Этот разрыв имеет критическое значение, поскольку аудиты стали одним из главных сигналов доверия в индустрии, в то время как развернутые контракты остаются актуальной поверхностью для атак. По мере того как эксплойты становятся все более частыми, а инструменты злоумышленников — совершеннее, индустрии требуются более надежные способы проверки того, что проверенный код действительно запущен в блокчейне.
Для команд, работающих с множеством деплоев, сетей и циклов обновлений, этот шаг проверки быстро становится непосильным.
Почему мы создали EVM Mirror
Мы впервые столкнулись с этой задачей при управлении деплоями в разных чейнах и релизах.
В Aragon это стало постоянной операционной проблемой. Мы деплоим и обновляем контракты в более чем 15 поддерживаемых сетях, и каждый новый релиз или плагин добавляет еще один набор контрактов, которые необходимо сверять с проверенным нами кодом. Эта же проблема проявляется в нашей работе в составе комитетов по безопасности с внешними протоколами, такими как Taiko: когда мы проверяем обновления, валидируем предложения или выступаем в качестве независимого подписанта, нам нужен надежный способ убедиться, что наша оценка соответствует коду, фактически работающему в блокчейне.
Существующие инструменты помогали. В частности, DiffyScan от Lido был практичным подходом, который помог нам частично решить эту задачу. Мы активно использовали его, и он решил важную проблему.
Со временем наши требования выросли и превзошли то, для чего проектировался DiffyScan. Нам нужен был инструмент, который мог бы работать с произвольными контрактами, множеством блокчейнов и автоматизированными конвейерами верификации без необходимости настройки под конкретный репозиторий.
Это привело нас к созданию EVM Mirror.
EVM Mirror в трех командах
EVM Mirror создан на основе простой идеи: сравнить верифицированный ончейн-исходный код с источником истины, которому вы уже доверяете.
Таким источником может быть чекаут Git, установленный пакет, релизный артефакт или любой локальный каталог. Инструмент намеренно не зависит от того, как именно управляется ваш код.
mirror verify
mirror verify сравнивает один или несколько развернутых контрактов с локальным каталогом исходного кода.
Вместо проверки только корневого контракта он сравнивает полный набор верифицированных файлов исходного кода, возвращенных обозревателем блокчейна, включая импортированные библиотеки и зависимости.
Это позволяет убедиться, что деплой соответствует ожидаемой кодовой базе.
mirror diff
mirror diff сравнивает два развернутых контракта друг с другом.
Это особенно полезно при рассмотрении обновлений, валидации предложений по управлению или оценке изменений, внесенных новым деплоем.
При проверках безопасности и дью-дилидженсе протоколов понимание того, что именно изменилось, часто так же важно, как и понимание того, что было развернуто.
mirror clone
Он извлекает верифицированные файлы исходного кода из обозревателя блокчейна, записывает их в структуру собираемого проекта и генерирует файл foundry.toml с настройками компилятора и оптимизатора, которые использовались для развернутого контракта.
Распространенные импорты зависимостей также сопоставляются с ожидаемой структурой Foundry. Например, импорты @openzeppelin/... сопоставляются с lib/@openzeppelin/..., поэтому проект можно собрать локально с помощью forge build с минимальной настройкой.
Это полезно при проверке развернутых контрактов, воспроизведении сборки или начале расследования с верифицированного ончейн-источника, а не из репозитория.
Создано для реальных сред деплоя
EVM Mirror разработан для работы в условиях суровой реальности развернутых контрактов, а не только простых примеров с одной сетью.
Поддержка прокси
Все команды поддерживают анализ с учетом прокси через --follow-proxy, что позволяет выполнять сравнение и верификацию для контрактов реализации, а не адресов прокси.
Многоцепочечная поддержка
EVM Mirror поддерживает растущий набор EVM-сетей, включая Ethereum, Optimism, Arbitrum, Base, Polygon, zkSync и другие.
Там, где это доступно, инструмент использует многоцепочечный API Etherscan и переключается на совместимую инфраструктуру обозревателей, такую как Routescan и Blockscout.
Минимальные требования к доверию
EVM Mirror поставляется в виде автономного бинарного файла Deno с намеренно малой поверхностью разрешений.
Он использует доступ к файловой системе только для чтения и сетевой доступ для выполнения операций верификации и получения данных. Не требуется установка пакетов, среда контейнеров или внешние зависящие от рантайма компоненты.
Для инструментов, которые часто используются рядом с процессами деплоя и безопасности, минимизация сложности цепочки поставок сама по себе является ценной целью проектирования.
Попробуйте
Аудиты ровно настолько полезны, насколько высок уровень уверенности, который они обеспечивают.
Проверка того, что развернутые контракты соответствуют коду, прошедшему аудит, должна быть простой, повторяемой и легко автоматизируемой.
EVM Mirror — это инструмент с открытым исходным исходным кодом, созданный для того, чтобы помочь сократить этот разрыв. Открытый исходный код на GitHub: github.com/aragon/evm-mirror




.png)



