Настройка автоматического деплоя через Foundry multi-chain

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1 услугВсе 1306 услуг
Настройка автоматического деплоя через Foundry multi-chain
Простая
от 1 рабочего дня до 3 рабочих дней
Часто задаваемые вопросы
Направления блокчейн-разработки
Этапы блокчейн-разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1258
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1170
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    873
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1092
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    563
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    830

Настройка автоматического деплоя через Foundry multi-chain

Задеплоить контракт в пять сетей вручную — значит пять раз прогнать forge script, пять раз скопировать адрес, пять раз верифицировать на соответствующем explorer'е. При этом забыть одну сеть или допустить опечатку в адресе — классическая история. Foundry multi-chain деплой решает это одним скриптом.

Структура деплойного скрипта в Foundry

Foundry Script — это Solidity-контракт, наследующий Script из forge-std. В нём пишется логика деплоя, которая выполняется через forge script с флагом --broadcast.

Для multi-chain деплоя ключевой момент — управление конфигурацией по чейнам. Стандартный подход: JSON-файл с параметрами для каждой сети и чтение через vm.readFile + парсинг через stdJson.

deployments/
  config.json          # { "arbitrum": { "fee": 100 }, "polygon": { ... } }
  arbitrum.json        # { "MyContract": "0x..." }  (после деплоя)
  polygon.json
script/
  Deploy.s.sol

В Deploy.s.sol читаем конфиг через vm.readFile, деплоим с нужными параметрами, записываем адрес через vm.writeFile. После деплоя JSON-файлы с адресами — source of truth для frontend и npm-пакета.

Запуск на нескольких сетях

Bash-скрипт, оборачивающий forge script:

CHAINS=("arbitrum" "polygon" "optimism" "base" "bsc")
for chain in "${CHAINS[@]}"; do
  forge script script/Deploy.s.sol \
    --rpc-url $chain \
    --broadcast \
    --verify \
    --etherscan-api-key $ETHERSCAN_API_KEY \
    -vvv
done

RPC URLs настраиваются в foundry.toml:

[rpc_endpoints]
arbitrum = "${ARBITRUM_RPC_URL}"
polygon = "${POLYGON_RPC_URL}"

Верификация (--verify) запускается автоматически после деплоя. Для сетей с нестандартным explorer'ом (BSC → BscScan, Polygon → PolygonScan) — отдельный ETHERSCAN_API_KEY для каждой сети через [etherscan] секцию в foundry.toml.

Детерминированные адреса через CREATE2

Для cross-chain систем часто важно, чтобы контракт имел одинаковый адрес на всех чейнах. CREATE даёт адрес от sender + nonce — если на одной из сетей nonce сдвинулся (например, была ошибочная транзакция), адреса разойдутся.

CREATE2 вычисляет адрес от deployer + salt + bytecode. Один и тот же deployer с одним salt даёт одинаковый адрес везде. Стандартный deployer: 0x4e59b44847b379578588920cA78FbF26c0B4956C (Foundry deterministic deployer, присутствует на всех EVM-чейнах).

В Foundry: new MyContract{salt: bytes32("v1")}(constructorArg) автоматически использует CREATE2 через этот deployer.

CI/CD через GitHub Actions

- name: Deploy to all chains
  env:
    PRIVATE_KEY: ${{ secrets.DEPLOYER_PRIVATE_KEY }}
    ARBITRUM_RPC_URL: ${{ secrets.ARBITRUM_RPC_URL }}
  run: |
    forge script script/Deploy.s.sol --rpc-url arbitrum --broadcast --verify

Приватный ключ — из GitHub Secrets. Для production лучше: Hardhat Deploy с AWS KMS или скрипт с Safe Transaction Builder (деплой через мультисиг).

Сроки

Настройка Foundry multi-chain деплоя (скрипт, конфиг, CI/CD) для проекта с 1-3 контрактами на 3-5 сетях — 1 рабочий день.