Верифікація смарт-контрактів на блок-експлорерах

Проєктуємо та розробляємо блокчейн-рішення повного циклу: від архітектури смарт-контрактів до запуску DeFi-протоколів, NFT-маркетплейсів та криптобірж. Аудит безпеки, токеноміка, інтеграція з наявною інфраструктурою.
Показано 1 з 1Усі 1306 послуг
Верифікація смарт-контрактів на блок-експлорерах
Простий
~2-3 години
Часті запитання

Напрямки блокчейн-розробки

Етапи блокчейн-розробки

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1308
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1221
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    921
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1149
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    612
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    886

Верифікація смарт-контрактів на блок-експлорерах

Задеплоєний контракт без верифікації — це чорний ящик. Користувачі бачать байткод, але не вихідники. Etherscan показує «Contract» замість імен функцій. Ніхто не може перевірити, що контракт робить те, що написано у документації. Для будь-якого публічного протоколу це репутаційна проблема і бар'єр для інтеграцій — інші протоколи не будуть викликати контракт, який нельзя перевірити.

Як працює верифікація

Блок-експлорер приймає вихідники і параметри компілятора, компілює локально і порівнює bytecode з тим, що у чейні. Матч — контракт вважається верифікованим, вихідники публікуються.

Головна проблема: детермінованість компіляції. Solidity-компілятор при одних і тих же вхідних даних і одних і тих же налаштуваннях повинен дати однаковий байткод. Розходження у версії компілятора (0.8.19 vs 0.8.20), флагах оптимізації (runs: 200 vs runs: 999), порядку файлів або метаданих — і верифікація не проходить.

Інструменти для верифікації

Hardhat + hardhat-verify (бувший hardhat-etherscan). Після деплоя:

npx hardhat verify --network mainnet 0xCONTRACT_ADDRESS "arg1" "arg2"

Плагін автоматично визначає версію компілятора з hardhat.config.ts, збирає Standard JSON Input і надсилає на Etherscan API. Працює для Ethereum, Polygon, BSC, Arbitrum, Optimism і десятків інших мереж — через конфігурацію etherscan.apiUrl.

Foundry forge verify-contract — працює аналогічно, але через Standard JSON Input прямо:

forge verify-contract 0xCONTRACT_ADDRESS src/MyContract.sol:MyContract \
  --chain-id 1 \
  --etherscan-api-key $ETHERSCAN_KEY \
  --constructor-args $(cast abi-encode "constructor(address)" 0xADDR)

Sourcify — децентралізована альтернатива. Зберігає верифіковані вихідники на IPFS, підтримується більшістю сучасних експлорерів. Foundry підтримує деплой з одночасною верифікацією через Sourcify:

forge script Script --broadcast --verify --verifier sourcify

Часті причини провалу верифікації

  • Несумісність версії компілятора: у коді pragma solidity ^0.8.0, задеплоєно компілятором 0.8.21, на експлорері вказали 0.8.0
  • Налаштування оптимізації не збігаються з тими, що були при деплої
  • Контракт використовує бібліотеки — вони повинні бути або вбудовані (inline), або задеплоєні і адреси вказані при верифікації
  • Proxy-паттерн: верифікується імплементація, але експлорер бачить proxy — потрібна додаткова верифікація proxy через «Is this a proxy?» на Etherscan

Для proxy-контрактів (Transparent, UUPS) Etherscan підтримує верифікацію через ABI proxy detection — натисніть кнопку «Verify as proxy» після верифікації обох частин (proxy + implementation).

Терміни: 2-3 години на верифікацію стандартного контракту, включаючи діагностику причин провалу і повторні спроби.