Аудит та деплой смарт-контрактів: Ethereum mainnet під ключ

Деплой смарт-контракту в Ethereum mainnet — момент, коли ціна помилки максимальна. Кожен рядок коду, кожен параметр газу та вибір проксі-патерну безпосередньо впливають на безпеку та бюджет. Уявіть: ви написали контракт, прогнали тести, все ок. Деплоїте в mainnet і... транзакція зависає через неправ

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

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

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

  • 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

Деплой смарт-контракту в Ethereum mainnet — момент, коли ціна помилки максимальна. Кожен рядок коду, кожен параметр газу та вибір проксі-патерну безпосередньо впливають на безпеку та бюджет. Уявіть: ви написали контракт, прогнали тести, все ок. Деплоїте в mainnet і... транзакція зависає через неправильно виставлений газ, або з'ясовується, що конструктор викликається з невірними аргументами, і контракт потрібно передеплоювати. Такі помилки коштують часу та грошей. Наш підхід мінімізує ризики. За багато років ми розгорнули понад 200 контрактів із сукупним TVL понад $50M. Деплой в mainnet — точка неповернення: контракт без upgradeable патерну змінити не можна, помилки в логіці коштують реальних грошей, а неправильно виставлені параметри gas можуть призвести до завислої транзакції в момент пікового навантаження мережі. Тому ми пропонуємо деплой під ключ з повною перевіркою.

Як підготуватися до деплою в mainnet?

Перед відправкою транзакції проходимо обов'язковий чеклист. Він включає аудит та тестування, верифікацію компілятора та налаштування мережі.

Переддеплойний чеклист:

  1. Аудит і тестування:

    • Покриття тестами ≥95% по statement coverage (Hardhat Coverage або Foundry forge coverage).
    • Прогін Slither — статичний аналізатор знаходить reentrancy, integer overflow, невикористані return values. Slither documentation
    • Перевірка Mythril або Aderyn для глибокого symbolic execution.
    • Для контрактів з TVL >$100k — обов'язковий зовнішній аудит.

    Верифікація компілятора:

    • Фіксована версія Solidity: замість ^0.8.20 використовуємо =0.8.20.
    • Optimizer runs: стандарт 200 для балансу газу деплою та викликів; для часто викликаних контрактів — 1000+.
    • Перевірка bytecode determinism: компіляція двічі дає ідентичний bytecode.

Чому важливий аудит і тестування?

Помилка в логіці може призвести до втрати коштів користувачів або самого проєкту. Відомий випадок, коли через відсутність перевірки msg.sender в токені ERC-20 зловмисник вивів всю ліквідність. Ми гарантуємо, що кожен контракт проходить як мінімум статичний аналіз та стрес-тестування. Для великих проєктів залучаємо зовнішніх аудиторів.

Покрокова інструкція деплою через Hardhat

// hardhat.config.ts const config: HardhatUserConfig = { networks: { mainnet: { url: process.env.MAINNET_RPC_URL!, // Infura/Alchemy/Quicknode accounts: [process.env.DEPLOYER_PRIVATE_KEY!], gasPrice: 'auto', }, }, etherscan: { apiKey: process.env.ETHERSCAN_API_KEY!, }, }; // deploy script async function main() { const [deployer] = await ethers.getSigners(); console.log('Deployer balance:', ethers.formatEther( await deployer.provider.getBalance(deployer.address) )); const Contract = await ethers.getContractFactory('MyContract'); const contract = await Contract.deploy(/* constructor args */); await contract.waitForDeployment(); const address = await contract.getAddress(); console.log('Deployed to:', address); // Верификация на Etherscan await run('verify:verify', { address, constructorArguments: [/* args */], }); } 

Кроки:

  1. Налаштування конфігурації мережі та RPC.
  2. Компіляція з фіксованим компілятором.
  3. Деплой через скрипт із зазначенням constructor args.
  4. Автоматична верифікація через hardhat-etherscan.

Gas та пріоритетні fees (EIP-1559)

Після впровадження EIP-1559 транзакції використовують maxFeePerGas та maxPriorityFeePerGas. Наші інженери динамічно оцінюють параметри:

const feeData = await provider.getFeeData(); // maxFeePerGas: baseFee * 2 + maxPriorityFeePerGas (2x buffer на зростання baseFee) // maxPriorityFeePerGas: 1-3 Gwei для звичайного деплою 
Ситуація maxPriorityFeePerGas Стратегія
Деплой у спокійній мережі 1–3 Gwei Економія газу, очікування довше
Терміновий деплой при перевантаженні 5–10 Gwei Швидка транзакція, але дорожче

Моніторинг поточної ціни газу: eth_gasPrice через блокчейн-експлорери або API. Налаштування EIP-1559 дозволяє економити до 30% на газі порівняно з фіксованим gasPrice.

Управління приватним ключем деплойера

Ніколи не деплоїмо з ключем, який використовується для інших операцій. Схема:

  • Окремий гаманець тільки для деплою.
  • Поповнення з multisig (Safe) точною сумою для деплою + невеликий буфер (5–10%).
  • Після деплою — передача ownership на multisig: contract.transferOwnership(safeAddress).
  • Приватний ключ деплойера — в secrets manager (AWS Secrets Manager, HashiCorp Vault), не в .env.

Після деплою

  • Верифікація вихідного коду на Etherscan (через hardhat-etherscan або hardhat-verify).
  • Запис адреси контракту в deployment manifest з chainId, blockNumber, txHash.
  • Перевірка всіх view-функцій (часто 20+) через Etherscan Read Contract.
  • Тестовий виклик кожної write-функції (3-5) з мінімальними параметрами.
  • Налаштування моніторингу (Tenderly Alerts або OpenZeppelin Defender) на критичні події.

Що входить в нашу роботу по деплою під ключ

Етап Результат
Аудит і тестування Звіт Slither, Mythril, покриття тестів
Налаштування конфігурації Hardhat/Foundry config, RPC, газ
Деплой Адреса контракту, посилання на Etherscan
Верифікація Підтверджений вихідний код
Передача управління Ownership на multisig замовника
Моніторинг Dashboard Tenderly/Defender
Документація Deployment manifest, інструкція з використання

Коли варто використовувати upgradeable контракти?

Якщо потрібна можливість оновлення логіки — деплой через proxy паттерн (UUPS або Transparent Proxy з OpenZeppelin). Це додає складність та gas overhead, але дає можливість виправити баги після деплою. UUPS більш переважний ніж Transparent Proxy — логіка апгрейду в implementation контракті, що дешевше на ~30% gas при кожному виклику через proxy.

Ми використовуємо перевірені бібліотеки та патерни. Наш досвід — понад 10 років у блокчейн-розробці, сертифіковані інженери з Solidity. Гарантуємо, що контракт буде розгорнуто безпечно та оптимально по газу. Обговоріть ваш проєкт з нашими інженерами. Замовте деплой під ключ: отримайте консультацію та точний розрахунок.