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

Проблема: чорний ящик після деплою Після деплою контракту на mainnet користувачі бачать лише байткод. Etherscan показує «Contract» замість імен функцій. Інші протоколи не викликають такий контракт — надто ризиковано. Неверифікований контракт може містити backdoor або бути підміненим через проксі.

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

Часті запитання

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

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

Проблема: чорний ящик після деплою

Після деплою контракту на mainnet користувачі бачать лише байткод. Etherscan показує «Contract» замість імен функцій. Інші протоколи не викликають такий контракт — надто ризиковано. Неверифікований контракт може містити backdoor або бути підміненим через проксі. Помилки в конфігурації компіляції (версія, оптимізація, метадані) призводять до провалу верифікації. Ми вирішуємо цю проблему на системному рівні: налаштовуємо оточення, готуємо Standard JSON Input та проходимо верифікацію з першого разу в 95% випадків.

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

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

Як скоротити час верифікації в 3 рази?

Використовуйте Foundry замість ручного введення параметрів на експлорері. forge verify-contract автоматично збирає Standard JSON Input і відправляє на Etherscan. За нашими даними, це скорочує час налаштування з 30 хвилин до 5. Ми підготували порівняльну таблицю інструментів:

Інструмент Швидкість налаштування Підтримка проксі Робота з бібліотеками
Hardhat hardhat-verify Середня (10 хв) Так (через verify:true) Потребує лінковки адрес
Foundry forge verify-contract Висока (5 хв) Так (автоматична детекція) Автоматична лінковка
Sourcify Середня (15 хв) Обмежена Потребує IPFS Hash

Для простих контрактів достатньо Hardhat, для складних з проксі та бібліотеками — Foundry краще в 2 рази швидше.

Як ми справляємося зі складними випадками?

У нас за плечима 7+ років у блокчейні та понад 50 успішних верифікацій. Ми стикалися з проксі-контрактами (UUPS, Transparent), складними зв'язками бібліотек та флеш-позиками. Для кожного проекту готуємо Standard JSON Input — це знижує ймовірність помилки до нуля. Якщо контракт використовує immutable змінні або calldata зі складними структурами, ми вручну перевіряємо збіг constructor-arguments. Верифікація через Foundry дозволяє скоротити час налаштування в 3 рази порівняно з ручним введенням параметрів.

Чому верифікація важлива для безпеки?

Неверифікований контракт — чорна діра для аудиторів. Жоден серйозний аудит не почнеться без verified-статусу. Верифікація — перший крок до формальної верифікації та статичного аналізу (Slither, Mythril). Уявіть: ви знайшли баг, але контракт не верифіковано — виправити і передеплоїти неможливо. Економія на верифікації обертається мільйонними втратами при зломах. Ми гарантуємо, що після нашої роботи контракт проходить будь-які перевірки.

Як уникнути частих помилок при верифікації?

Типові помилки та їх рішення
Причина Рішення
Невідповідність версії компілятора Вказувати точну версію pragma solidity 0.8.19, на експлорері — ту ж
Невідповідність налаштувань оптимізації (runs) Зберігати конфіг solc окремо, використовувати get-hardhat-config для логування
Використання бібліотек без адрес Вказувати адреси лінкованих бібліотек при верифікації
Проксі-контракти Спочатку верифікувати implementation, потім proxy — натиснути «Verify as proxy» на Etherscan
Метадані (metadata hash) Додати --metadata-hash none в solc або вимкнути в hardhat

Для проксі-контрактів Etherscan підтримує детекцію через ABI proxy detection — після верифікації обох частин натиснути кнопку «Is this a proxy?». Ми також підключаємо @openzeppelin/contracts і використовуємо upgradeable шаблони.

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

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 підтримує деплой з одночасною верифікацією:

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

Що входить в роботу

  • Повна діагностика конфігурації компіляції
  • Підготовка Standard JSON Input
  • Верифікація на блок-експлорері (до 3 мереж за замовчуванням)
  • Якщо проксі — верифікація обох частин
  • Повторні спроби при помилках (включено у вартість)
  • Документація щодо налаштування та розгортання
  • Консультація з best practices gas optimization та безпеки

Строки та вартість

Строк: від 2 годин до 1 робочого дня — залежить від складності контракту (наявність бібліотек, проксі, кількість мереж). Вартість розраховується індивідуально. Замовте верифікацію вашого контракту вже сьогодні — надішліть посилання на контракт у будь-якій мережі (Etherscan, Polygonscan, Arbiscan) і отримайте розрахунок за 1 годину. Отримайте консультацію з налаштування верифікації — зробимо ваші контракти прозорими.

Зв'яжіться з нами, щоб обговорити деталі вашого проекту — ми відповімо протягом години.