Работает на: Virtual Environments и публичных сетях (mainnet и testnet). Один и тот же плагин работает и там, и там; укажите нужную сеть в
hardhat.config.ts.tenderly.verify() явно из ваших скриптов.
В публичных сетях плагин по умолчанию верифицирует публично. Чтобы верифицировать приватно (видимо только внутри вашего проекта/организации), установите
privateVerification: true в hardhat.config.ts. См. Настройка аутентификации и видимости верификации.Версии и совместимость
В зависимости от версии Ethers, которую вы используете с Hardhat, вам нужно установить соответствующую версию плагина 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() на экземпляре контракта соответственно.
Верификация прокси-контрактов
Автоматическая верификация прокси-контрактов, развёрнутых и обновляемых через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(необязательно), используемые контрактом
Необходимо вызывать
verify() после того, как контракт развёрнут.Если вы выполняете верификацию параллельно с деплоем, необходимо await-ать waitForDeployment() в случае Ethers 6 и deployed() в случае Ethers 5.Подробная ручная верификация
МетодverifyMultiCompilerAPI() даёт вам полный контроль над процессом верификации, позволяя указать каждую деталь процесса.
Это редко рекомендуется, но может быть полезно, если вы верифицируете контракты, скомпилированные разными версиями или конфигурациями компилятора.
Полностью управляемый метод верификации позволяет явно:
- Указать исходный код контрактов (
sources) - Задать аргументы компиляции (
compiler) - Задать связанные библиотеки (
libraries)
Аргументы верификации
МетодverifyMultiCompilerAPI() принимает один аргумент — массив объектов-контрактов. Каждый объект-контракт состоит из следующих полей: