250 lines
7.9 KiB
Bash
Executable File
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)"
|
|
|