Files
smom-dbis-138/scripts/deployment/deploy-contracts-once-ready.sh
defiQUG 1fb7266469 Add Oracle Aggregator and CCIP Integration
- Introduced Aggregator.sol for Chainlink-compatible oracle functionality, including round-based updates and access control.
- Added OracleWithCCIP.sol to extend Aggregator with CCIP cross-chain messaging capabilities.
- Created .gitmodules to include OpenZeppelin contracts as a submodule.
- Developed a comprehensive deployment guide in NEXT_STEPS_COMPLETE_GUIDE.md for Phase 2 and smart contract deployment.
- Implemented Vite configuration for the orchestration portal, supporting both Vue and React frameworks.
- Added server-side logic for the Multi-Cloud Orchestration Portal, including API endpoints for environment management and monitoring.
- Created scripts for resource import and usage validation across non-US regions.
- Added tests for CCIP error handling and integration to ensure robust functionality.
- Included various new files and directories for the orchestration portal and deployment scripts.
2025-12-12 14:57:48 -08:00

137 lines
7.1 KiB
Bash
Executable File

#!/usr/bin/env bash
# Deploy all contracts once network is producing blocks
# Usage: ./deploy-contracts-once-ready.sh
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
cd "$PROJECT_ROOT"
source .env 2>/dev/null || true
RPC_URL="${RPC_URL:-http://localhost:8545}"
PRIVATE_KEY="${PRIVATE_KEY:-}"
NGINX_IP="${NGINX_PROXY_IP:-20.160.58.99}"
if [ -z "$PRIVATE_KEY" ]; then
echo "❌ Error: PRIVATE_KEY environment variable not set"
exit 1
fi
# Ensure PRIVATE_KEY has 0x prefix
if [[ ! "$PRIVATE_KEY" =~ ^0x ]]; then
export PRIVATE_KEY="0x$PRIVATE_KEY"
fi
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "Deploy All Contracts - Network Ready"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "RPC URL: $RPC_URL"
echo "Deployer: $(cast wallet address --private-key "$PRIVATE_KEY" 2>/dev/null || echo 'unknown')"
echo ""
# Step 1: Verify network is ready
echo "📋 Step 1: Verifying network is producing blocks..."
BLOCK=$(cast block-number --rpc-url "$RPC_URL" 2>/dev/null | xargs printf "%d" 2>/dev/null || echo "0")
CHAIN=$(cast chain-id --rpc-url "$RPC_URL" 2>/dev/null | xargs printf "%d" 2>/dev/null || echo "0")
if [ "$BLOCK" -eq 0 ]; then
echo "⚠️ Network is still at block 0"
echo " Setting up SSH tunnel..."
pkill -f "ssh.*8545:10" 2>/dev/null || true
ssh -o StrictHostKeyChecking=no -f -N -L 8545:10.3.1.4:8545 besuadmin@"$NGINX_IP"
sleep 3
BLOCK=$(cast block-number --rpc-url "$RPC_URL" 2>/dev/null | xargs printf "%d" 2>/dev/null || echo "0")
fi
if [ "$BLOCK" -eq 0 ]; then
echo "❌ Network is not producing blocks yet"
echo " Please wait for IBFT validators to initialize"
echo " Run this script again once blocks are being produced"
exit 1
fi
echo "✅ Network is ready!"
echo " Current block: $BLOCK"
echo " Chain ID: $CHAIN"
echo ""
# Step 2: Deploy CCIP Infrastructure
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "Step 2: Deploy CCIP Infrastructure"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "📋 2.1: Deploy CCIP Router..."
forge script script/DeployCCIPRouter.s.sol:DeployCCIPRouter --rpc-url "$RPC_URL" --broadcast --private-key "$PRIVATE_KEY" --legacy -vvv 2>&1 | tee /tmp/ccip-router.log | grep -E "CCIP Router deployed|deployed at:|Error" | head -3
CCIP_ROUTER=$(grep -oE "0x[a-fA-F0-9]{40}" /tmp/ccip-router.log 2>/dev/null | head -1)
if [ -n "$CCIP_ROUTER" ]; then
echo " ✅ CCIP Router: $CCIP_ROUTER"
sed -i "s|^CCIP_ROUTER_ADDRESS=.*|CCIP_ROUTER_ADDRESS=$CCIP_ROUTER|" .env 2>/dev/null || echo "CCIP_ROUTER_ADDRESS=$CCIP_ROUTER" >> .env
export CCIP_ROUTER_ADDRESS="$CCIP_ROUTER"
fi
echo ""
echo "📋 2.2: Deploy CCIP Sender..."
forge script script/DeployCCIPSender.s.sol:DeployCCIPSender --rpc-url "$RPC_URL" --broadcast --private-key "$PRIVATE_KEY" --legacy -vvv 2>&1 | tee /tmp/ccip-sender.log | grep -E "CCIPSender deployed|deployed at:|Error" | head -3
CCIP_SENDER=$(grep -oE "0x[a-fA-F0-9]{40}" /tmp/ccip-sender.log 2>/dev/null | head -1)
if [ -n "$CCIP_SENDER" ]; then
echo " ✅ CCIP Sender: $CCIP_SENDER"
sed -i "s|^CCIP_SENDER_ADDRESS=.*|CCIP_SENDER_ADDRESS=$CCIP_SENDER|" .env 2>/dev/null || echo "CCIP_SENDER_ADDRESS=$CCIP_SENDER" >> .env
fi
echo ""
echo "📋 2.3: Deploy CCIP Receiver..."
forge script script/DeployCCIPReceiver.s.sol:DeployCCIPReceiver --rpc-url "$RPC_URL" --broadcast --private-key "$PRIVATE_KEY" --legacy -vvv 2>&1 | tee /tmp/ccip-receiver.log | grep -E "CCIPReceiver deployed|deployed at:|Error" | head -3
CCIP_RECEIVER=$(grep -oE "0x[a-fA-F0-9]{40}" /tmp/ccip-receiver.log 2>/dev/null | head -1)
if [ -n "$CCIP_RECEIVER" ]; then
echo " ✅ CCIP Receiver: $CCIP_RECEIVER"
sed -i "s|^CCIP_RECEIVER_ADDRESS=.*|CCIP_RECEIVER_ADDRESS=$CCIP_RECEIVER|" .env 2>/dev/null || echo "CCIP_RECEIVER_ADDRESS=$CCIP_RECEIVER" >> .env
fi
echo ""
echo "📋 2.4: Deploy CCIP WETH9 Bridge..."
forge script script/DeployCCIPWETH9Bridge.s.sol:DeployCCIPWETH9Bridge --rpc-url "$RPC_URL" --broadcast --private-key "$PRIVATE_KEY" --legacy -vvv 2>&1 | tee /tmp/ccip-weth9-bridge.log | grep -E "CCIPWETH9Bridge deployed|deployed at:|Error" | head -3
WETH9_BRIDGE=$(grep -oE "0x[a-fA-F0-9]{40}" /tmp/ccip-weth9-bridge.log 2>/dev/null | head -1)
if [ -n "$WETH9_BRIDGE" ]; then
echo " ✅ CCIP WETH9 Bridge: $WETH9_BRIDGE"
sed -i "s|^CCIP_WETH9_BRIDGE_ADDRESS=.*|CCIP_WETH9_BRIDGE_ADDRESS=$WETH9_BRIDGE|" .env 2>/dev/null || echo "CCIP_WETH9_BRIDGE_ADDRESS=$WETH9_BRIDGE" >> .env
fi
echo ""
echo "📋 2.5: Deploy CCIP WETH10 Bridge..."
forge script script/DeployCCIPWETH10Bridge.s.sol:DeployCCIPWETH10Bridge --rpc-url "$RPC_URL" --broadcast --private-key "$PRIVATE_KEY" --legacy -vvv 2>&1 | tee /tmp/ccip-weth10-bridge.log | grep -E "CCIPWETH10Bridge deployed|deployed at:|Error" | head -3
WETH10_BRIDGE=$(grep -oE "0x[a-fA-F0-9]{40}" /tmp/ccip-weth10-bridge.log 2>/dev/null | head -1)
if [ -n "$WETH10_BRIDGE" ]; then
echo " ✅ CCIP WETH10 Bridge: $WETH10_BRIDGE"
sed -i "s|^CCIP_WETH10_BRIDGE_ADDRESS=.*|CCIP_WETH10_BRIDGE_ADDRESS=$WETH10_BRIDGE|" .env 2>/dev/null || echo "CCIP_WETH10_BRIDGE_ADDRESS=$WETH10_BRIDGE" >> .env
fi
# Step 3: Deploy Core Contracts
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "Step 3: Deploy Core Contracts"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "📋 3.1: Deploy Multicall..."
forge script script/DeployMulticall.s.sol:DeployMulticall --rpc-url "$RPC_URL" --broadcast --private-key "$PRIVATE_KEY" --legacy -vvv 2>&1 | tee /tmp/multicall.log | grep -E "Multicall deployed|deployed at:|Error" | head -3
echo ""
echo "📋 3.2: Deploy Oracle..."
forge script script/DeployOracle.s.sol:DeployOracle --rpc-url "$RPC_URL" --broadcast --private-key "$PRIVATE_KEY" --legacy -vvv 2>&1 | tee /tmp/oracle.log | grep -E "Aggregator|Proxy|deployed at:|Error" | head -5
echo ""
echo "📋 3.3: Deploy MultiSig..."
forge script script/DeployMultiSig.s.sol:DeployMultiSig --rpc-url "$RPC_URL" --broadcast --private-key "$PRIVATE_KEY" --legacy -vvv 2>&1 | tee /tmp/multisig.log | grep -E "MultiSig|deployed at:|Error" | head -3
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "✅ Deployment Complete!"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "📋 Deployment addresses saved to .env"
echo ""