Перейти к основному содержанию
Работает на: Virtual Environments и публичных сетях (mainnet и testnet). Один и тот же плагин работает и там, и там; укажите нужную сеть в hardhat.config.ts.
Плагин Tenderly-Hardhat верифицирует контракты, развёрнутые из Hardhat, для Virtual Environments или публичных сетей. Используйте автоматическую верификацию, чтобы верифицировать при каждом деплое, или ручную верификацию, чтобы вызывать tenderly.verify() явно из ваших скриптов.
В публичных сетях плагин по умолчанию верифицирует публично. Чтобы верифицировать приватно (видимо только внутри вашего проекта/организации), установите privateVerification: true в hardhat.config.ts. См. Настройка аутентификации и видимости верификации.

Версии и совместимость

В зависимости от версии Ethers, которую вы используете с Hardhat, вам нужно установить соответствующую версию плагина Tenderly-Hardhat.
Настоятельно рекомендуется перейти на Ethers 6 и использовать последнюю версию плагина Tenderly-Hardhat из соображений безопасности, производительности, а также ради дополнительных возможностей.

Методы верификации

Плагин Tenderly-Hardhat поддерживает три метода верификации контрактов.
  • Автоматическая верификация (рекомендуется): просто импортируйте и настройте плагин. Этот метод идеален для верификации во время деплоя, поскольку процесс полностью автоматизирован. Автоматическая верификация работает как с обычной настройкой деплоя Hardhat, так и при использовании hardhat-ignition. Управляйте автоматической верификацией через переменную окружения TENDERLY_AUTOMATIC_VERIFICATION.
  • Ручная верификация (low-code): предоставляет явный шаг верификации внутри вашего кода, что полезно в сценариях типа пост-деплойной верификации, условной верификации (например, только после падения теста) или верификации экземпляров, созданных фабричными контрактами.
  • Подробная ручная верификация (high-code): даёт детальный контроль над процессом верификации, позволяя задать адреса библиотек, исходный код и конфигурации компилятора. Необходима для верификации нескольких контрактов с разными версиями или настройками компилятора.

Примеры

Лучший способ изучить процесс автоматической верификации — пройти пример, который есть в нашем GitHub-репозитории. Все примеры используют образцовый контракт Greeter. Просмотрите примеры проектов напрямую:

Настройка плагина Tenderly-Hardhat

Выполните шаги ниже, чтобы установить и инициализировать плагин Tenderly-Hardhat.
В следующих разделах вы узнаете, как верифицировать контракты разными методами.

Автоматическая верификация

Автоматическая верификация происходит бесшовно, когда вы разворачиваете контракт через Ethers.js. Подход с автоматической верификацией выполняет верификацию автоматически, собирая настройки компилятора, адрес развёрнутого контракта и исходный код. Чтобы включить или отключить автоматическую верификацию, используйте переменную окружения TENDERLY_AUTOMATIC_VERIFICATION, которую распознаёт плагин. Плагин Tenderly-Hardhat верифицирует контракты, когда обнаруживает, что контракт развёрнут и Ethers получил квитанцию о транзакции деплоя. Чтобы это работало, нужно await-ать деплой при развёртывании через вспомогательные методы Ethers ethers.deployContract() и ethers.getContractFactory(), вызывая waitForDeployment() или deployed() на экземпляре контракта соответственно.
Необходимо захватить ссылку на объект контракта, возвращаемый waitForDeployment() (Ethers 6) и deployed() (Ethers 5), если вы намерены с ним взаимодействовать.

Верификация прокси-контрактов

Автоматическая верификация прокси-контрактов, развёрнутых и обновляемых через hardhat-upgrades, возможна в следующих версиях пакета @tenderly/hardhat-tenderly:
  • >= 1.10.0
  • >= 2.1.0
Для версий 1.x.x < 1.10.0 и 2.x.x < 2.1.0 следуйте руководству по верификации прокси.

Ручная верификация

Low-code верификация через tenderly.verify() позволяет явно указать точку верификации внутри скрипта деплоя или теста Hardhat. Этот метод особенно полезен для:
  • Верификации ранее развёрнутых контрактов через кастомные скрипты.
  • Верификации экземпляров, созданных фабричными контрактами.
  • Улучшения тестовых прогонов за счёт выборочной верификации контрактов в конце падающего набора (after), что ускоряет выполнение.
Чтобы вручную контролировать верификацию, отключите автоматическую, изменив TENDERLY_AUTOMATIC_VERIFICATION на false при запуске скриптов.

Функция verify

Функция verify() принимает объект, в котором необходимо указать:
  • name контракта
  • address, по которому развёрнут контракт
  • libraries (необязательно), используемые контрактом
Плагин Tenderly-Hardhat подхватит существующую конфигурацию компилятора и исходный код, чтобы верифицировать указанные вами контракты.
Необходимо вызывать verify() после того, как контракт развёрнут.Если вы выполняете верификацию параллельно с деплоем, необходимо await-ать waitForDeployment() в случае Ethers 6 и deployed() в случае Ethers 5.
Если вы верифицируете несколько контрактов, функция принимает переменное число аргументов:

Подробная ручная верификация

Метод verifyMultiCompilerAPI() даёт вам полный контроль над процессом верификации, позволяя указать каждую деталь процесса. Это редко рекомендуется, но может быть полезно, если вы верифицируете контракты, скомпилированные разными версиями или конфигурациями компилятора. Полностью управляемый метод верификации позволяет явно:
  • Указать исходный код контрактов (sources)
  • Задать аргументы компиляции (compiler)
  • Задать связанные библиотеки (libraries)
Следующий пример демонстрирует, как выполнить полностью управляемую верификацию.

Аргументы верификации

Метод verifyMultiCompilerAPI() принимает один аргумент — массив объектов-контрактов. Каждый объект-контракт состоит из следующих полей: