Разработка скриптов деплоя смарт-контрактов под ключ

Разовый деплой через `forge create` или `npx hardhat deploy` с хардкодированными параметрами — это технический долг. Когда нужно задеплоить на 5 чейнов, потом воспроизвести на тестнете для аудиторов, затем повторить через 3 месяца для новой версии — выясняется, что никто не помнит точный порядок выз

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

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1450
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1309
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1005
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1270
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    719
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1011

Разовый деплой через forge create или npx hardhat deploy с хардкодированными параметрами — это технический долг. Когда нужно задеплоить на 5 чейнов, потом воспроизвести на тестнете для аудиторов, затем повторить через 3 месяца для новой версии — выясняется, что никто не помнит точный порядок вызовов, какие контракты нужно инициализировать после деплоя и на каком блоке была верификация. Недавно к нам обратилась команда протокола, у которой после ухода разработчика никто не мог повторить деплой на мейннет. Мы написали скрипт за день, и теперь деплой занимает 5 минут. Мы специализируемся на создании профессиональных скриптов деплоя под ключ: от параметризации до интеграции с CI/CD. Наш опыт — 5+ лет в Web3, более 50 успешных проектов. Свяжитесь с нами для консультации или получите индивидуальную оценку вашего проекта.

Какие проблемы решают скрипты деплоя?

Ручной деплой через forge create или Hardhat консоль приводит к нескольким типичным проблемам:

  • Отсутствие воспроизводимости: повторить точный порядок вызовов через месяц — лотерея.
  • Ошибки инициализации: забыли вызвать initialize() после прокси — контракт неработоспособен.
  • Потеря адресов: никто не записал, где лежит proxy или admin.
  • Долгое переключение сетей: при деплое на 5 сетей вручную — потеря времени на 80%.

Скрипты решают эти проблемы: один запуск, полный лог, автоматическая верификация.

Почему Forge Script — стандарт индустрии?

Foundry Script (.s.sol) — Solidity-файл, который выполняется как деплой-скрипт. Ключевое преимущество: один язык для контрактов и деплоя, проверка типов компилятором, возможность тестировать сам скрипт. В документации Foundry подчёркивается, что это значительно снижает количество ошибок по сравнению с JS-скриптами.

// SPDX-License-Identifier: MIT pragma solidity ^0.8.24; import {Script, console} from "forge-std/Script.sol"; import {MyProtocol} from "../src/MyProtocol.sol"; import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; contract DeployMyProtocol is Script { function run() external { uint256 deployerKey = vm.envUint("PRIVATE_KEY"); address deployer = vm.addr(deployerKey); vm.startBroadcast(deployerKey); ProxyAdmin admin = new ProxyAdmin(deployer); MyProtocol implementation = new MyProtocol(); bytes memory initData = abi.encodeCall( MyProtocol.initialize, (vm.envAddress("TREASURY"), vm.envUint("FEE_BPS")) ); TransparentUpgradeableProxy proxy = new TransparentUpgradeableProxy( address(implementation), address(admin), initData ); console.log("ProxyAdmin:", address(admin)); console.log("Implementation:", address(implementation)); console.log("Proxy:", address(proxy)); vm.stopBroadcast(); } } 

Запуск: forge script script/DeployMyProtocol.s.sol --rpc-url $RPC --broadcast --verify. Флаг --verify автоматически верифицирует все задеплоенные контракты через Etherscan API. --slow добавляет задержку между транзакциями — нужно для RPC-провайдеров с rate limits.

Как параметризация исключает ошибки?

Никакого хардкода адресов в скрипте. Всё через environment variables:

address treasury = vm.envAddress("TREASURY"); uint256 fee = vm.envUint("FEE_BPS"); bool isMainnet = vm.envBool("IS_MAINNET"); 

Для разных окружений: файлы .env.sepolia, .env.mainnet, .env.polygon. Скрипт деплоя один и тот же. Это экономит до 40% времени на подготовку деплоя.

Логирование адресов задеплоенных контрактов

После деплоя адреса нужно зафиксировать. Подходы:

JSON файл через foundry's --json флаг. forge script ... --json > deployments/sepolia.json — структурированный вывод с адресами, transaction hashes, block numbers.

Кастомное логирование в скрипте через vm.writeJson() и vm.writeFile():

string memory json = vm.serializeAddress("deployment", "proxy", address(proxy)); vm.writeJson(json, string.concat("deployments/", vm.toString(block.chainid), ".json")); 

Файлы деплоя коммитим в репозиторий — они служат источником истины для frontend, аналитики и будущих upgrade-скриптов.

Upgrade скрипты и мультичейн деплой

Для UUPS и Transparent Proxy паттернов отдельный скрипт для каждого upgrade:

contract UpgradeV2 is Script { function run() external { address proxy = vm.envAddress("PROXY_ADDRESS"); address admin = vm.envAddress("PROXY_ADMIN"); vm.startBroadcast(vm.envUint("PRIVATE_KEY")); MyProtocolV2 newImpl = new MyProtocolV2(); ProxyAdmin(admin).upgradeAndCall( ITransparentUpgradeableProxy(proxy), address(newImpl), "" ); vm.stopBroadcast(); } } 

Каждый upgrade-скрипт имеет имя с версией (UpgradeToV2.s.sol) и хранится в истории репозитория. Мультичейн деплой: скрипт запускается последовательно для каждого чейна:

forge script script/Deploy.s.sol --rpc-url $ETHEREUM_RPC --broadcast --verify forge script script/Deploy.s.sol --rpc-url $POLYGON_RPC --broadcast --verify --verifier-url $POLYGONSCAN_API forge script script/Deploy.s.sol --rpc-url $ARBITRUM_RPC --broadcast --verify 

Или через Makefile / shell скрипт с итерацией по массиву RPC endpoints. Наши скрипты сокращают время деплоя на 80% по сравнению с ручным подходом.

Что входит в нашу работу?

  • Разработка базового деплой-скрипта с параметризацией (env).
  • Настройка автоматической верификации через Etherscan API.
  • Логирование всех адресов и артефактов в JSON.
  • Создание upgrade-скриптов для UUPS/Transparent Proxy.
  • Поддержка мультичейн (Ethereum, Polygon, Arbitrum, BNB Chain и др.).
  • Интеграция с CI/CD (GitHub Actions, GitLab CI).
  • Документация и обучение вашей команды.
  • Гарантия корректности деплоя на тестнете перед мейннетом.

Сроки и стоимость

Написание базового деплой-скрипта с параметризацией и логированием — 1 день. Полная deployment infrastructure с upgrade скриптами, мультичейн поддержкой и CI интеграцией — 2-3 дня. Стоимость рассчитывается индивидуально после анализа вашего проекта. Клиенты экономят до 70% времени на деплое, что в пересчёте на зарплату инженера даёт десятки тысяч долларов экономии в год. Оценим ваш проект бесплатно — свяжитесь с нами.

Сравнение: ручной деплой vs скрипты

Критерий Ручной деплой Скрипты деплоя (наши)
Время на 1 чейн 30-60 мин 2-5 мин
Верификация вручную через Etherscan автоматически
Воспроизводимость низкая 100%
Ошибки инициализации часты исключены тестами
Мультичейн дни 1 час

Как мы гарантируем корректность?

Мы пишем тесты на деплой-скрипты (например, через Foundry), используем симуляцию транзакций в Tenderly, проверяем логов и проводим code review. После деплоя контракты верифицируются автоматически. Получите консультацию инженера — обсудим ваш проект и предложим решение.