Files
metamask-integration/scripts/test-network-access.sh
2026-03-02 12:14:14 -08:00

193 lines
5.4 KiB
Bash
Executable File

#!/bin/bash
# Network Access Test Script
# Tests connectivity to ChainID 138 RPC endpoints
set -e
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Logging functions
log_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
log_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# Get script directory
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
SMOM_DIR="$(cd "$PROJECT_ROOT/../smom-dbis-138" && pwd)"
log_info "Network Access Test for ChainID 138"
log_info "===================================="
# Check if cast is available
if ! command -v cast &> /dev/null; then
log_error "cast (Foundry) not found. Please install Foundry first."
exit 1
fi
# Check if curl is available
if ! command -v curl &> /dev/null; then
log_warning "curl not found. Some tests may be skipped."
fi
# Load environment variables
if [ ! -f "$SMOM_DIR/.env" ]; then
log_error ".env file not found in $SMOM_DIR"
exit 1
fi
source "$SMOM_DIR/.env"
# RPC endpoints to test
RPC_ENDPOINTS=(
"${RPC_URL_138:-http://192.168.11.211:8545}"
"http://192.168.11.211:8545"
"http://192.168.11.250:8545"
"https://rpc.d-bis.org"
"https://rpc-http-pub.d-bis.org"
"https://rpc-http-prv.d-bis.org"
)
# Remove duplicates
RPC_ENDPOINTS=($(printf '%s\n' "${RPC_ENDPOINTS[@]}" | sort -u))
# Test function
test_rpc_endpoint() {
local rpc_url=$1
local endpoint_name=$2
log_info "Testing: $endpoint_name ($rpc_url)"
# Test 1: Basic connectivity with curl
if command -v curl &> /dev/null; then
local response=$(curl -s -X POST "$rpc_url" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' \
--max-time 5 2>&1)
if echo "$response" | grep -q "result"; then
log_success " ✓ Basic connectivity: OK"
else
log_error " ✗ Basic connectivity: FAILED"
log_warning " Response: $response"
return 1
fi
fi
# Test 2: Block number with cast
local block_number=$(cast block-number --rpc-url "$rpc_url" 2>/dev/null || echo "")
if [ -n "$block_number" ] && [ "$block_number" != "0" ]; then
log_success " ✓ Block number: $block_number"
else
log_error " ✗ Block number: FAILED or network not producing blocks"
return 1
fi
# Test 3: Chain ID
local chain_id=$(cast chain-id --rpc-url "$rpc_url" 2>/dev/null || echo "")
if [ "$chain_id" = "138" ]; then
log_success " ✓ Chain ID: $chain_id (correct)"
elif [ -n "$chain_id" ]; then
log_warning " ⚠ Chain ID: $chain_id (expected 138)"
else
log_error " ✗ Chain ID: FAILED"
return 1
fi
# Test 4: Deployer balance (if available)
if [ -n "$PRIVATE_KEY" ]; then
local deployer=$(cast wallet address "$PRIVATE_KEY" 2>/dev/null || echo "")
if [ -n "$deployer" ]; then
local balance=$(cast balance "$deployer" --rpc-url "$rpc_url" 2>/dev/null || echo "0")
local balance_eth=$(cast --to-unit "$balance" ether 2>/dev/null || echo "0")
if [ "$balance" != "0" ]; then
log_success " ✓ Deployer balance: $balance_eth ETH"
else
log_warning " ⚠ Deployer balance: 0 ETH (may need funding)"
fi
fi
fi
return 0
}
# Test all endpoints
log_info "Testing RPC endpoints..."
echo ""
WORKING_ENDPOINTS=()
FAILED_ENDPOINTS=()
for endpoint in "${RPC_ENDPOINTS[@]}"; do
# Extract endpoint name
endpoint_name=$(echo "$endpoint" | sed 's|https\?://||' | sed 's|:.*||')
if test_rpc_endpoint "$endpoint" "$endpoint_name"; then
WORKING_ENDPOINTS+=("$endpoint")
log_success "$endpoint_name is accessible and working"
else
FAILED_ENDPOINTS+=("$endpoint")
log_error "$endpoint_name is not accessible or not working"
fi
echo ""
done
# Summary
log_info "===================================="
log_info "Test Summary"
log_info "===================================="
if [ ${#WORKING_ENDPOINTS[@]} -gt 0 ]; then
log_success "Working Endpoints (${#WORKING_ENDPOINTS[@]}):"
for endpoint in "${WORKING_ENDPOINTS[@]}"; do
log_success "$endpoint"
done
echo ""
# Recommend best endpoint
if [ -n "$RPC_URL_138" ] && [[ " ${WORKING_ENDPOINTS[@]} " =~ " ${RPC_URL_138} " ]]; then
log_success "Recommended: $RPC_URL_138 (already configured)"
else
log_info "Recommended: ${WORKING_ENDPOINTS[0]}"
log_warning "Update .env: RPC_URL_138=${WORKING_ENDPOINTS[0]}"
fi
else
log_error "No working RPC endpoints found!"
log_error ""
log_error "Possible issues:"
log_error " 1. Network connectivity problems"
log_error " 2. RPC endpoints not operational"
log_error " 3. Firewall blocking access"
log_error " 4. VPN or network routing needed"
exit 1
fi
if [ ${#FAILED_ENDPOINTS[@]} -gt 0 ]; then
echo ""
log_warning "Failed Endpoints (${#FAILED_ENDPOINTS[@]}):"
for endpoint in "${FAILED_ENDPOINTS[@]}"; do
log_warning "$endpoint"
done
fi
echo ""
log_success "Network access test complete!"