Files
proxmox/scripts/verify/verify-explorer-and-block-production.sh
defiQUG fbda1b4beb
Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
docs: Ledger Live integration, contract deploy learnings, NEXT_STEPS updates
- ADD_CHAIN138_TO_LEDGER_LIVE: Ledger form done; public code review repo bis-innovations/LedgerLive; init/push commands
- CONTRACT_DEPLOYMENT_RUNBOOK: Chain 138 gas price 1 gwei, 36-addr check, TransactionMirror workaround
- CONTRACT_*: AddressMapper, MirrorManager deployed 2026-02-12; 36-address on-chain check
- NEXT_STEPS_FOR_YOU: Ledger done; steps completable now (no LAN); run-completable-tasks-from-anywhere
- MASTER_INDEX, OPERATOR_OPTIONAL, SMART_CONTRACTS_INVENTORY_SIMPLE: updates
- LEDGER_BLOCKCHAIN_INTEGRATION_COMPLETE: bis-innovations/LedgerLive reference

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-12 15:46:57 -08:00

105 lines
4.6 KiB
Bash
Executable File

#!/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"