# Deployment Configuration Audit Report

## Executive Summary

This document provides a comprehensive audit of the deployment configuration for the DeFi Oracle Meta Mainnet (ChainID 138), identifying misconfigurations, gaps, and recommendations.

**Audit Date**: 2026-04-13
**Chain ID**: 138
**Status**: Historical audit snapshot; revalidate against current configs before acting

---

## Critical Issues

### 1. ❌ Genesis File Missing Validators

**Issue**: The `config/genesis.json` file has `extraData: "0x"` which means no validators are configured in the genesis block.

**Impact**: 
- QBFT requires validators to be specified in the genesis `extraData` field
- Network cannot start without validators
- Blocks cannot be produced

**Location**: `config/genesis.json` line 35

**Current State**:
```json
"extraData": "0x"
```

**Required**: Validator addresses must be encoded in `extraData` using QBFT format:
```
extraData = RLP([32 bytes Vanity, [][20 bytes]Validators, 65 bytes Signature])
```

**Fix**: Run `./scripts/generate-genesis-proper.sh 4` to regenerate genesis with validator addresses from `keys/validators/`.

---

### 2. ❌ Terraform Node Counts Disabled

**Issue**: In `terraform/terraform.tfvars`, sentries and RPC nodes are set to 0:

```hcl
node_count = {
  system     = 1
  validators = 1
  sentries   = 0  # ❌ Disabled
  rpc        = 0  # ❌ Disabled
}
```

**Impact**:
- No RPC endpoints will be available (explains why RPCs are not live)
- No sentry nodes for P2P connectivity
- Network cannot be accessed externally
- Contracts cannot be deployed

**Fix**: Update `terraform/terraform.tfvars`:
```hcl
node_count = {
  system     = 3
  validators = 4
  sentries   = 3
  rpc        = 3
}
```

**Note**: Current configuration shows quota constraints (4 vCPUs remaining). Consider:
1. Requesting quota increase
2. Using smaller VM sizes
3. Staged deployment (deploy validators first, then sentries/RPC)

---

### 3. ⚠️ Kubernetes Version Mismatch

**Issue**: `terraform/terraform.tfvars` specifies `kubernetes_version = "1.33"` which is likely invalid.

**Impact**: 
- Terraform may fail during AKS cluster creation
- AKS may not support version 1.33

**Current Supported Versions**: AKS typically supports versions up to 1.28-1.30 range.

**Fix**: Update to a supported version:
```hcl
kubernetes_version = "1.28"  # or latest supported
```

**Verification**: Check supported versions:
```bash
az aks get-versions --location westeurope --output table
```

---

## Configuration Gaps

### 4. ⚠️ Missing Validator Addresses in Genesis

**Issue**: Genesis file doesn't include validator addresses in `extraData`.

**Required**: Validator public keys must be extracted from `keys/validators/` and encoded in genesis `extraData`.

**Fix**: Ensure `scripts/generate-genesis-proper.sh`:
1. Reads validator public keys from `keys/validators/*/key.pub`
2. Encodes them in QBFT format
3. Updates `extraData` field

---

### 5. ⚠️ Static Nodes Configuration

**Issue**: `config/static-nodes.json` may be empty or incomplete.

**Impact**: Nodes may not be able to peer with each other.

**Required**: Static nodes should include:
- Validator enode addresses
- Sentry enode addresses

**Fix**: Ensure static-nodes.json is generated with all node enode addresses.

---

### 6. ⚠️ Terraform Backend Not Configured

**Issue**: `terraform/main.tf` has backend configuration but it's commented/empty.

**Impact**: 
- Terraform state may not be stored properly
- State locking may not work
- Team collaboration issues

**Fix**: Configure Terraform backend:
```hcl
backend "azurerm" {
  resource_group_name  = "tfstate-rg"
  storage_account_name = "tfstate<random>"
  container_name       = "tfstate"
  key                  = "defi-oracle-mainnet.terraform.tfstate"
}
```

---

### 7. ⚠️ Missing Application Gateway Configuration

**Issue**: Application Gateway configuration may be incomplete for RPC endpoints.

**Required**: 
- Backend pool configuration for RPC nodes
- HTTP settings
- Listener configuration
- Routing rules
- WAF rules

**Location**: Check `terraform/modules/networking/` for Application Gateway configuration.

---

### 8. ⚠️ Missing DNS Configuration

**Issue**: DNS records for `rpc.d-bis.org` and `rpc2.d-bis.org` may not be configured.

**Impact**: RPC endpoints won't be accessible via domain names.

**Fix**: After Application Gateway deployment, configure Cloudflare DNS:
```bash
./scripts/deployment/cloudflare-dns.sh --zone-id $CLOUDFLARE_ZONE_ID --api-token $CLOUDFLARE_API_TOKEN --ip <gateway-ip>
```

---

## Consistency Checks

### ✅ Chain ID Consistency

**Status**: ✅ **CONSISTENT**

All configurations use Chain ID 138:
- `config/genesis.json`: ✅ 138
- `helm/besu-network/values.yaml`: ✅ 138
- `config/rpc/besu-config.toml`: ✅ network-id=138
- `config/validators/besu-config.toml`: ✅ network-id=138
- `config/sentries/besu-config.toml`: ✅ network-id=138
- `config/blockscout/config.json`: ✅ 138

---

### ✅ QBFT Configuration

**Status**: ✅ **CONSISTENT**

QBFT parameters are consistent:
- Block period: 2 seconds ✅
- Epoch length: 30,000 blocks ✅
- Request timeout: 10 seconds ✅

**Location**: `config/genesis.json` and all Besu config files.

---

### ⚠️ Resource Configuration Inconsistencies

**Issue**: Resource requests/limits differ between Helm values and Terraform node sizes.

**Helm values-validators.yaml**:
- Requests: cpu: "4", memory: "8Gi"
- Limits: cpu: "8", memory: "16Gi"

**Helm values.yaml (base)**:
- Requests: cpu: "2", memory: "4Gi"
- Limits: cpu: "4", memory: "8Gi"

**Terraform terraform.tfvars**:
- VM Size: `Standard_D4s_v3` (4 vCPUs, 16 GiB RAM)

**Analysis**: 
- Helm values-validators.yaml requests 4 CPUs but base values.yaml requests 2 CPUs
- Terraform uses D4s_v3 (4 vCPUs) which matches values-validators.yaml
- Base values.yaml may be overridden by values-validators.yaml (correct)

**Recommendation**: Ensure values-validators.yaml is used when deploying validators.

---

### ⚠️ Storage Configuration

**Status**: ⚠️ **INCONSISTENT**

**Helm values-validators.yaml**: 512Gi
**Helm values-rpc.yaml**: 500Gi
**Helm values.yaml (base)**: 256Gi
**k8s/base/validators/statefulset.yaml**: 512Gi ✅
**k8s/base/rpc/statefulset.yaml**: 256Gi ❌ (should be 500Gi per values-rpc.yaml)

**Fix**: Update `k8s/base/rpc/statefulset.yaml` storage size to match Helm values.

---

## Blockchain Technology Configuration

### Besu Configuration

#### Validators
- ✅ Consensus: QBFT
- ✅ RPC: Disabled (correct for security)
- ✅ P2P: Enabled on port 30303
- ✅ Sync Mode: FULL
- ✅ Network ID: 138
- ✅ Metrics: Enabled on port 9545

#### Sentries
- ✅ Consensus: QBFT (read-only)
- ✅ RPC: Enabled but internal only (127.0.0.1)
- ✅ P2P: Enabled on port 30303
- ✅ Sync Mode: FULL
- ✅ Network ID: 138
- ✅ Metrics: Enabled

#### RPC Nodes
- ✅ Consensus: QBFT (read-only)
- ✅ RPC: Enabled publicly (0.0.0.0)
- ✅ P2P: Disabled (correct)
- ✅ Sync Mode: SNAP (correct for RPC nodes)
- ✅ Network ID: 138
- ✅ CORS: Enabled with wildcard (⚠️ should be restricted in production)
- ✅ Host Allowlist: Wildcard (⚠️ should be restricted in production)

**Security Concern**: RPC nodes have `corsOrigins: ["*"]` and `hostAllowlist: ["*"]`. For production, these should be restricted to specific domains.

---

### Network Architecture

**Tiered Architecture**: ✅ **CORRECTLY CONFIGURED**

1. **Validators** (Private subnets)
   - ✅ No public IPs
   - ✅ RPC disabled
   - ✅ P2P to sentries only

2. **Sentries** (Public subnets)
   - ✅ Public P2P
   - ✅ Internal RPC only
   - ✅ Peer to validators and sentries

3. **RPC Nodes** (DMZ subnet)
   - ✅ No P2P
   - ✅ Public RPC
   - ✅ Behind Application Gateway

---

## Missing Configurations

### 1. Application Gateway Configuration

**Status**: ⚠️ **MISSING OR INCOMPLETE**

**Required**:
- Backend pool with RPC node IPs
- HTTP settings
- Listener on port 443 (HTTPS)
- Routing rules
- WAF policy
- SSL certificate configuration

**Location**: Check `terraform/modules/networking/` for Application Gateway module.

---

### 2. Monitoring Configuration

**Status**: ⚠️ **PARTIALLY CONFIGURED**

**Found**:
- ✅ Prometheus configuration referenced
- ✅ Grafana optional
- ✅ Metrics enabled on Besu nodes

**Missing**:
- ServiceMonitor CRD configuration
- Alert rules
- Alertmanager configuration

---

### 3. Key Management

**Status**: ⚠️ **NEEDS VERIFICATION**

**Found**:
- ✅ Validator keys directory structure
- ✅ Key generation scripts
- ✅ Azure Key Vault module

**Missing Verification**:
- Keys stored in Azure Key Vault
- Kubernetes secrets created from Key Vault
- Key rotation procedures

---

### 4. Backup Configuration

**Status**: ⚠️ **NOT CONFIGURED**

**Missing**:
- Backup storage account configuration
- Backup schedule
- Chaindata backup procedures
- Key backup procedures

---

## Recommendations

### Immediate Actions (Before Deployment)

1. **Fix Genesis File**
   ```bash
   ./scripts/generate-genesis-proper.sh 4
   ```
   Verify `extraData` contains validator addresses.

2. **Update Terraform Node Counts**
   ```hcl
   node_count = {
     system     = 3
     validators = 4
     sentries   = 3
     rpc        = 3
   }
   ```

3. **Fix Kubernetes Version**
   ```hcl
   kubernetes_version = "1.28"  # Check latest supported
   ```

4. **Verify Validator Keys**
   ```bash
   ls -la keys/validators/*/key.pub
   ```
   Ensure 4 validator public keys exist.

### Pre-Deployment Checklist

- [ ] Genesis file has validators in extraData
- [ ] Terraform node counts are correct
- [ ] Kubernetes version is supported
- [ ] Validator keys are generated
- [ ] Static nodes are configured
- [ ] Terraform backend is configured
- [ ] Application Gateway is configured
- [ ] DNS records are ready
- [ ] Monitoring is configured
- [ ] Backup procedures are defined

### Post-Deployment Verification

- [ ] Validators are producing blocks
- [ ] Sentries are peering correctly
- [ ] RPC endpoints are accessible
- [ ] Application Gateway is routing correctly
- [ ] DNS is resolving
- [ ] Monitoring is collecting metrics
- [ ] Contracts can be deployed

---

## Configuration Files Summary

### ✅ Correctly Configured

- Chain ID: 138 (consistent across all files)
- QBFT parameters (block period, epoch, timeout)
- Network ID: 138 (consistent)
- Besu image: hyperledger/besu:23.10.0
- Resource sizing (mostly consistent)
- Storage classes: managed-premium
- Namespace: besu-network

### ❌ Needs Fixing

- Genesis extraData (missing validators)
- Terraform node counts (sentries=0, rpc=0)
- Kubernetes version (1.33 likely invalid)
- RPC CORS/host allowlist (too permissive)
- Storage size in k8s/rpc/statefulset.yaml (inconsistent)

### ⚠️ Needs Verification

- Terraform backend configuration
- Application Gateway configuration
- DNS configuration
- Key Vault integration
- Monitoring setup
- Backup procedures

---

## Next Steps

1. **Fix Critical Issues** (Genesis, Node Counts, K8s Version)
2. **Regenerate Genesis** with validator addresses
3. **Update Terraform Configuration**
4. **Verify All Configurations**
5. **Deploy Infrastructure**
6. **Deploy Kubernetes Resources**
7. **Deploy Contracts**
8. **Verify End-to-End**

---

## Support

For questions or issues:
- Review configuration files
- Check deployment documentation
- Verify prerequisites
- Run validation scripts
