Деплой смарт-контракта в 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. Гарантируем, что контракт будет развёрнут безопасно и оптимально по газу. Обсудите ваш проект с нашими инженерами. Закажите деплой под ключ: получите консультацию и точный расчёт.







