Верификация смарт-контрактов на Polygonscan
Задеплоенный контракт без верифицированного исходного кода — это чёрный ящик. Polygonscan показывает только байткод. Пользователи не могут прочитать логику, интеграторы не могут сгенерировать ABI, аудиторы работают с декомпилированным кодом вместо оригинала. Верификация — это не бюрократия, это минимальный стандарт прозрачности для любого production-контракта.
Почему верификация ломается
Самая частая причина сбоя — несовпадение параметров компилятора. Polygonscan компилирует загруженный исходный код и сравнивает байткод с задеплоенным. Если версия компилятора, флаг оптимизации или количество runs отличается хотя бы на единицу — верификация падает без внятного сообщения об ошибке.
Вторая причина: flatten-код с дублирующимися license identifiers или pragma statements. Инструменты вроде hardhat flatten иногда оставляют несколько // SPDX-License-Identifier и несколько pragma solidity — Polygonscan это не принимает.
Для контрактов с constructor arguments верификация требует ABI-закодированные аргументы в hex. Неверно закодированные аргументы — ещё одна типичная причина отказа.
Как верифицируем
Используем Hardhat Etherscan plugin (@nomicfoundation/hardhat-verify) или forge verify-contract из Foundry — оба поддерживают Polygonscan через тот же API-ключ. Верификация запускается автоматически в деплой-скрипте сразу после деплоя, пока параметры компилятора точно известны из артефактов сборки.
Для proxy-контрактов дополнительно верифицируем имплементацию и линкуем её с прокси через Polygonscan UI («Is this a proxy?»). После линковки пользователи видят функции имплементации через proxy-адрес.
Стандартный процесс: деплой → автоматическая верификация через CLI → ручная проверка на Polygonscan → линковка proxy при необходимости. Занимает 2-3 часа включая ожидание индексации.







