Перейти к основному содержанию

Предварительные требования

  • Развёрнутый контракт в Plasma testnet. См. развёртывание контракта, если вы ещё не развернули его.
  • Исходный код контракта и настройки компиляции.
  • Аргументы конструктора, использованные при развёртывании (если есть).
Обозреватель блоков Plasma (plasmascan.to) предоставляет API верификации, совместимый с Etherscan. Примеры ниже используют этот API напрямую — для отправки верификации сторонняя учётная запись не требуется.

Примеры контрактов

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

Простой контракт

Базовый контракт хранения данных, демонстрирующий фундаментальные концепции смарт-контрактов.

Сложный контракт

Более сложная система хранилища для управления токен-депозитами с настраиваемыми параметрами.

Верификация с Foundry

Foundry предоставляет команду forge verify-contract для верификации контрактов.
  1. Убедитесь, что ваш foundry.toml включает настройки верификации:
  2. Верифицируйте контракт. Для контракта SimpleStorage со строковым аргументом конструктора:
    Для контракта TokenVault с несколькими аргументами конструктора:
  3. Проверьте статус верификации. Foundry покажет статус верификации в реальном времени с флагом --watch. Ищите:

Верификация с Hardhat

Hardhat предлагает верификацию контрактов через плагин @nomicfoundation/hardhat-verify.
  1. Обновите hardhat.config.js, чтобы включить настройки верификации:
  2. Верифицируйте контракт. Для простого контракта:
    Для контрактов с несколькими аргументами конструктора создайте скрипт верификации scripts/verify.js:
  3. Запустите скрипт верификации:

Автоматическая верификация при развёртывании

Также можно верифицировать контракты автоматически при развёртывании, добавив верификацию в скрипт развёртывания:

Верификация с Ethers.js

Ethers.js требует ручных вызовов API обозревателя блоков для верификации. Этот подход даёт полный контроль над процессом верификации.
  1. Установите необходимые зависимости:
  2. Создайте скрипт верификации verify-ethers.js:
  3. Закодируйте аргументы конструктора. Для сложных аргументов конструктора нужно ABI-закодировать их. Можно использовать инструмент cast от Foundry:
  4. Наконец, запустите верификацию:

Проверка статуса верификации

После верификации можно проверить, прошла ли она успешно:

В обозревателе блоков

  1. Перейдите в обозреватель Plasma testnet.
  2. Найдите адрес вашего контракта.
  3. Поищите зелёную галочку рядом со вкладкой «Contract».
  4. Нажмите на вкладку «Contract», чтобы увидеть верифицированный исходный код.

Программно

  1. Создайте скрипт проверки статуса check-verification.js:

Альтернативные методы

Хотя обозреватели блоков — самый распространённый метод верификации, можно также использовать:

Sourcify

Sourcify обеспечивает децентрализованную верификацию контрактов:

Tenderly

Tenderly предлагает верификацию как часть своей платформы отладки. Подробности см. в их документации.

Сглаживание контрактов

Для контрактов с импортами или библиотеками может потребоваться объединить контракт в один файл перед верификацией. Популярные инструменты: Для сложных проектов с внешними библиотеками см. документацию по верификации Hardhat для расширенных опций конфигурации.

Устранение неполадок

Несоответствие аргументов конструктора

Дважды проверьте, что аргументы конструктора точно соответствуют использованным при развёртывании. Используйте cast abi-encode для проверки кодирования.

Несоответствие версии компилятора

Убедитесь, что версия компилятора в запросе на верификацию соответствует версии, использованной при компиляции.

Несоответствие настроек оптимизации

Проверьте, что настройки оптимизации (включено/выключено и количество runs) соответствуют настройкам компиляции.

Уже верифицирован

Это означает, что верификация уже прошла успешно ранее. Проверьте в обозревателе блоков, чтобы подтвердить.

Ограничение по частоте

Подождите несколько минут перед повторной попыткой. Рассмотрите возможность повышения API-плана, если нужны более высокие лимиты.