Files
proxmox/scripts/deployment/deployer-gas-auto-route.sh
defiQUG 3f76bc9507
Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
docs: update master documentation and push to Gitea (2026-03-06)
- MASTER_INDEX: Last Updated 2026-03-06; status 59/59 contracts; add NEXT_STEPS_LIST, CONTRACT_NEXT_STEPS_LIST
- docs/README, NEXT_STEPS_INDEX, 06-besu/MASTER_INDEX: Last Updated 2026-03-06
- Contract check script: 59 addresses (PMM, vault/reserve, CompliantFiatTokens); canonical CCIP/router
- New docs: EXECUTION_CHECKLIST, NEXT_STEPS_LIST, DOTENV_AUDIT, ADDITIONAL_PATHS, deployer gas runbook, WEMIX_ACQUISITION_TABLED, etc.
- Config: deployer-gas-routes, cro-wemix-swap-routes, routing-registry, token-mapping
- Scripts: check-contracts-on-chain-138, check-pmm-pool-balances-chain138, deployer-gas-auto-route, acquire-cro-and-wemix-gas
- Operator rule: operator-lan-access-check.mdc

Made-with: Cursor
2026-03-06 19:11:25 -08:00

159 lines
5.5 KiB
Bash
Executable File

#!/usr/bin/env bash
# Deployer gas auto-route orchestrator: for each chain where deployer native balance is below
# threshold, dispatch to internal (138), Protocolink (public), or manual (Wemix) path.
# Uses config/deployer-gas-routes.json and smom-dbis-138/.env for RPC and deployer.
#
# Usage:
# ./scripts/deployment/deployer-gas-auto-route.sh [--dry-run] [--chain CHAIN_ID] [--no-execute]
# # From repo root; load-project-env sources smom-dbis-138/.env
#
# Requires: jq, curl, cast (Foundry). Optional: Node for protocolink-swap-to-gas.js.
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
if [[ -f "$PROJECT_ROOT/scripts/lib/load-project-env.sh" ]]; then
source "$PROJECT_ROOT/scripts/lib/load-project-env.sh"
fi
CONFIG="${PROJECT_ROOT}/config/deployer-gas-routes.json"
DRY_RUN=false
NO_EXECUTE=false
CHAIN_FILTER=""
for arg in "$@"; do
case "$arg" in
--dry-run) DRY_RUN=true ;;
--no-execute) NO_EXECUTE=true ;;
--chain=*) CHAIN_FILTER="${arg#*=}" ;;
--chain) CHAIN_FILTER="${2:-}"; shift ;;
esac
done
if [[ ! -f "$CONFIG" ]]; then
echo "ERROR: Config not found: $CONFIG" >&2
exit 1
fi
DEPLOYER="${DEPLOYER_ADDRESS:-$(jq -r '.deployerAddress // empty' "$CONFIG")}"
if [[ -z "$DEPLOYER" && -n "${PRIVATE_KEY:-}" ]] && command -v cast &>/dev/null; then
DEPLOYER="$(cast wallet address "$PRIVATE_KEY" 2>/dev/null || true)"
fi
DEPLOYER="${DEPLOYER:-0x4A666F96fC8764181194447A7dFdb7d471b301C8}"
# Map chainId to RPC env var name (from check-balances-gas-and-deploy.sh)
get_rpc_for_chain() {
local c="$1"
case "$c" in
1) echo "${ETHEREUM_MAINNET_RPC:-}" ;;
56) echo "${BSC_RPC_URL:-${BSC_MAINNET_RPC:-}}" ;;
137) echo "${POLYGON_MAINNET_RPC:-}" ;;
138) echo "${RPC_URL_138:-}" ;;
10) echo "${OPTIMISM_MAINNET_RPC:-}" ;;
42161) echo "${ARBITRUM_MAINNET_RPC:-}" ;;
8453) echo "${BASE_MAINNET_RPC:-}" ;;
43114) echo "${AVALANCHE_RPC_URL:-${AVALANCHE_MAINNET_RPC:-}}" ;;
100) echo "${GNOSIS_MAINNET_RPC:-${GNOSIS_RPC:-}}" ;;
25) echo "${CRONOS_RPC_URL:-}" ;;
42220) echo "${CELO_RPC_URL:-}" ;;
1111) echo "${WEMIX_RPC_URL:-}" ;;
651940) echo "${ALLTRA_MAINNET_RPC:-}" ;;
*) echo "" ;;
esac
}
# thresholdEther is human number; convert to wei for ETH-like 18 decimals. For MATIC/BNB/etc same scale.
threshold_to_wei() {
local th="$1"
echo "${th}" | awk 'BEGIN { OFMT="%.0f" } { gsub(/,/,""); printf "%.0f", $0 * 1e18 }'
}
echo "=============================================="
echo "Deployer gas auto-route"
echo "Deployer: ${DEPLOYER:0:6}...${DEPLOYER: -6}"
echo "Config: $CONFIG"
echo "=============================================="
echo ""
needs_gas=()
while read -r line; do
chain_id="$(echo "$line" | jq -r '.chainId')"
name="$(echo "$line" | jq -r '.name')"
method="$(echo "$line" | jq -r '.method')"
th_ether="$(echo "$line" | jq -r '.thresholdEther')"
native_sym="$(echo "$line" | jq -r '.nativeSymbol // "native"')"
[[ "$chain_id" == "null" || -z "$chain_id" ]] && continue
[[ -n "$CHAIN_FILTER" && "$CHAIN_FILTER" != "$chain_id" ]] && continue
rpc="$(get_rpc_for_chain "$chain_id")"
if [[ -z "$rpc" ]]; then
echo "[$chain_id] $name — no RPC configured; skip"
continue
fi
balance_wei="$(cast balance "$DEPLOYER" --rpc-url "$rpc" 2>/dev/null || echo "0")"
[[ -z "$balance_wei" || ! "$balance_wei" =~ ^[0-9]+$ ]] && balance_wei="0"
th_wei="$(threshold_to_wei "$th_ether")"
if [[ "$(echo "$balance_wei >= $th_wei" | bc 2>/dev/null)" -eq 1 ]]; then
echo "[$chain_id] $name — balance OK (>= $th_ether $native_sym); skip"
continue
fi
echo "[$chain_id] $name — below threshold ($th_ether); method=$method"
needs_gas+=("$chain_id|$name|$method|$line")
done < <(jq -c '.chains[]' "$CONFIG" 2>/dev/null)
echo ""
if [[ ${#needs_gas[@]} -eq 0 ]]; then
echo "No chains need gas. Done."
exit 0
fi
echo "Chains needing gas: ${#needs_gas[@]}"
echo ""
for entry in "${needs_gas[@]}"; do
IFS='|' read -r chain_id name method line <<< "$entry"
echo "--- $name (chain $chain_id) ---"
case "$method" in
internal)
if [[ "$chain_id" == "138" ]]; then
"$SCRIPT_DIR/chain138-tokens-to-gas.sh" ${DRY_RUN:+--dry-run} 2>&1 || true
else
echo " Internal path only for chain 138; skip."
fi
;;
protocolink)
if command -v node &>/dev/null; then
node "$SCRIPT_DIR/protocolink-swap-to-gas.cjs" --chain-id "$chain_id" --no-execute 2>&1 || true
else
echo " Install Node to run protocolink-swap-to-gas.cjs for this chain."
fi
;;
manual)
manual_links="$(echo "$line" | jq -r '.manualLinks[]? // empty' 2>/dev/null)"
manual_instr="$(echo "$line" | jq -r '.manualInstructions // empty' 2>/dev/null)"
echo " $manual_instr"
if [[ -n "$manual_links" ]]; then
echo "$manual_links" | while read -r url; do [[ -n "$url" ]] && echo " $url"; done
fi
if [[ "$chain_id" == "25" || "$chain_id" == "1111" ]]; then
echo " For all swap routes (multiple aggregators): ./scripts/deployment/acquire-cro-and-wemix-gas.sh"
fi
if [[ "$chain_id" == "1111" ]] && command -v node &>/dev/null; then
node "$SCRIPT_DIR/wemix-acquire-via-lifi.js" --dry-run 2>&1 | head -20
fi
;;
lifi|jumper)
echo " LiFi/Jumper path not yet implemented; use manual links or wemix-acquire-via-lifi.js for Wemix."
;;
*)
echo " Unknown method: $method"
;;
esac
echo ""
done
echo "Done. See docs/03-deployment/DEPLOYER_GAS_AUTO_ROUTE_RUNBOOK.md for full steps."