Files
proxmox/scripts/bridge/fund-mainnet-relay-bridge.sh
defiQUG dbd517b279 Sync workspace: config, docs, scripts, CI, operator rules, and submodule pointers.
- Update dbis_core, cross-chain-pmm-lps, explorer-monorepo, metamask-integration, pr-workspace/chains
- Omit embedded publish git dirs and empty placeholders from index

Made-with: Cursor
2026-04-12 06:12:20 -07:00

97 lines
3.8 KiB
Bash
Executable File

#!/usr/bin/env bash
# Fund the mainnet CCIPRelayBridge with WETH from the deployer wallet.
# Usage:
# ./scripts/bridge/fund-mainnet-relay-bridge.sh [amount_wei] [--dry-run]
# ./scripts/bridge/fund-mainnet-relay-bridge.sh --target-bridge-balance-wei 10000000000000000 [--dry-run]
# If amount_wei is omitted, transfers the deployer's full WETH balance.
# Env: PRIVATE_KEY, ETHEREUM_MAINNET_RPC or RPC_URL_MAINNET (use Infura/Alchemy if llamarpc rate-limits)
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
# shellcheck source=/dev/null
source "${PROJECT_ROOT}/scripts/lib/load-project-env.sh" >/dev/null 2>&1 || true
DEPLOYER="${DEPLOYER_ADDRESS:-0x4A666F96fC8764181194447A7dFdb7d471b301C8}"
WETH="${WETH9_MAINNET:-0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2}"
BRIDGE="${CCIP_RELAY_BRIDGE_MAINNET:-0xF9A32F37099c582D28b4dE7Fca6eaC1e5259f939}"
RPC="${RPC_URL_MAINNET:-${ETHEREUM_MAINNET_RPC:-https://ethereum.publicnode.com}}"
DRY_RUN=0
TARGET_BRIDGE_BALANCE_WEI=""
AMOUNT_WEI=""
while [[ $# -gt 0 ]]; do
case "$1" in
--dry-run)
DRY_RUN=1
shift
;;
--target-bridge-balance-wei)
TARGET_BRIDGE_BALANCE_WEI="${2:-}"
shift 2
;;
*)
if [[ -z "$AMOUNT_WEI" ]]; then
AMOUNT_WEI="$1"
shift
else
echo "Usage: $0 [amount_wei] [--target-bridge-balance-wei WEI] [--dry-run]" >&2
exit 1
fi
;;
esac
done
command -v cast &>/dev/null || { echo "cast not found (install Foundry)"; exit 1; }
normalize_uint() {
awk '{print $1}'
}
DEPLOYER_BALANCE="$( (cast call "$WETH" "balanceOf(address)(uint256)" "$DEPLOYER" --rpc-url "$RPC" 2>/dev/null || echo "0") | normalize_uint )"
BRIDGE_BALANCE="$( (cast call "$WETH" "balanceOf(address)(uint256)" "$BRIDGE" --rpc-url "$RPC" 2>/dev/null || echo "0") | normalize_uint )"
echo "Deployer WETH balance (mainnet): $DEPLOYER_BALANCE wei"
echo "Bridge WETH balance (mainnet): $BRIDGE_BALANCE wei"
if [[ -n "$TARGET_BRIDGE_BALANCE_WEI" ]]; then
AMOUNT_WEI="$(node -e 'const target=BigInt(process.argv[1]); const current=BigInt(process.argv[2]); const delta=target>current?target-current:0n; process.stdout.write(delta.toString())' "$TARGET_BRIDGE_BALANCE_WEI" "$BRIDGE_BALANCE")"
echo "Target bridge balance: $TARGET_BRIDGE_BALANCE_WEI wei"
echo "Calculated transfer: $AMOUNT_WEI wei"
fi
if [[ -z "$AMOUNT_WEI" ]]; then
AMOUNT_WEI="$DEPLOYER_BALANCE"
echo "Transferring full deployer balance: $AMOUNT_WEI wei"
else
echo "Transferring: $AMOUNT_WEI wei"
fi
if [[ -z "$AMOUNT_WEI" ]] || [[ "$AMOUNT_WEI" = "0" ]]; then
echo "Nothing to transfer."
exit 0
fi
if [[ "$DRY_RUN" = "1" ]]; then
if node -e 'const amount=BigInt(process.argv[1]); const deployer=BigInt(process.argv[2]); process.exit(amount > deployer ? 1 : 0)' "$AMOUNT_WEI" "$DEPLOYER_BALANCE"; then
:
else
echo "[dry-run] Warning: requested transfer exceeds current deployer balance."
fi
echo "[dry-run] Would execute:"
echo "cast send $WETH \"transfer(address,uint256)\" $BRIDGE \"$AMOUNT_WEI\" --rpc-url \"$RPC\" --private-key \"\$PRIVATE_KEY\" --legacy"
exit 0
fi
[[ -n "${PRIVATE_KEY:-}" ]] || { echo "PRIVATE_KEY required unless --dry-run is used"; exit 1; }
node -e 'const amount=BigInt(process.argv[1]); const deployer=BigInt(process.argv[2]); if (amount > deployer) { console.error(`Requested transfer ${amount} exceeds deployer balance ${deployer}.`); process.exit(2); }' "$AMOUNT_WEI" "$DEPLOYER_BALANCE"
cast send "$WETH" "transfer(address,uint256)" "$BRIDGE" "$AMOUNT_WEI" \
--rpc-url "$RPC" \
--private-key "$PRIVATE_KEY" \
--legacy
FINAL_BRIDGE_BALANCE="$( (cast call "$WETH" "balanceOf(address)(uint256)" "$BRIDGE" --rpc-url "$RPC" 2>/dev/null || echo "0") | normalize_uint )"
echo "Done. Bridge WETH balance: $FINAL_BRIDGE_BALANCE wei"