160 lines
4.9 KiB
Bash
160 lines
4.9 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
|
||
|
|
# Configuration Validation Script
|
||
|
|
# Validates Smart Accounts configuration files
|
||
|
|
|
||
|
|
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)"
|
||
|
|
|
||
|
|
log_info "Configuration Validation"
|
||
|
|
log_info "========================"
|
||
|
|
|
||
|
|
# Check if jq is available
|
||
|
|
if ! command -v jq &> /dev/null; then
|
||
|
|
log_error "jq not found. Please install jq first."
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
VALIDATION_STATUS=0
|
||
|
|
|
||
|
|
# Validate smart-accounts-config.json
|
||
|
|
CONFIG_FILE="$PROJECT_ROOT/config/smart-accounts-config.json"
|
||
|
|
log_info "1. Validating smart-accounts-config.json..."
|
||
|
|
|
||
|
|
if [ ! -f "$CONFIG_FILE" ]; then
|
||
|
|
log_error " Configuration file not found: $CONFIG_FILE"
|
||
|
|
VALIDATION_STATUS=1
|
||
|
|
else
|
||
|
|
# Check JSON validity
|
||
|
|
if ! jq empty "$CONFIG_FILE" 2>/dev/null; then
|
||
|
|
log_error " Invalid JSON format"
|
||
|
|
VALIDATION_STATUS=1
|
||
|
|
else
|
||
|
|
log_success " JSON format is valid"
|
||
|
|
|
||
|
|
# Check required fields
|
||
|
|
CHAIN_ID=$(jq -r '.chainId // empty' "$CONFIG_FILE")
|
||
|
|
if [ -z "$CHAIN_ID" ] || [ "$CHAIN_ID" = "null" ]; then
|
||
|
|
log_error " Missing required field: chainId"
|
||
|
|
VALIDATION_STATUS=1
|
||
|
|
elif [ "$CHAIN_ID" != "138" ]; then
|
||
|
|
log_warning " ChainID is not 138 (found: $CHAIN_ID)"
|
||
|
|
else
|
||
|
|
log_success " ChainID is correct: $CHAIN_ID"
|
||
|
|
fi
|
||
|
|
|
||
|
|
RPC_URL=$(jq -r '.rpcUrl // empty' "$CONFIG_FILE")
|
||
|
|
if [ -z "$RPC_URL" ] || [ "$RPC_URL" = "null" ]; then
|
||
|
|
log_warning " Missing field: rpcUrl"
|
||
|
|
else
|
||
|
|
log_success " RPC URL configured: $RPC_URL"
|
||
|
|
fi
|
||
|
|
|
||
|
|
ENTRY_POINT=$(jq -r '.entryPointAddress // empty' "$CONFIG_FILE")
|
||
|
|
if [ -z "$ENTRY_POINT" ] || [ "$ENTRY_POINT" = "null" ] || [ "$ENTRY_POINT" = "" ]; then
|
||
|
|
log_warning " EntryPoint address not configured"
|
||
|
|
else
|
||
|
|
# Validate address format
|
||
|
|
if [[ "$ENTRY_POINT" =~ ^0x[a-fA-F0-9]{40}$ ]]; then
|
||
|
|
log_success " EntryPoint address format is valid: $ENTRY_POINT"
|
||
|
|
else
|
||
|
|
log_error " EntryPoint address format is invalid: $ENTRY_POINT"
|
||
|
|
VALIDATION_STATUS=1
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
|
||
|
|
ACCOUNT_FACTORY=$(jq -r '.accountFactoryAddress // empty' "$CONFIG_FILE")
|
||
|
|
if [ -z "$ACCOUNT_FACTORY" ] || [ "$ACCOUNT_FACTORY" = "null" ] || [ "$ACCOUNT_FACTORY" = "" ]; then
|
||
|
|
log_warning " AccountFactory address not configured"
|
||
|
|
else
|
||
|
|
# Validate address format
|
||
|
|
if [[ "$ACCOUNT_FACTORY" =~ ^0x[a-fA-F0-9]{40}$ ]]; then
|
||
|
|
log_success " AccountFactory address format is valid: $ACCOUNT_FACTORY"
|
||
|
|
else
|
||
|
|
log_error " AccountFactory address format is invalid: $ACCOUNT_FACTORY"
|
||
|
|
VALIDATION_STATUS=1
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
|
||
|
|
PAYMASTER=$(jq -r '.paymasterAddress // empty' "$CONFIG_FILE")
|
||
|
|
if [ -n "$PAYMASTER" ] && [ "$PAYMASTER" != "null" ] && [ "$PAYMASTER" != "" ]; then
|
||
|
|
# Validate address format
|
||
|
|
if [[ "$PAYMASTER" =~ ^0x[a-fA-F0-9]{40}$ ]]; then
|
||
|
|
log_success " Paymaster address format is valid: $PAYMASTER"
|
||
|
|
else
|
||
|
|
log_error " Paymaster address format is invalid: $PAYMASTER"
|
||
|
|
VALIDATION_STATUS=1
|
||
|
|
fi
|
||
|
|
else
|
||
|
|
log_info " Paymaster not configured (optional)"
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Validate monitoring-config.json
|
||
|
|
MONITORING_CONFIG="$PROJECT_ROOT/config/monitoring-config.json"
|
||
|
|
log_info "2. Validating monitoring-config.json..."
|
||
|
|
|
||
|
|
if [ ! -f "$MONITORING_CONFIG" ]; then
|
||
|
|
log_warning " Monitoring configuration file not found (optional)"
|
||
|
|
else
|
||
|
|
if ! jq empty "$MONITORING_CONFIG" 2>/dev/null; then
|
||
|
|
log_error " Invalid JSON format"
|
||
|
|
VALIDATION_STATUS=1
|
||
|
|
else
|
||
|
|
log_success " Monitoring configuration is valid"
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Validate analytics-config.json
|
||
|
|
ANALYTICS_CONFIG="$PROJECT_ROOT/config/analytics-config.json"
|
||
|
|
log_info "3. Validating analytics-config.json..."
|
||
|
|
|
||
|
|
if [ ! -f "$ANALYTICS_CONFIG" ]; then
|
||
|
|
log_warning " Analytics configuration file not found (optional)"
|
||
|
|
else
|
||
|
|
if ! jq empty "$ANALYTICS_CONFIG" 2>/dev/null; then
|
||
|
|
log_error " Invalid JSON format"
|
||
|
|
VALIDATION_STATUS=1
|
||
|
|
else
|
||
|
|
log_success " Analytics configuration is valid"
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Summary
|
||
|
|
log_info "========================"
|
||
|
|
if [ $VALIDATION_STATUS -eq 0 ]; then
|
||
|
|
log_success "Configuration validation passed! ✅"
|
||
|
|
exit 0
|
||
|
|
else
|
||
|
|
log_error "Configuration validation failed! ❌"
|
||
|
|
exit 1
|
||
|
|
fi
|