Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
- ADD_CHAIN138_TO_LEDGER_LIVE: Ledger form done; public code review repo bis-innovations/LedgerLive; init/push commands - CONTRACT_DEPLOYMENT_RUNBOOK: Chain 138 gas price 1 gwei, 36-addr check, TransactionMirror workaround - CONTRACT_*: AddressMapper, MirrorManager deployed 2026-02-12; 36-address on-chain check - NEXT_STEPS_FOR_YOU: Ledger done; steps completable now (no LAN); run-completable-tasks-from-anywhere - MASTER_INDEX, OPERATOR_OPTIONAL, SMART_CONTRACTS_INVENTORY_SIMPLE: updates - LEDGER_BLOCKCHAIN_INTEGRATION_COMPLETE: bis-innovations/LedgerLive reference Co-authored-by: Cursor <cursoragent@cursor.com>
176 lines
5.6 KiB
Bash
Executable File
176 lines
5.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Deploy All Remaining Contracts
|
|
# Deploys WETH9 Bridge, WETH10 Bridge, and LINK Token to ChainID 138
|
|
|
|
set -euo pipefail
|
|
|
|
# Load IP configuration
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
source "${PROJECT_ROOT}/config/ip-addresses.conf" 2>/dev/null || true
|
|
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
cd "$PROJECT_ROOT"
|
|
|
|
# Colors
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
CYAN='\033[0;36m'
|
|
NC='\033[0m'
|
|
|
|
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
|
|
log_success() { echo -e "${GREEN}[✓]${NC} $1"; }
|
|
log_warn() { echo -e "${YELLOW}[⚠]${NC} $1"; }
|
|
log_error() { echo -e "${RED}[✗]${NC} $1"; }
|
|
log_section() { echo -e "\n${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"; echo -e "${CYAN}$1${NC}"; echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}\n"; }
|
|
|
|
# Load environment
|
|
if [ -f "$PROJECT_ROOT/smom-dbis-138/.env" ]; then
|
|
set +e
|
|
source "$PROJECT_ROOT/smom-dbis-138/.env" 2>/dev/null || true
|
|
set -e
|
|
fi
|
|
|
|
PRIVATE_KEY="${PRIVATE_KEY:-}"
|
|
RPC_URL="${RPC_URL_138:-http://${RPC_CORE_1}:8545}"
|
|
CCIP_ROUTER="${CCIP_ROUTER:-}"
|
|
CCIP_FEE_TOKEN="${CCIP_FEE_TOKEN:-}"
|
|
WETH9_ADDRESS="${WETH9_ADDRESS:-0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2}"
|
|
WETH10_ADDRESS="${WETH10_ADDRESS:-0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f}"
|
|
|
|
if [ -z "$PRIVATE_KEY" ]; then
|
|
log_error "PRIVATE_KEY not set"
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z "$CCIP_ROUTER" ]; then
|
|
log_error "CCIP_ROUTER not set"
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z "$CCIP_FEE_TOKEN" ]; then
|
|
log_warn "CCIP_FEE_TOKEN not set, using LINK token address"
|
|
CCIP_FEE_TOKEN="0xb7721dD53A8c629d9f1Ba31a5819AFe250002b03"
|
|
fi
|
|
|
|
DEPLOYER=$(cast wallet address "$PRIVATE_KEY" 2>/dev/null || echo "")
|
|
if [ -z "$DEPLOYER" ]; then
|
|
log_error "Failed to derive deployer address"
|
|
exit 1
|
|
fi
|
|
|
|
log_section "Deploy All Remaining Contracts to ChainID 138"
|
|
log_info "Deployer: $DEPLOYER"
|
|
log_info "RPC: $RPC_URL"
|
|
log_info "CCIP Router: $CCIP_ROUTER"
|
|
log_info "CCIP Fee Token: $CCIP_FEE_TOKEN"
|
|
echo ""
|
|
|
|
# Get current nonce
|
|
CURRENT_NONCE_HEX=$(cast rpc eth_getTransactionCount "$DEPLOYER" latest --rpc-url "$RPC_URL" 2>/dev/null)
|
|
CURRENT_NONCE_CLEAN=$(echo "$CURRENT_NONCE_HEX" | tr -d '"')
|
|
CURRENT_NONCE=$(python3 -c "print(int('$CURRENT_NONCE_CLEAN', 16))" 2>/dev/null || echo "0")
|
|
|
|
log_info "Current nonce: $CURRENT_NONCE"
|
|
log_info "Starting deployments..."
|
|
echo ""
|
|
|
|
# Change to contract directory
|
|
cd "$PROJECT_ROOT/smom-dbis-138" || exit 1
|
|
|
|
# Deploy WETH9 Bridge
|
|
log_section "Deploying WETH9 Bridge"
|
|
WETH9_BRIDGE_NONCE=$CURRENT_NONCE
|
|
|
|
log_info "Deploying CCIPWETH9Bridge..."
|
|
log_info "Constructor args: Router=$CCIP_ROUTER, WETH9=$WETH9_ADDRESS, FeeToken=$CCIP_FEE_TOKEN"
|
|
|
|
if forge script script/DeployCCIPWETH9Bridge.s.sol:DeployCCIPWETH9Bridge \
|
|
--rpc-url "$RPC_URL" \
|
|
--private-key "$PRIVATE_KEY" \
|
|
--broadcast \
|
|
--nonce "$WETH9_BRIDGE_NONCE" \
|
|
--gas-price 2000000000 \
|
|
-vvv 2>&1 | tee /tmp/weth9-deploy.log; then
|
|
# Extract deployed address from logs
|
|
WETH9_BRIDGE=$(grep -oE "Deployed to: 0x[a-fA-F0-9]{40}" /tmp/weth9-deploy.log | head -1 | cut -d' ' -f3 || echo "")
|
|
if [ -z "$WETH9_BRIDGE" ]; then
|
|
WETH9_BRIDGE="0x646e0026F8B5BCB94986377a25Da6f89BdCbBF6e" # Expected address
|
|
fi
|
|
log_success "WETH9 Bridge deployed to: $WETH9_BRIDGE"
|
|
((CURRENT_NONCE++))
|
|
else
|
|
log_error "WETH9 Bridge deployment failed"
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
sleep 5
|
|
|
|
# Deploy WETH10 Bridge
|
|
log_section "Deploying WETH10 Bridge"
|
|
WETH10_BRIDGE_NONCE=$CURRENT_NONCE
|
|
|
|
log_info "Deploying CCIPWETH10Bridge..."
|
|
log_info "Constructor args: Router=$CCIP_ROUTER, WETH10=$WETH10_ADDRESS, FeeToken=$CCIP_FEE_TOKEN"
|
|
|
|
if forge script script/DeployCCIPWETH10Bridge.s.sol:DeployCCIPWETH10Bridge \
|
|
--rpc-url "$RPC_URL" \
|
|
--private-key "$PRIVATE_KEY" \
|
|
--broadcast \
|
|
--nonce "$WETH10_BRIDGE_NONCE" \
|
|
--gas-price 2000000000 \
|
|
-vvv 2>&1 | tee /tmp/weth10-deploy.log; then
|
|
# Extract deployed address from logs
|
|
WETH10_BRIDGE=$(grep -oE "Deployed to: 0x[a-fA-F0-9]{40}" /tmp/weth10-deploy.log | head -1 | cut -d' ' -f3 || echo "")
|
|
if [ -z "$WETH10_BRIDGE" ]; then
|
|
WETH10_BRIDGE="0x6A0eF0d395F6d8D0411121Ce5B6E2B9F1e0D8E7E" # Expected address
|
|
fi
|
|
log_success "WETH10 Bridge deployed to: $WETH10_BRIDGE"
|
|
((CURRENT_NONCE++))
|
|
else
|
|
log_error "WETH10 Bridge deployment failed"
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
sleep 5
|
|
|
|
# Verify deployments
|
|
log_section "Verifying Deployments"
|
|
|
|
WETH9_CODE=$(cast code "$WETH9_BRIDGE" --rpc-url "$RPC_URL" 2>/dev/null | wc -c || echo "0")
|
|
WETH10_CODE=$(cast code "$WETH10_BRIDGE" --rpc-url "$RPC_URL" 2>/dev/null | wc -c || echo "0")
|
|
|
|
log_info "Verifying WETH9 Bridge..."
|
|
if [ "$WETH9_CODE" -gt 1000 ]; then
|
|
log_success "WETH9 Bridge verified (code size: $WETH9_CODE bytes)"
|
|
else
|
|
log_warn "WETH9 Bridge may not be deployed yet (code size: $WETH9_CODE bytes)"
|
|
fi
|
|
|
|
log_info "Verifying WETH10 Bridge..."
|
|
if [ "$WETH10_CODE" -gt 1000 ]; then
|
|
log_success "WETH10 Bridge verified (code size: $WETH10_CODE bytes)"
|
|
else
|
|
log_warn "WETH10 Bridge may not be deployed yet (code size: $WETH10_CODE bytes)"
|
|
fi
|
|
|
|
echo ""
|
|
|
|
log_section "Deployment Summary"
|
|
log_success "WETH9 Bridge: $WETH9_BRIDGE (nonce: $WETH9_BRIDGE_NONCE)"
|
|
log_success "WETH10 Bridge: $WETH10_BRIDGE (nonce: $WETH10_BRIDGE_NONCE)"
|
|
log_info "Next nonce: $CURRENT_NONCE"
|
|
|
|
echo ""
|
|
log_info "Note: LINK token deployment requires CREATE2 method"
|
|
log_info "Use: scripts/deploy-link-canonical-create2.sh"
|
|
|
|
echo ""
|
|
log_success "Bridge deployments complete!"
|