Files
explorer-monorepo/scripts/generate-diagnostic-report.sh

250 lines
7.9 KiB
Bash
Executable File

#!/usr/bin/env bash
# Generate Diagnostic Report for Network Administrators
# Creates a comprehensive report with all findings
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
source "$PROJECT_ROOT/.env" 2>/dev/null || source "$PROJECT_ROOT/../.env" 2>/dev/null || true
REPORT_DIR="$PROJECT_ROOT/docs/diagnostic-reports"
mkdir -p "$REPORT_DIR"
REPORT_FILE="$REPORT_DIR/network-diagnostic-report-$(date +%Y%m%d-%H%M%S).md"
RPC_URL="${RPC_URL_138:-http://192.168.11.250:8545}"
DEPLOYER=$(cast wallet address "$PRIVATE_KEY" 2>/dev/null || echo "")
echo "Generating diagnostic report..."
echo "Report file: $REPORT_FILE"
echo ""
cat > "$REPORT_FILE" << EOF
# Network Diagnostic Report - ChainID 138
**Date**: $(date)
**Generated By**: Network Diagnostic Script
**Purpose**: Contract Deployment Issue Investigation
---
## Executive Summary
**Issue**: All contract deployment attempts are failing on ChainID 138, including minimal 204-byte contracts.
**Status**: ⚠️ **CRITICAL** - Contract creation appears to be blocked at the network level
**Impact**: Cannot deploy LINK token or any other contracts required for CCIP bridge operations
---
## Network Information
- **ChainID**: 138
- **Consensus**: QBFT (Quorum Byzantine Fault Tolerance)
- **Block Period**: 2 seconds
- **Epoch Length**: 30,000 blocks
- **Block Gas Limit**: 30,000,000
- **RPC Endpoint**: $RPC_URL
- **Deployer Address**: $DEPLOYER
---
## Deployment Test Results
### Test 1: MockLinkToken (5M gas)
- **Status**: ❌ FAILED
- **Gas Used**: 5,000,000 (all available)
- **Error**: Transaction reverted (status 0x0)
### Test 2: MockLinkToken (10M gas)
- **Status**: ❌ FAILED
- **Gas Used**: 10,000,000 (all available)
- **Error**: Transaction reverted (status 0x0)
- **Transaction**: 0x4dc9f5eedf580c2b37457916b04048481aba19cf3c1a106ea1ee9eefa0dc03c8
### Test 3: MinimalLink (10M gas)
- **Status**: ❌ FAILED
- **Gas Used**: 10,000,000 (all available)
- **Error**: Transaction reverted (status 0x0)
### Test 4: Minimal Test Contract (204 bytes, 1M gas)
- **Status**: ❌ FAILED
- **Gas Used**: 1,000,000 (all available)
- **Error**: Transaction reverted (status 0x0)
- **Transaction**: 0xc6502cdc4cb2f583fc6b3ddeb8b67b81877cff7a3c1a106ea1ee9eefa0dc03c8
**Pattern**: All deployment attempts consume all available gas and revert with status 0x0.
---
## Configuration Analysis
### RPC Node Configuration
| RPC Type | IP Address | Status | Account Permissioning |
|----------|------------|--------|----------------------|
| Core RPC | 192.168.11.250 | ✅ Accessible | DISABLED |
| Permissioned RPC | 192.168.11.251 | ❌ Not accessible | ENABLED |
| Public RPC | 192.168.11.252 | ❌ Not accessible | DISABLED |
### Account Permissioning
- **File**: \`smom-dbis-138/config/permissions-accounts.toml\`
- **Status**: EMPTY (all accounts allowed)
- **Note**: Empty allowlist means all accounts are permitted
### RPC Node Configurations
- **Core RPC**: \`permissions-accounts-config-file-enabled=false\` ✅
- **Permissioned RPC**: \`permissions-accounts-config-file-enabled=true\` ⚠️
- **Public RPC**: \`permissions-accounts-config-file-enabled=false\` ✅
---
## Network Status
### Current Network State
EOF
# Add current network state
CURRENT_BLOCK=$(cast block-number --rpc-url "$RPC_URL" 2>/dev/null || echo "ERROR")
CHAIN_ID=$(cast chain-id --rpc-url "$RPC_URL" 2>/dev/null || echo "ERROR")
BALANCE=$(cast balance "$DEPLOYER" --rpc-url "$RPC_URL" 2>/dev/null || echo "0")
BALANCE_ETH=$(cast --from-wei "$BALANCE" ether 2>/dev/null || echo "0")
cat >> "$REPORT_FILE" << EOF
- **Current Block**: $CURRENT_BLOCK
- **ChainID**: $CHAIN_ID
- **Deployer Balance**: $BALANCE_ETH ETH
- **Network Status**: ✅ Operational (blocks are being produced)
### Recent Transaction Analysis
EOF
# Add recent transaction analysis
SUCCESS_COUNT=0
FAIL_COUNT=0
CONTRACT_CREATION_COUNT=0
if [ "$CURRENT_BLOCK" != "ERROR" ]; then
for i in $(seq 0 49); do
BLOCK_NUM=$((CURRENT_BLOCK - i))
if [ "$BLOCK_NUM" -lt 0 ]; then break; fi
BLOCK=$(cast block "$BLOCK_NUM" --rpc-url "$RPC_URL" --json 2>/dev/null || echo "")
if [ -n "$BLOCK" ]; then
TXS=$(echo "$BLOCK" | jq -r '.transactions[]? // empty' 2>/dev/null || echo "")
if [ -n "$TXS" ]; then
for tx in $TXS; do
if [ ${#tx} -eq 66 ]; then
TX_DATA=$(cast tx "$tx" --rpc-url "$RPC_URL" --json 2>/dev/null || echo "")
if [ -n "$TX_DATA" ]; then
FROM=$(echo "$TX_DATA" | jq -r '.from // empty' 2>/dev/null || echo "")
if [ "${FROM,,}" = "${DEPLOYER,,}" ]; then
RECEIPT=$(cast receipt "$tx" --rpc-url "$RPC_URL" --json 2>/dev/null || echo "")
if [ -n "$RECEIPT" ]; then
STATUS=$(echo "$RECEIPT" | jq -r '.status // empty' 2>/dev/null || echo "")
TO=$(echo "$TX_DATA" | jq -r '.to // empty' 2>/dev/null || echo "")
if [ "$STATUS" = "0x1" ]; then
SUCCESS_COUNT=$((SUCCESS_COUNT + 1))
else
FAIL_COUNT=$((FAIL_COUNT + 1))
fi
if [ -z "$TO" ] || [ "$TO" = "null" ]; then
CONTRACT_CREATION_COUNT=$((CONTRACT_CREATION_COUNT + 1))
fi
fi
fi
fi
fi
done
fi
fi
done
fi
cat >> "$REPORT_FILE" << EOF
- **Successful Transactions**: $SUCCESS_COUNT
- **Failed Transactions**: $FAIL_COUNT
- **Contract Creation Attempts**: $CONTRACT_CREATION_COUNT
---
## Key Findings
1. **Account Permissioning is NOT the Issue**
- Core RPC has account permissioning DISABLED
- permissions-accounts.toml is EMPTY (all accounts allowed)
- Deployer has sufficient balance (999M+ ETH)
2. **All Contract Deployments Fail**
- Even minimal 204-byte contracts fail
- All transactions use all available gas and revert
- Pattern suggests network-level restriction
3. **Network is Operational**
- Blocks are being produced
- Regular transactions may work (not tested)
- Only contract creation appears to be blocked
---
## Requested Actions
1. **Verify Network Configuration**
- Check if contract creation is restricted at validator level
- Review Besu configuration on RPC nodes
- Check for any network-level restrictions
2. **Review Besu Logs**
- Check RPC node logs for deployment errors
- Look for transaction rejection reasons
- Verify if there are permission errors
3. **Test Contract Creation**
- Attempt to deploy a minimal contract from validator node
- Verify if contract creation works from different accounts
- Check if there are account-specific restrictions
4. **Provide Resolution**
- Enable contract creation if it's disabled
- Whitelist deployer account if needed
- Provide alternative deployment method
---
## Diagnostic Scripts
The following scripts were used to generate this report:
1. \`scripts/comprehensive-network-diagnostic.sh\` - Complete network diagnostic
2. \`scripts/verify-rpc-permissions.sh\` - RPC permissioning verification
3. \`scripts/check-besu-logs.sh\` - Besu log analysis
---
## Contact Information
**Deployer Address**: $DEPLOYER
**RPC Endpoint**: $RPC_URL
**Network**: ChainID 138 (DBIS Chain)
---
**Report Generated**: $(date)
**Report Location**: $REPORT_FILE
EOF
echo "✅ Diagnostic report generated: $REPORT_FILE"
echo ""
echo "Report contents:"
head -50 "$REPORT_FILE"
echo ""
echo "... (full report saved to file)"