Files
proxmox/scripts/deploy-and-configure-weth9-bridge-chain138.sh
defiQUG bea1903ac9
Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
Sync all local changes: docs, config, scripts, submodule refs, verification evidence
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-21 15:46:06 -08:00

122 lines
4.5 KiB
Bash
Executable File

#!/usr/bin/env bash
# Deploy CCIPWETH9Bridge on Chain 138 with the working CCIP router and configure it.
# Fixes router mismatch: old bridge pointed to 0x80226... (no code); new bridge uses 0x8078A... (has code).
#
# Requires: PRIVATE_KEY (read from dotenv: smom-dbis-138/.env or root .env), foundry (forge, cast). Uses RPC_URL_138 (Core) from load-project-env.
# Use --dry-run to simulate (no PRIVATE_KEY needed). After run: export CCIPWETH9_BRIDGE_CHAIN138=<printed address>.
set -euo pipefail
DRY_RUN=false
for arg in "$@"; do [[ "$arg" == "--dry-run" ]] && DRY_RUN=true && break; done
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
SMOM_DIR="${SMOM_DBIS_138_DIR:-$REPO_ROOT/smom-dbis-138}"
# Load PRIVATE_KEY from dotenv (root .env, then smom-dbis-138/.env)
[[ -f "${SCRIPT_DIR}/lib/load-project-env.sh" ]] && source "${SCRIPT_DIR}/lib/load-project-env.sh" 2>/dev/null || true
# Working CCIP router (has code; Mainnet + WETH9 configured). Do NOT use 0x80226fc0... (no code).
CCIP_ROUTER_WORKING="0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e"
# Chain 138 Core RPC (standard: RPC_URL_138) — admin/deploy, VMID 2101
RPC="${RPC_URL_138:-http://${RPC_CORE_1:-192.168.11.211}:8545}"
MAINNET_CHAIN_SELECTOR="5009297550715157269"
MAINNET_WETH9_RECEIVER="${MAINNET_WETH9_BRIDGE_ADDRESS:-0x2A0840e5117683b11682ac46f5CF5621E67269E3}"
WETH9_CHAIN138="0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"
LINK_CHAIN138="${LINK_TOKEN_CHAIN138:-0x362E9a45Ef6e554760f9671938235Cbc9b6E80Ed}"
MAX_UINT256="115792089237316195423570985008687907853269984665640564039457584007913129639935"
if [[ "$DRY_RUN" == "true" ]]; then
echo "=== DRY RUN: Deploy and configure WETH9 bridge (Chain 138) ==="
echo " RPC: $RPC (RPC_URL_138 = Chain 138 Core)"
echo " CCIP Router: $CCIP_ROUTER_WORKING"
echo " Would: forge script (no broadcast), addDestination, approve WETH9/LINK"
echo " To run for real: set PRIVATE_KEY and RPC_URL_138 in smom-dbis-138/.env && $0"
exit 0
fi
if [[ -z "${PRIVATE_KEY:-}" ]]; then
echo "ERROR: PRIVATE_KEY is required (deployer key for Chain 138)." >&2
echo " Set PRIVATE_KEY in smom-dbis-138/.env or root .env (or export PRIVATE_KEY=0x...)." >&2
echo " Or use --dry-run to simulate." >&2
exit 1
fi
if [[ ! -d "$SMOM_DIR" ]]; then
echo "ERROR: smom-dbis-138 dir not found: $SMOM_DIR" >&2
exit 1
fi
echo "=== Deploy and configure WETH9 bridge (Chain 138) ==="
echo " RPC: $RPC (RPC_URL_138 = Core)"
echo " CCIP Router: $CCIP_ROUTER_WORKING"
echo ""
export CCIP_ROUTER="$CCIP_ROUTER_WORKING"
export CCIP_ROUTER_ADDRESS="$CCIP_ROUTER_WORKING"
# Deploy
OUTPUT_LOG="$(mktemp)"
trap 'rm -f "$OUTPUT_LOG"' EXIT
(
cd "$SMOM_DIR"
forge script script/DeployCCIPWETH9Bridge.s.sol \
--rpc-url "$RPC" \
--broadcast \
--private-key "$PRIVATE_KEY" \
--legacy \
--with-gas-price ${GAS_PRICE:-1000000000} \
2>&1
) | tee "$OUTPUT_LOG"
# Parse deployed bridge address (console.log "CCIPWETH9Bridge deployed at:", address(bridge))
NEW_BRIDGE=""
if grep -q "CCIPWETH9Bridge deployed at:" "$OUTPUT_LOG"; then
NEW_BRIDGE=$(grep "CCIPWETH9Bridge deployed at:" "$OUTPUT_LOG" | grep -oE '0x[0-9a-fA-F]{40}' | head -1)
fi
if [[ -z "$NEW_BRIDGE" ]]; then
# Fallback: last 0x... in broadcast summary
NEW_BRIDGE=$(grep -oE '0x[0-9a-fA-F]{40}' "$OUTPUT_LOG" | tail -1)
fi
if [[ -z "$NEW_BRIDGE" ]]; then
echo "ERROR: Could not parse deployed bridge address from forge output." >&2
echo " Check $OUTPUT_LOG and set CCIPWETH9_BRIDGE_CHAIN138 manually after deploy." >&2
exit 1
fi
echo ""
echo " New WETH9 Bridge: $NEW_BRIDGE"
echo " Configuring destination and approvals..."
echo ""
# addDestination(mainnet selector, mainnet receiver)
cast send "$NEW_BRIDGE" "addDestination(uint64,address)" \
"$MAINNET_CHAIN_SELECTOR" \
"$MAINNET_WETH9_RECEIVER" \
--private-key "$PRIVATE_KEY" \
--rpc-url "$RPC" \
--quiet 2>/dev/null || true
# Approve WETH9 for new bridge
cast send "$WETH9_CHAIN138" "approve(address,uint256)" \
"$NEW_BRIDGE" \
"$MAX_UINT256" \
--private-key "$PRIVATE_KEY" \
--rpc-url "$RPC" \
--quiet 2>/dev/null || true
# Approve LINK for new bridge (CCIP fees)
cast send "$LINK_CHAIN138" "approve(address,uint256)" \
"$NEW_BRIDGE" \
"$MAX_UINT256" \
--private-key "$PRIVATE_KEY" \
--rpc-url "$RPC" \
--quiet 2>/dev/null || true
echo "=== Done ==="
echo ""
echo "Export this in your shell and .env so all bridge scripts use the new bridge:"
echo " export CCIPWETH9_BRIDGE_CHAIN138=$NEW_BRIDGE"
echo ""
echo "Then run bridge operations (e.g. sendCrossChain) against this address."