Files
smom-dbis-138/scripts/deployment/check-rpc-status.sh
defiQUG 2a4753eb2d feat: restore operator WIP — PMM JSON sync entrypoint, dotenv RPC trim + secrets, pool env alignment
- Resolve stash: merge load_deployment_env path with secure-secrets and CR/LF RPC strip
- create-pmm-full-mesh-chain138.sh delegates to sync-chain138-pmm-pools-from-json.sh
- env.additions.example: canonical PMM pool defaults (cUSDT/USDT per crosscheck)
- Include Chain138 scripts, official mirror deploy scaffolding, and prior staged changes

Made-with: Cursor
2026-03-27 19:02:30 -07:00

192 lines
6.2 KiB
Bash
Executable File

#!/usr/bin/env bash
# Check RPC Status for Chain ID 138
# This script checks if RPC endpoints for Chain ID 138 are live and accessible
set -e
# Script directory
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/../lib/init.sh"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
cd "$PROJECT_ROOT"
# Load .env via dotenv (RPC CR/LF trim). Fallback: raw source.
if [[ -f "$SCRIPT_DIR/../lib/deployment/dotenv.sh" ]]; then
# shellcheck disable=SC1090
source "$SCRIPT_DIR/../lib/deployment/dotenv.sh"
load_deployment_env --repo-root "${PROJECT_ROOT:-$REPO_ROOT}"
elif [[ -n "${PROJECT_ROOT:-}" && -f "$PROJECT_ROOT/.env" ]]; then
set -a
# shellcheck disable=SC1090
source "$PROJECT_ROOT/.env"
set +a
elif [[ -n "${REPO_ROOT:-}" && -f "$REPO_ROOT/.env" ]]; then
set -a
# shellcheck disable=SC1090
source "$REPO_ROOT/.env"
set +a
fi
log_info "=== RPC Endpoint Status Check for Chain ID 138 ==="
# Common RPC endpoints for Chain ID 138
RPC_ENDPOINTS=(
"https://rpc.d-bis.org"
"https://rpc2.d-bis.org"
"http://localhost:8545"
)
# Check .env configuration
log_warn "1. Checking .env configuration:"
if [ -f .env ]; then
RPC_URL=$(grep -E "^RPC_URL=" .env 2>/dev/null | cut -d'=' -f2- | tr -d '"' | tr -d "'" | tr -d ' ' || echo "")
if [ -n "$RPC_URL" ]; then
log_success " ✅ RPC_URL configured: ${RPC_URL}"
# Add to endpoints list if not already present
if [[ ! " ${RPC_ENDPOINTS[@]} " =~ " ${RPC_URL} " ]]; then
RPC_ENDPOINTS+=("$RPC_URL")
fi
else
log_warn " ⏳ RPC_URL not configured in .env"
fi
else
log_warn " ⏳ .env file not found"
fi
log_warn "2. Testing RPC endpoints:"
# Function to test RPC endpoint
test_rpc_endpoint() {
local rpc_url=$1
local timeout=10
log_info "Testing: ${rpc_url}"
# Test 1: Check if endpoint is accessible
if ! curl -s -X POST "$rpc_url" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}' \
--max-time $timeout \
--connect-timeout 5 \
> /dev/null 2>&1; then
log_error " ❌ Not accessible (connection timeout or refused)"
return 1
fi
# Test 2: Check chain ID
CHAIN_ID_RESPONSE=$(curl -s -X POST "$rpc_url" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}' \
--max-time $timeout \
--connect-timeout 5 2>/dev/null)
if [ -z "$CHAIN_ID_RESPONSE" ]; then
log_error " ❌ No response from endpoint"
return 1
fi
CHAIN_ID_HEX=$(echo "$CHAIN_ID_RESPONSE" | grep -oE '"result":"0x[0-9a-f]+"' | cut -d'"' -f4 || echo "")
if [ -z "$CHAIN_ID_HEX" ]; then
log_error " ❌ Invalid response format"
echo "$CHAIN_ID_RESPONSE" | head -5
return 1
fi
# Convert hex to decimal
CHAIN_ID_DEC=$(printf "%d" "$CHAIN_ID_HEX" 2>/dev/null || echo "0")
if [ "$CHAIN_ID_DEC" = "138" ]; then
log_success " ✅ Chain ID: 138 (correct)"
else
log_warn " ⚠️ Chain ID: ${CHAIN_ID_DEC} (expected 138)"
fi
# Test 3: Check latest block number
BLOCK_RESPONSE=$(curl -s -X POST "$rpc_url" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' \
--max-time $timeout \
--connect-timeout 5 2>/dev/null)
BLOCK_HEX=$(echo "$BLOCK_RESPONSE" | grep -oE '"result":"0x[0-9a-f]+"' | cut -d'"' -f4 || echo "")
if [ -n "$BLOCK_HEX" ]; then
BLOCK_DEC=$(printf "%d" "$BLOCK_HEX" 2>/dev/null || echo "0")
log_success " ✅ Latest block: ${BLOCK_DEC}"
else
log_warn " ⚠️ Could not get block number"
fi
# Test 4: Check syncing status
SYNC_RESPONSE=$(curl -s -X POST "$rpc_url" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}' \
--max-time $timeout \
--connect-timeout 5 2>/dev/null)
SYNC_STATUS=$(echo "$SYNC_RESPONSE" | grep -oE '"result":(true|false)' | cut -d':' -f2 || echo "")
if [ "$SYNC_STATUS" = "false" ]; then
log_success " ✅ Node is synced"
elif [ "$SYNC_STATUS" = "true" ]; then
log_warn " ⚠️ Node is still syncing"
else
log_warn " ⚠️ Could not check sync status"
fi
# Test 5: Check peer count (if supported)
PEER_RESPONSE=$(curl -s -X POST "$rpc_url" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":1}' \
--max-time $timeout \
--connect-timeout 5 2>/dev/null)
PEER_COUNT_HEX=$(echo "$PEER_RESPONSE" | grep -oE '"result":"0x[0-9a-f]+"' | cut -d'"' -f4 || echo "")
if [ -n "$PEER_COUNT_HEX" ]; then
PEER_COUNT_DEC=$(printf "%d" "$PEER_COUNT_HEX" 2>/dev/null || echo "0")
log_success " ✅ Peer count: ${PEER_COUNT_DEC}"
fi
return 0
}
# Test each endpoint
LIVE_ENDPOINTS=()
for endpoint in "${RPC_ENDPOINTS[@]}"; do
if test_rpc_endpoint "$endpoint"; then
LIVE_ENDPOINTS+=("$endpoint")
fi
done
# Summary
log_info "=== Summary ==="
if [ ${#LIVE_ENDPOINTS[@]} -gt 0 ]; then
log_success "${#LIVE_ENDPOINTS[@]} live endpoint(s) found:"
for endpoint in "${LIVE_ENDPOINTS[@]}"; do
log_success " - ${endpoint}"
done
else
log_error "❌ No live endpoints found"
log_warn " Please check:"
echo " 1. Blockchain infrastructure is deployed"
echo " 2. RPC nodes are running"
echo " 3. Network connectivity"
echo " 4. Firewall rules"
fi
log_info "=== Recommendations ==="
if [ ${#LIVE_ENDPOINTS[@]} -eq 0 ]; then
log_warn "1. Deploy blockchain infrastructure (if not deployed)"
echo " See: docs/DEPLOYMENT_ORDER.md"
log_warn "2. Start local testnet for testing:"
echo " ./scripts/deployment/start-local-testnet.sh"
log_warn "3. Check RPC node status:"
echo " kubectl get pods -n besu-network"
echo " kubectl logs -f besu-rpc-0 -n besu-network"
else
log_success "✅ RPC endpoints are live and accessible"
log_success " You can now deploy contracts using:"
echo " ./scripts/deployment/deploy-all-ordered.sh"
fi