- 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
121 lines
5.7 KiB
Bash
121 lines
5.7 KiB
Bash
#!/usr/bin/env bash
|
|
# Surgical readiness check for the Chain 138 -> Ethereum Mainnet WETH relay lane.
|
|
# Default is read-only.
|
|
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
|
|
|
|
command -v curl >/dev/null 2>&1 || { echo "curl required" >&2; exit 1; }
|
|
command -v jq >/dev/null 2>&1 || { echo "jq required" >&2; exit 1; }
|
|
command -v cast >/dev/null 2>&1 || { echo "cast required" >&2; exit 1; }
|
|
|
|
normalize_uint() {
|
|
awk '{print $1}'
|
|
}
|
|
|
|
HEALTH_URL="${CCIP_RELAY_MAINNET_WETH_HEALTH_URL:-${CCIP_RELAY_HEALTH_URL_MAINNET_WETH:-http://192.168.11.11:9860/healthz}}"
|
|
PROFILE_ENV="${RELAY_PROFILE_ENV_MAINNET_WETH:-${PROJECT_ROOT}/smom-dbis-138/services/relay/.env.mainnet-weth}"
|
|
RPC="${RPC_URL_MAINNET:-${ETHEREUM_MAINNET_RPC:-https://ethereum.publicnode.com}}"
|
|
WETH="${WETH9_MAINNET:-0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2}"
|
|
DEFAULT_MIN_BRIDGE_WEI="10000000000000000"
|
|
MIN_BRIDGE_WEI="${MIN_BRIDGE_WETH_WEI:-$DEFAULT_MIN_BRIDGE_WEI}"
|
|
|
|
if [[ -f "$PROFILE_ENV" ]]; then
|
|
while IFS='=' read -r key value; do
|
|
[[ -n "$key" ]] || continue
|
|
case "$key" in
|
|
DEST_RELAY_BRIDGE) DEST_RELAY_BRIDGE="${DEST_RELAY_BRIDGE:-$value}" ;;
|
|
DEST_RELAY_ROUTER) DEST_RELAY_ROUTER="${DEST_RELAY_ROUTER:-$value}" ;;
|
|
RELAY_SHEDDING) PROFILE_SHEDDING="$value" ;;
|
|
SOURCE_BRIDGE_ADDRESS) SOURCE_BRIDGE_ADDRESS="${SOURCE_BRIDGE_ADDRESS:-$value}" ;;
|
|
esac
|
|
done < <(grep -E '^(DEST_RELAY_BRIDGE|DEST_RELAY_ROUTER|RELAY_SHEDDING|SOURCE_BRIDGE_ADDRESS)=' "$PROFILE_ENV" || true)
|
|
fi
|
|
|
|
DEST_RELAY_BRIDGE="${DEST_RELAY_BRIDGE:-${CCIP_RELAY_BRIDGE_MAINNET:-0xF9A32F37099c582D28b4dE7Fca6eaC1e5259f939}}"
|
|
DEST_RELAY_ROUTER="${DEST_RELAY_ROUTER:-${CCIP_RELAY_ROUTER_MAINNET:-0x416564Ab73Ad5710855E98dC7bC7Bff7387285BA}}"
|
|
PROFILE_SHEDDING="${PROFILE_SHEDDING:-unknown}"
|
|
|
|
tmp_body="$(mktemp)"
|
|
trap 'rm -f "$tmp_body"' EXIT
|
|
|
|
http_code="$(curl -fsS -m 10 -o "$tmp_body" -w '%{http_code}' "$HEALTH_URL" || echo "000")"
|
|
if [[ "$http_code" != "200" ]]; then
|
|
echo "Mainnet WETH relay health probe failed: $HEALTH_URL (HTTP $http_code)" >&2
|
|
exit 2
|
|
fi
|
|
|
|
status="$(jq -r '.status // "unknown"' "$tmp_body")"
|
|
delivery_enabled="$(jq -r '.monitoring.delivery_enabled // false' "$tmp_body")"
|
|
shedding="$(jq -r '.monitoring.shedding // false' "$tmp_body")"
|
|
queue_size="$(jq -r '.queue.size // 0' "$tmp_body")"
|
|
last_poll="$(jq -r '.last_source_poll.at // "unknown"' "$tmp_body")"
|
|
last_msg="$(jq -r '.last_seen_message.message_id // "none"' "$tmp_body")"
|
|
service_profile="$(jq -r '.service.profile // "unknown"' "$tmp_body")"
|
|
last_error_scope="$(jq -r '.last_error.scope // "none"' "$tmp_body")"
|
|
last_error_message="$(jq -r '.last_error.message // ""' "$tmp_body")"
|
|
last_error_shortfall="$(jq -r '.last_error.shortfall // ""' "$tmp_body")"
|
|
last_error_required="$(jq -r '.last_error.required_amount // ""' "$tmp_body")"
|
|
last_error_available="$(jq -r '.last_error.available_amount // ""' "$tmp_body")"
|
|
bridge_balance="$( (cast call "$WETH" "balanceOf(address)(uint256)" "$DEST_RELAY_BRIDGE" --rpc-url "$RPC" 2>/dev/null || echo "0") | normalize_uint )"
|
|
router_paused="$( (cast call "$DEST_RELAY_ROUTER" "paused()(bool)" --rpc-url "$RPC" 2>/dev/null || echo "unknown") | awk '{print $1}' )"
|
|
|
|
bridge_ready="$(node -e 'const bal=BigInt(process.argv[1]); const min=BigInt(process.argv[2]); process.stdout.write(bal >= min ? "yes" : "no")' "$bridge_balance" "$MIN_BRIDGE_WEI")"
|
|
|
|
echo "Mainnet WETH relay lane"
|
|
echo " Health URL: $HEALTH_URL"
|
|
echo " Service profile: $service_profile"
|
|
echo " Reported status: $status"
|
|
echo " Delivery enabled: $delivery_enabled"
|
|
echo " Shedding: $shedding"
|
|
echo " Queue size: $queue_size"
|
|
echo " Last source poll: $last_poll"
|
|
echo " Last seen message: $last_msg"
|
|
echo " Last error scope: $last_error_scope"
|
|
if [[ -n "$last_error_message" ]]; then
|
|
echo " Last error message: $last_error_message"
|
|
fi
|
|
if [[ -n "$last_error_shortfall" ]]; then
|
|
echo " Inventory shortfall: $last_error_shortfall wei"
|
|
echo " Required amount: $last_error_required wei"
|
|
echo " Available amount: $last_error_available wei"
|
|
fi
|
|
echo " Profile RELAY_SHEDDING: $PROFILE_SHEDDING"
|
|
echo " Dest relay bridge: $DEST_RELAY_BRIDGE"
|
|
echo " Dest relay router: $DEST_RELAY_ROUTER"
|
|
echo " Bridge WETH balance: $bridge_balance wei"
|
|
echo " Minimum bridge floor: $MIN_BRIDGE_WEI wei"
|
|
echo " Bridge ready: $bridge_ready"
|
|
echo " Router paused(): $router_paused"
|
|
echo
|
|
|
|
if [[ "$delivery_enabled" == "true" && "$shedding" == "false" && ( "$router_paused" == "false" || "$router_paused" == "unknown" ) ]]; then
|
|
echo "Lane is already deliverable."
|
|
exit 0
|
|
fi
|
|
|
|
echo "Recommended next actions:"
|
|
|
|
if [[ "$bridge_ready" != "yes" ]]; then
|
|
echo "1. Top up the Mainnet relay bridge before unpausing delivery:"
|
|
echo " bash scripts/bridge/fund-mainnet-relay-bridge.sh --target-bridge-balance-wei $MIN_BRIDGE_WEI --dry-run"
|
|
fi
|
|
|
|
if [[ "$last_error_scope" == "bridge_inventory" && -n "$last_error_shortfall" ]]; then
|
|
echo "2. The lane is live but underfunded for at least one queued release. Top up at least the reported shortfall:"
|
|
echo " Additional WETH needed: $last_error_shortfall wei"
|
|
fi
|
|
|
|
if [[ "$router_paused" == "true" ]]; then
|
|
echo "3. The destination relay router is paused. Unpause it only after bridge inventory is ready:"
|
|
echo " cast send $DEST_RELAY_ROUTER \"unpause()\" --rpc-url \"\$ETHEREUM_MAINNET_RPC\" --private-key \"\$PRIVATE_KEY\""
|
|
fi
|
|
|
|
if [[ "$delivery_enabled" != "true" || "$shedding" != "false" || "$PROFILE_SHEDDING" == "1" ]]; then
|
|
echo "4. Then unpark the off-chain worker:"
|
|
echo " bash scripts/deployment/unpause-mainnet-weth-relay-lane.sh --dry-run"
|
|
fi
|