- 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
192 lines
6.2 KiB
Bash
Executable File
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
|
|
|
|
|