Деплой смарт-контракту в Ethereum mainnet — момент, коли ціна помилки максимальна. Кожен рядок коду, кожен параметр газу та вибір проксі-патерну безпосередньо впливають на безпеку та бюджет. Уявіть: ви написали контракт, прогнали тести, все ок. Деплоїте в mainnet і... транзакція зависає через неправильно виставлений газ, або з'ясовується, що конструктор викликається з невірними аргументами, і контракт потрібно передеплоювати. Такі помилки коштують часу та грошей. Наш підхід мінімізує ризики. За багато років ми розгорнули понад 200 контрактів із сукупним TVL понад $50M. Деплой в mainnet — точка неповернення: контракт без upgradeable патерну змінити не можна, помилки в логіці коштують реальних грошей, а неправильно виставлені параметри gas можуть призвести до завислої транзакції в момент пікового навантаження мережі. Тому ми пропонуємо деплой під ключ з повною перевіркою.
Як підготуватися до деплою в mainnet?
Перед відправкою транзакції проходимо обов'язковий чеклист. Він включає аудит та тестування, верифікацію компілятора та налаштування мережі.
Переддеплойний чеклист:
-
Аудит і тестування:
- Покриття тестами ≥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.
- Покриття тестами ≥95% по statement coverage (Hardhat Coverage або Foundry
Чому важливий аудит і тестування?
Помилка в логіці може призвести до втрати коштів користувачів або самого проєкту. Відомий випадок, коли через відсутність перевірки 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 */], }); } Кроки:
- Налаштування конфігурації мережі та RPC.
- Компіляція з фіксованим компілятором.
- Деплой через скрипт із зазначенням constructor args.
- Автоматична верифікація через 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. Гарантуємо, що контракт буде розгорнуто безпечно та оптимально по газу. Обговоріть ваш проєкт з нашими інженерами. Замовте деплой під ключ: отримайте консультацію та точний розрахунок.







