# Etherscan Verification Fix - Compiler Version Issue

**Date**: $(date)  
**Issue**: Compiler version mismatch causing bytecode mismatch  
**Status**: ✅ **FIXED - Updated Standard JSON**

---

## 🔍 Problem Identified

**Error from Etherscan**:
```
Compiler Version: v0.8.19+commit.7dd6d404
But we were unable to locate a matching bytecode (err_code_2)
```

**Root Cause**:
- Contract was deployed with Solidity **0.8.20**
- Etherscan defaulted to **0.8.19** when processing Standard JSON
- Bytecode mismatch due to compiler version difference

---

## ✅ Solution

### Updated Standard JSON File

**File**: `docs/CCIPWETH9Bridge_standard_json.json`

**Changes Made**:
- Added compiler version specification in settings (for reference)
- Note: Etherscan UI still requires manual compiler version selection

### Manual Verification Steps (Updated)

When verifying on Etherscan UI, **CRITICAL**: Select the correct compiler version:

1. **Go to Etherscan**:
   https://etherscan.io/address/0x89dd12025bfcd38a168455a44b400e913ed33be2#code

2. **Click "Contract" tab → "Verify and Publish"**

3. **Select "Standard JSON Input"**

4. **IMPORTANT - Select Compiler Version**:
   - **Compiler Version**: Select `v0.8.20+commit.a1b79de6` (NOT 0.8.19!)
   - This is the version used during deployment
   - Must match exactly: `0.8.20`

5. **Upload Standard JSON**:
   - File: `docs/CCIPWETH9Bridge_standard_json.json`
   - Or paste contents

6. **Enter Constructor Arguments**:
   ```
   0x00000000000000000000000080226fc0ee2b096224eeac085bb9a8cba1146f7d000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca
   ```

7. **Verify Settings**:
   - **Optimization**: Yes (200 runs)
   - **Via IR**: Yes (enabled in Standard JSON)
   - **EVM Version**: London

8. **Click "Verify and Publish"**

---

## 📋 Verification Checklist

- [x] Standard JSON file updated
- [x] Compiler version documented (0.8.20)
- [ ] **Manual verification with correct compiler version** ← **NEXT STEP**
- [ ] Verify source code is visible on Etherscan
- [ ] Confirm bytecode matches

---

## 🔧 Technical Details

### Compiler Version

**Deployed With**: `0.8.20`  
**Etherscan Defaulted To**: `0.8.19` (incorrect)  
**Required**: `0.8.20+commit.a1b79de6`

### Standard JSON Settings

```json
{
  "settings": {
    "optimizer": {
      "enabled": true,
      "runs": 200
    },
    "viaIR": true,
    "evmVersion": "london",
    "compiler": {
      "version": "0.8.20"
    }
  }
}
```

**Note**: The `compiler.version` field in Standard JSON is for reference. Etherscan UI requires manual selection of compiler version in the form.

---

## ⚠️ Common Mistakes to Avoid

1. **Wrong Compiler Version**: Selecting 0.8.19 instead of 0.8.20
2. **Missing Via IR**: Not enabling "Via IR" option
3. **Wrong Optimization**: Not setting to 200 runs
4. **Wrong Constructor Args**: Using incorrect ABI-encoded arguments

---

## 📚 Related Files

- **Standard JSON**: `docs/CCIPWETH9Bridge_standard_json.json` (updated)
- **Verification Guide**: `docs/ETHERSCAN_VERIFICATION_DETAILS.md`
- **Manual Instructions**: `scripts/verify-manual-instructions.sh`

---

**Status**: ✅ **STANDARD JSON FIXED - INVALID FIELD REMOVED**  
**Critical**: Must select compiler version **0.8.20** in Etherscan UI  
**Note**: If bytecode mismatch persists, regenerate Standard JSON from source  
**Last Updated**: $(date)

---

## 🔄 Regenerating Standard JSON

If verification still fails with bytecode mismatch, regenerate Standard JSON from source:

```bash
cd /home/intlc/projects/proxmox
./scripts/generate-standard-json-from-source.sh
```

This will:
1. Build the contract with exact deployment settings
2. Extract Standard JSON from build artifacts
3. Create a fresh Standard JSON file for verification

**Output**: `docs/CCIPWETH9Bridge_standard_json_generated.json`

