Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
- 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>
105 lines
4.6 KiB
Bash
Executable File
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"
|