119 lines
4.2 KiB
Bash
Executable File
119 lines
4.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Admin template: CWMultiTokenBridgeL1.configureDestination for the eight chains
|
|
# that are not Mainnet / Avalanche (those typically already wired for cUSDT/cUSDC).
|
|
#
|
|
# Uses receiver addresses from CW_BRIDGE_OPTIMISM, CW_BRIDGE_CRONOS, CW_BRIDGE_BSC,
|
|
# CW_BRIDGE_GNOSIS, CW_BRIDGE_POLYGON, CW_BRIDGE_BASE, CW_BRIDGE_ARBITRUM, CW_BRIDGE_CELO
|
|
# (see smom-dbis-138/.env). CCIP selectors match docs/deployment/BRIDGE_CONFIGURATION.md
|
|
# and Chainlink CCIP directory — verify before mainnet use.
|
|
#
|
|
# Target contract: CW_L1_BRIDGE_CHAIN138 — onlyAdmin.
|
|
#
|
|
# Usage:
|
|
# bash scripts/deployment/cw-l1-configure-destination-8-chains.sh [--print-only]
|
|
# # default writes reports/status/cw-l1-configure-destination-8-chains.cast.sh
|
|
#
|
|
# Env:
|
|
# CW_L1_BRIDGE_CHAIN138, RPC_URL_138 (or CHAIN138_RPC), PRIVATE_KEY (only if you execute the .sh)
|
|
# CUSDT_ADDRESS_138, CUSDC_ADDRESS_138 (or override CANONICAL_TOKENS="0x...,0x...")
|
|
#
|
|
# Does not broadcast unless you run the generated file. Never commit private keys.
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
SMOM_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
PROXMOX_ROOT="$(cd "$SMOM_ROOT/.." && pwd)"
|
|
cd "$SMOM_ROOT"
|
|
|
|
PRINT_ONLY=0
|
|
[[ "${1:-}" == "--print-only" ]] && PRINT_ONLY=1
|
|
|
|
if [[ -f "$PROXMOX_ROOT/scripts/lib/load-project-env.sh" ]]; then
|
|
# shellcheck disable=SC1090
|
|
PROJECT_ROOT="$PROXMOX_ROOT" source "$PROXMOX_ROOT/scripts/lib/load-project-env.sh"
|
|
elif [[ -f .env ]]; then
|
|
set -a && source .env && set +a
|
|
fi
|
|
|
|
BRIDGE="${CW_L1_BRIDGE_CHAIN138:-}"
|
|
RPC="${RPC_URL_138:-${CHAIN138_RPC:-${RPC_URL:-http://192.168.11.211:8545}}}"
|
|
OUT_SH="${OUT_SH:-$SMOM_ROOT/reports/status/cw-l1-configure-destination-8-chains.cast.sh}"
|
|
|
|
if [[ -z "$BRIDGE" || "$BRIDGE" == "0x0000000000000000000000000000000000000000" ]]; then
|
|
echo "Set CW_L1_BRIDGE_CHAIN138 in .env" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Remaining eight (exclude Mainnet + Avalanche)
|
|
declare -a ROWS=(
|
|
"Optimism|3734403246176062136|${CW_BRIDGE_OPTIMISM:-}"
|
|
"Cronos|1456215246176062136|${CW_BRIDGE_CRONOS:-}"
|
|
"BSC|11344663589394136015|${CW_BRIDGE_BSC:-}"
|
|
"Gnosis|465200170687744372|${CW_BRIDGE_GNOSIS:-}"
|
|
"Polygon|4051577828743386545|${CW_BRIDGE_POLYGON:-}"
|
|
"Base|15971525489660198786|${CW_BRIDGE_BASE:-}"
|
|
"Arbitrum|4949039107694359620|${CW_BRIDGE_ARBITRUM:-}"
|
|
"Celo|1346049177634351622|${CW_BRIDGE_CELO:-}"
|
|
)
|
|
|
|
TOKENS_STR="${CANONICAL_TOKENS:-}"
|
|
if [[ -z "$TOKENS_STR" ]]; then
|
|
T1="${CUSDT_ADDRESS_138:-${COMPLIANT_USDT_ADDRESS:-}}"
|
|
T2="${CUSDC_ADDRESS_138:-${COMPLIANT_USDC_ADDRESS:-}}"
|
|
TOKENS_STR="${T1},${T2}"
|
|
fi
|
|
|
|
IFS=',' read -r -a TOKEN_ADDRS <<< "$(echo "$TOKENS_STR" | tr -d '[:space:]')"
|
|
[[ -n "${TOKEN_ADDRS[0]:-}" && "${TOKEN_ADDRS[0]}" == 0x* ]] || { echo "Set CUSDT_ADDRESS_138 or CANONICAL_TOKENS" >&2; exit 1; }
|
|
|
|
gen() {
|
|
local sym="$1" token="$2"
|
|
echo ""
|
|
echo "# --- $sym $token ---"
|
|
for row in "${ROWS[@]}"; do
|
|
IFS='|' read -r name sel recv <<< "$row"
|
|
if [[ -z "$recv" || "$recv" == "0x0000000000000000000000000000000000000000" ]]; then
|
|
echo "# SKIP $name: CW_BRIDGE_* receiver unset"
|
|
continue
|
|
fi
|
|
echo "# $sym -> $name (selector $sel) receiver=$recv"
|
|
echo "cast send \"$BRIDGE\" \\"
|
|
echo " \"configureDestination(address,uint64,address,bool)\" \\"
|
|
echo " \"$token\" \\"
|
|
echo " \"$sel\" \\"
|
|
echo " \"$recv\" \\"
|
|
echo " true \\"
|
|
echo " --rpc-url \"$RPC\" \\"
|
|
echo " --private-key \"\$PRIVATE_KEY\" \\"
|
|
echo " --legacy \\"
|
|
echo " --gas-limit 500000"
|
|
echo ""
|
|
echo "# Verify: cast call \"$BRIDGE\" \"destinations(address,uint64)(address,bool)\" \"$token\" \"$sel\" --rpc-url \"$RPC\""
|
|
echo ""
|
|
done
|
|
}
|
|
|
|
{
|
|
echo "#!/usr/bin/env bash"
|
|
echo "# Generated: cw-l1-configure-destination-8-chains.sh"
|
|
echo "# Admin-only: configureDestination on CW L1 for eight chains (not Mainnet/Avalanche)."
|
|
echo "# Requires: admin key = deployer or bridge admin; source .env with PRIVATE_KEY."
|
|
echo "set -euo pipefail"
|
|
echo ""
|
|
|
|
if [[ -n "${TOKEN_ADDRS[1]:-}" && "${TOKEN_ADDRS[1]}" == 0x* ]]; then
|
|
gen "cUSDT" "${TOKEN_ADDRS[0]}"
|
|
gen "cUSDC" "${TOKEN_ADDRS[1]}"
|
|
else
|
|
gen "TOKEN" "${TOKEN_ADDRS[0]}"
|
|
fi
|
|
} > "$OUT_SH"
|
|
chmod +x "$OUT_SH"
|
|
|
|
echo "Wrote: $OUT_SH"
|
|
echo ""
|
|
if [[ "$PRINT_ONLY" -eq 1 ]] || [[ -t 1 ]]; then
|
|
cat "$OUT_SH"
|
|
fi
|