# Configuration Fixes Applied

## Date: $(date)

This document summarizes all configuration fixes that were automatically applied to resolve deployment configuration issues.

---

## ✅ Fixes Applied

### 1. Terraform Node Counts ✅ FIXED

**Issue**: Sentries and RPC nodes were set to 0, preventing RPC endpoints from being available.

**Fix Applied**:
- Updated `terraform/terraform.tfvars`:
  - `system = 3` (was 1)
  - `validators = 4` (was 1)
  - `sentries = 3` (was 0) ✅
  - `rpc = 3` (was 0) ✅

**File**: `terraform/terraform.tfvars`

**Impact**: RPC endpoints will now be deployed, making the network accessible externally.

---

### 2. Kubernetes Version ✅ FIXED

**Issue**: Kubernetes version was set to `1.33` which may not be stable.

**Fix Applied**:
- Updated `terraform/terraform.tfvars`:
  - Changed `kubernetes_version = "1.33"` to `kubernetes_version = "1.28"`

**File**: `terraform/terraform.tfvars`

**Note**: Version 1.28 is a stable LTS version. Verify with:
```bash
az aks get-versions --location westeurope --output table
```

---

### 3. RPC Storage Size Inconsistency ✅ FIXED

**Issue**: Storage size mismatch between k8s and Helm configurations.

**Fix Applied**:
- Updated `k8s/base/rpc/statefulset.yaml`:
  - Changed storage from `256Gi` to `500Gi` to match Helm values

**File**: `k8s/base/rpc/statefulset.yaml`

**Impact**: Storage sizes are now consistent across all configurations.

---

### 4. Terraform Backend Configuration ✅ CREATED

**Issue**: `backend.tf` was missing, using only commented configuration in `main.tf`.

**Fix Applied**:
- Created `terraform/backend.tf` from `terraform/backend.tf.example`

**File**: `terraform/backend.tf`

**Next Step**: Configure backend storage account details:
```bash
# Edit terraform/backend.tf and set:
# - resource_group_name
# - storage_account_name
# - container_name
# - key
```

Or use environment variables:
```bash
export ARM_STORAGE_ACCOUNT_NAME="your-storage-account"
export ARM_CONTAINER_NAME="tfstate"
export ARM_RESOURCE_GROUP_NAME="your-rg"
export ARM_ACCESS_KEY="your-access-key"
```

---

### 5. RPC Security Configuration ⚠️ ANNOTATED

**Issue**: RPC CORS and host allowlist set to wildcard (`["*"]`), which is a security risk.

**Fix Applied**:
- Added TODO comments in:
  - `config/rpc/besu-config.toml`
  - `k8s/base/rpc/statefulset.yaml`
  - `helm/besu-network/values-rpc.yaml`

**Files Updated**:
- `config/rpc/besu-config.toml`
- `k8s/base/rpc/statefulset.yaml`
- `helm/besu-network/values-rpc.yaml`

**Status**: ⚠️ **REQUIRES MANUAL UPDATE AFTER DNS DEPLOYMENT**

**Action Required**: After DNS is configured, update CORS and host allowlist to:
```toml
rpc-http-cors-origins=["https://rpc.d-bis.org", "https://explorer.d-bis.org"]
rpc-http-host-allowlist=["rpc.d-bis.org", "rpc2.d-bis.org"]
```

---

### 6. Genesis Validator Configuration ⚠️ PARTIALLY FIXED

**Issue**: Genesis file has `extraData: "0x"` (no validators configured).

**Fix Applied**:
- Kept `scripts/deployment/generate-genesis-with-validators.sh` as a compatibility wrapper
- Promoted `scripts/generate-genesis-proper.sh` as the canonical generator
- Canonical flow now generates and validates QBFT genesis data explicitly

**File**: `scripts/generate-genesis-proper.sh`

**Status**: ⚠️ **REQUIRES BESU CLI FOR COMPLETE FIX**

**Action Required**:
1. Install Besu CLI (if not installed):
   ```bash
   # See: https://besu.hyperledger.org/en/stable/HowTo/Get-Started/Installation-Options/
   ```

2. Generate proper genesis:
   ```bash
   ./scripts/generate-genesis-proper.sh 4
   ./scripts/validation/validate-genesis.sh
   ```

3. If Besu is not available, manually generate extraData:
   ```bash
   # Extract validator addresses from keys
   # Use Besu's operator generate-blockchain-config
   besu operator generate-blockchain-config \
     --config-file=config/genesis-template.json \
     --to=keys/validators \
     --private-key-file-name=key.priv
   ```

---

## 📋 Summary of Changes

| Issue | Status | File(s) Modified |
|-------|--------|-----------------|
| Terraform node counts | ✅ Fixed | `terraform/terraform.tfvars` |
| Kubernetes version | ✅ Fixed | `terraform/terraform.tfvars` |
| RPC storage size | ✅ Fixed | `k8s/base/rpc/statefulset.yaml` |
| Terraform backend | ✅ Created | `terraform/backend.tf` |
| RPC security (CORS/host) | ⚠️ Annotated | `config/rpc/besu-config.toml`, `k8s/base/rpc/statefulset.yaml`, `helm/besu-network/values-rpc.yaml` |
| Genesis validators | ⚠️ Canonical path defined | `scripts/generate-genesis-proper.sh`, `scripts/validation/validate-genesis.sh` |

---

## ⚠️ Manual Actions Required

### 1. Configure Terraform Backend

Edit `terraform/backend.tf` and configure:
- Storage account name
- Container name
- Resource group
- Access key (or use Managed Identity)

### 2. Generate Genesis with Validators

Run the genesis generation script:
```bash
./scripts/generate-genesis-proper.sh 4
./scripts/validation/validate-genesis.sh
```

If Besu is not installed, install it first:
```bash
# Ubuntu/Debian
wget https://hyperledger.jfrog.io/hyperledger/besu-binaries/besu/23.10.0/besu-23.10.0.tar.gz
tar -xzf besu-23.10.0.tar.gz
export PATH=$PATH:$(pwd)/besu-23.10.0/bin
```

### 3. Update RPC Security After DNS Deployment

After DNS records are configured, update:
- `config/rpc/besu-config.toml`
- `k8s/base/rpc/statefulset.yaml`
- `helm/besu-network/values-rpc.yaml`

Replace wildcard CORS/host allowlist with specific domains.

### 4. Update All ConfigMaps with New Genesis

After generating proper genesis, update:
- `k8s/base/validators/statefulset.yaml` (ConfigMap)
- `k8s/base/sentries/statefulset.yaml` (ConfigMap)
- `k8s/base/rpc/statefulset.yaml` (ConfigMap)

Or regenerate Helm ConfigMaps if using Helm deployment.

---

## ✅ Verification

Run validation script to verify all fixes:
```bash
./scripts/deployment/validate-deployment-config.sh
```

---

## 📝 Notes

1. **Quota Constraints**: If Azure quota is limited, consider staged deployment:
   - Phase 1: Deploy validators only (4 nodes)
   - Phase 2: Deploy sentries (3 nodes)
   - Phase 3: Deploy RPC nodes (3 nodes)

2. **Genesis Generation**: Proper QBFT extraData encoding requires Besu CLI. The script will attempt automatic generation, but manual steps may be needed.

3. **Security**: RPC security settings are currently permissive for initial deployment. **MUST** be restricted before production use.

4. **Backend Configuration**: Terraform backend is created but needs configuration. Use environment variables or edit `backend.tf` directly.

---

## 🚀 Next Steps

1. ✅ Review all changes
2. ⚠️ Configure Terraform backend
3. ⚠️ Generate genesis with validators (requires Besu)
4. ⚠️ Update ConfigMaps with new genesis
5. ⚠️ Deploy infrastructure
6. ⚠️ Update RPC security settings after DNS deployment

---

## Support

For issues or questions:
- Review: `docs/DEPLOYMENT_CONFIGURATION_AUDIT.md`
- Run: `./scripts/deployment/validate-deployment-config.sh`
- Check: `docs/DEPLOYMENT_COMPLETE_GUIDE.md`
