Files
ethereum-rpc-docker/reference-rpc-endpoint.sh
Claude Agent 405f36d02f monitoring scripts: protocol dispatch via registry slug + mantle/metis chainid fixes
- sync-status.sh: resolve protocol family from the compose x-upstreams chain
  label via the registry (reference-rpc-endpoint.sh --protocol) instead of
  path-substring guessing; legacy path detection kept as fallback for
  composes without a resolved label. Unknown families report
  'unsupported protocol: X' honestly instead of a bogus eth_chainId error.
  Aztec reference lookup falls back to slug urls when rollup_version is
  not in the registry.
- reference-rpc-endpoint.sh: new --chain <slug> (urls by registry key,
  works for idless non-EVM entries) and --protocol <slug> modes; existing
  chainid and --rollup-version lookups unchanged.
- mantle-sepolia: chainid 5001 -> 5003 (verified live: 0x138b), label and
  --networkid now correct
- metis-sepolia: label resolves via registry override (drpc chains.yaml
  carries wrong id 59901; live chain is 59902, verified via official RPC)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 06:34:31 +00:00

114 lines
2.9 KiB
Bash
Executable File

#!/bin/bash
BASEPATH="$(dirname "$0")"
json_file="${BASEPATH}/reference-rpc-endpoint.json"
# Check if JSON file exists
if [ ! -f "$json_file" ]; then
# Fallback for legacy path
json_file="/root/rpc/reference-rpc-endpoint.json"
fi
if [ ! -f "$json_file" ]; then
echo "JSON file not found: $json_file"
exit 1
fi
# Look up urls by registry key (drpc slug from the compose x-upstreams chain label).
# Works for non-EVM chains that have no chainid in the registry.
if [ "$1" = "--chain" ]; then
if [ $# -lt 2 ]; then
echo "Usage: $0 --chain <slug>"
exit 1
fi
urls=$(jq -r --arg k "$2" '.[$k].urls // [] | .[]' "$json_file" 2>/dev/null | tr '\n' ' ')
if [ -z "${urls// /}" ]; then
echo "Chain not found: $2"
exit 1
fi
echo "$urls"
exit 0
fi
# Look up the protocol family for a registry key (eth, starknet, aztec, bitcoin, solana, ...)
if [ "$1" = "--protocol" ]; then
if [ $# -lt 2 ]; then
echo "Usage: $0 --protocol <slug>"
exit 1
fi
protocol=$(jq -r --arg k "$2" 'if has($k) then (.[$k].protocol // "eth") else empty end' "$json_file" 2>/dev/null)
if [ -z "$protocol" ]; then
echo "Chain not found: $2"
exit 1
fi
echo "$protocol"
exit 0
fi
# Look up by rollup_version (for Aztec: version from result.header.globalVariables.version)
if [ "$1" = "--rollup-version" ]; then
if [ $# -lt 2 ]; then
echo "Usage: $0 --rollup-version <version_decimal>"
exit 1
fi
version="$2"
urls=$(jq -r --arg v "$version" '.[] | select(.rollup_version == $v) | .urls[]' "$json_file" 2>/dev/null | tr '\n' ' ')
if [ -z "$urls" ]; then
echo "Rollup version not found: $version"
exit 1
fi
echo "$urls"
exit 0
fi
# Look up by chain id
if [ $# -gt 2 ]; then
echo "Usage: $0 <chainid> [<index>]"
exit 1
fi
id="$1"
index="${2:-all}"
# Convert hex id to decimal if necessary
if [[ "$id" == "0x"* ]]; then
id=$(printf "%d" "$id")
fi
# Find the object with matching id
object=$(jq --arg id "$id" '.[] | select(.id == ($id | tonumber))' "$json_file")
# If object not found, exit
if [ -z "$object" ]; then
echo "Chain ID not found: $id"
exit 1
fi
# Extract URLs from the object
urls=$(echo "$object" | jq -r '.urls')
# If index is set to 'all', return all URLs separated by whitespace
if [ "$index" = "all" ]; then
echo "$urls" | jq -r '.[]' | tr '\n' ' '
exit
fi
# Otherwise, treat index as numeric
# Validate that index is a number
if ! [[ "$index" =~ ^[0-9]+$ ]]; then
echo "Invalid index: $index"
exit 1
fi
# Get the number of URLs
num_urls=$(echo "$urls" | jq -r 'length')
# Check if index is within bounds
if [ "$index" -ge "$num_urls" ]; then
echo "Index out of bounds: $index (max $(($num_urls - 1)))"
exit 1
fi
# Get and print the URL at the specified index
url=$(echo "$urls" | jq -r ".[$index]")
echo "$url"