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