deploy.sh

Обзор

deploy.sh — это скрипт на shell, предназначенный для автоматизации процесса развертывания смарт-контрактов в локальной среде разработки с использованием Ethereum-совместимых инструментов (Anvil, cast, forge). Скрипт последовательно:

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


Подробное описание шагов и команд

1. Ожидание запуска локальных нод

until cast client --rpc-url http://anvil:8545 > /dev/null 2>&1; do sleep 1; done
until cast client --rpc-url http://anvil-settlement:8546 > /dev/null 2>&1; do sleep 1; done

2. Предварительное развертывание Multicall3 контрактов

cast send 0x05f32b3cc3888453ff71b01135b34ff8e41263f2 --value 100000000000000000 --private-key 0xac0974... --rpc-url http://anvil:8545
cast publish <contract_bytecode> --rpc-url http://anvil:8545
cast send 0x05f32b3cc3888453ff71b01135b34ff8e41263f2 --value 100000000000000000 --private-key 0xac0974... --rpc-url http://anvil-settlement:8546
cast publish <contract_bytecode> --rpc-url http://anvil-settlement:8546

3. Запуск Forge скриптов развертывания

forge script script/LocalDeploy.s.sol:LocalDeploy --rpc-url http://anvil:8545 -vv --broadcast --private-key 0xac0974... | tee /deploy-data/deployment.log
forge script script/SettlementChainDeploy.s.sol:SettlementChainDeploy --rpc-url http://anvil-settlement:8546 -vv --broadcast --private-key 0xac0974... | tee /deploy-data/settlement-deployment.log
forge script script/ValSetDriverDeploy.s.sol:ValSetDriverDeploy --rpc-url http://anvil:8545 -vv --broadcast --private-key 0xac0974... | tee /deploy-data/valsetdriver-deployment.log

4. Ожидание файла с relay контрактаим

until [ -f /deploy-data/relay_contracts.json ]; do sleep 2; done

5. Настройка интервального майнинга

cast rpc --rpc-url http://anvil:8545 evm_setIntervalMining 1
cast rpc --rpc-url http://anvil-settlement:8546 evm_setIntervalMining 1

6. Принудительная генерация блока

cast rpc --rpc-url http://anvil:8545 evm_mine
cast rpc --rpc-url http://anvil-settlement:8546 evm_mine

7. Завершение и создание маркера успешного развертывания

echo "$(date): Deployment completed successfully" > /deploy-data/deployment-complete.marker
echo "Deployment completion marker created" 

Важные детали реализации


Взаимодействие с другими частями системы


Пример использования

# Запуск скрипта в терминале (предположим, что Anvil ноды уже запущены)
./deploy.sh

Вывод будет содержать информацию о прогрессе, задержках ожидания и финальном успешном завершении.


Диаграмма процесса deploy.sh

flowchart TD
    A[Start: Запуск скрипта] --> B[Ожидание запуска anvil (8545)]
    B --> C[Ожидание запуска anvil-settlement (8546)]
    C --> D[Отправка ETH и публикация Multicall3 на anvil]
    D --> E[Отправка ETH и публикация Multicall3 на anvil-settlement]
    E --> F[Запуск forge скрипта LocalDeploy]
    F --> G[Запуск forge скрипта SettlementChainDeploy]
    G --> H[Запуск forge скрипта ValSetDriverDeploy]
    H --> I[Ожидание файла relay_contracts.json]
    I --> J[Настройка интервального майнинга на обеих нодах]
    J --> K[Принудительная генерация блока на обеих нодах]
    K --> L[Создание маркера успешного развертывания]
    L --> M[Завершение: Deployment completed]

Итог

deploy.sh — ключевой скрипт для автоматизации локального развертывания и тестирования Ethereum смарт-контрактов, обеспечивающий последовательное выполнение шагов с контролем состояния нод и логированием результатов. Он интегрирует Foundry инструменты и локальные ноды, создавая удобную среду для дальнейшей разработки и тестирования.