#!/usr/bin/env bash # Quick verification: explorer links (NPMplus + SSL), Blockscout API, RPC, block production. # For full E2E use: verify-end-to-end-routing.sh # For block/validator health: scripts/monitoring/monitor-blockchain-health.sh set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" source "${PROJECT_ROOT}/config/ip-addresses.conf" 2>/dev/null || true RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' log_ok() { echo -e "${GREEN}[OK]${NC} $1"; } log_fail() { echo -e "${RED}[FAIL]${NC} $1"; } log_skip() { echo -e "${YELLOW}[SKIP]${NC} $1"; } log_info() { echo -e "${BLUE}[INFO]${NC} $1"; } cd "$PROJECT_ROOT" echo "" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "Explorer links + block production — quick check" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "" FAILED=0 # 1. Explorer URL (NPMplus + SSL) — public log_info "1. Explorer URL (https://explorer.d-bis.org)" CODE=$(curl -sI -k -o /dev/null -w "%{http_code}" --connect-timeout 10 "https://explorer.d-bis.org" 2>/dev/null || echo "000") if [ "$CODE" = "200" ] || [ "$CODE" = "301" ] || [ "$CODE" = "302" ]; then log_ok "Explorer HTTPS: $CODE" else log_fail "Explorer HTTPS: $CODE" ((FAILED++)) || true fi # 2. Blockscout API (public URL; may 502 if backend unreachable from here) log_info "2. Blockscout API (https://explorer.d-bis.org/api/v2/stats)" if [ "${SKIP_BLOCKSCOUT_API:-0}" = "1" ]; then log_skip "SKIP_BLOCKSCOUT_API=1" else API_BODY=$(curl -s -k --connect-timeout 10 "https://explorer.d-bis.org/api/v2/stats" 2>/dev/null || echo "") if echo "$API_BODY" | grep -qE '"total_blocks"|"total_transactions"'; then BLOCKS=$(echo "$API_BODY" | jq -r '.total_blocks // .total_transactions // "?"' 2>/dev/null || echo "?") log_ok "Blockscout API: 200 (total_blocks/tx: $BLOCKS)" else log_skip "Blockscout API: unreachable or invalid (run from LAN for backend 192.168.11.140)" fi fi # 3. RPC (public) — one hostname; may fail if edge/tunnel blocks POST log_info "3. RPC (public) — eth_chainId" RPC_URL_PUBLIC="${RPC_URL_PUBLIC:-https://rpc-http-pub.d-bis.org}" RPC_RESULT=$(curl -s -X POST -k --connect-timeout 10 \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}' \ "$RPC_URL_PUBLIC" 2>/dev/null || echo "") if echo "$RPC_RESULT" | grep -q '"result"'; then CHAIN=$(echo "$RPC_RESULT" | jq -r '.result' 2>/dev/null || echo "?") log_ok "RPC: chainId $CHAIN" else log_skip "RPC: no result (tunnel/edge may block POST; run from LAN or see E2E runbook)" fi # 4. Block production (requires LAN to RPC) log_info "4. Block production (RPC_CORE_1)" RPC_INTERNAL="${RPC_URL_138:-http://${RPC_CORE_1:-192.168.11.211}:8545}" BLOCK1=$(curl -s -X POST -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' \ --connect-timeout 5 "$RPC_INTERNAL" 2>/dev/null | jq -r '.result' 2>/dev/null || echo "") if [ -z "$BLOCK1" ] || [ "$BLOCK1" = "null" ]; then log_skip "Block number: RPC unreachable (run from LAN)" else BLOCK1_DEC=$((BLOCK1)) sleep 3 BLOCK2=$(curl -s -X POST -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' \ --connect-timeout 5 "$RPC_INTERNAL" 2>/dev/null | jq -r '.result' 2>/dev/null || echo "") BLOCK2_DEC=$((BLOCK2)) if [ -n "$BLOCK2" ] && [ "$BLOCK2" != "null" ] && [ "${BLOCK2_DEC:-0}" -gt "$BLOCK1_DEC" ]; then log_ok "Block production: advancing (e.g. $BLOCK1_DEC → $BLOCK2_DEC)" else log_fail "Block production: stalled at $BLOCK1_DEC. Run: scripts/monitoring/monitor-blockchain-health.sh" ((FAILED++)) || true fi fi echo "" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" if [ "$FAILED" -eq 0 ]; then log_ok "Quick check done. For full E2E: bash scripts/verify/verify-end-to-end-routing.sh" else log_fail "Quick check: $FAILED failure(s). See docs/08-monitoring/EXPLORER_LINKS_AND_BLOCK_PRODUCTION_STATUS.md" fi echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "" exit "$FAILED"