# Etherscan Verification - Bytecode Mismatch Fix

**Date**: $(date)  
**Issue**: "Unable to get compiled bytecode" - Standard JSON compilation failure  
**Status**: ⚠️ **TROUBLESHOOTING REQUIRED**

---

## 🔍 Current Error

```
Error! Unable to find matching Contract Bytecode and ABI
(Unable to get compiled bytecode -- Please check the compiler output for more information)

Compiler Warning(s):
Unknown key "compiler"  ← FIXED (removed invalid field)

Bytecode mismatch - compiled bytecode doesn't match deployed bytecode
```

---

## ✅ Fixes Applied

1. **Removed Invalid "compiler" Field** ✅
   - Standard JSON format doesn't support `"compiler"` in settings
   - Field has been removed from `CCIPWETH9Bridge_standard_json.json`

2. **Standard JSON Validated** ✅
   - JSON syntax is valid
   - Structure is correct

---

## 🔧 Remaining Issue: Bytecode Mismatch

The Standard JSON compiles but the bytecode doesn't match the deployed contract. This can happen when:

1. **Source Code Mismatch**: The flattened source doesn't exactly match what was deployed
2. **Compiler Settings**: Some subtle setting difference
3. **File Structure**: Source file organization affects compilation

---

## 🎯 Solution Options

### Option 1: Regenerate Standard JSON from Source (Recommended)

Generate a fresh Standard JSON from the actual source project:

```bash
cd /home/intlc/projects/smom-dbis-138

# Build the contract to get Standard JSON
forge build --force

# The Standard JSON will be in:
# out/CCIPWETH9Bridge.sol/CCIPWETH9Bridge.json
# Look for the "standardJsonInput" field or extract from build artifacts
```

### Option 2: Use Foundry's Standard JSON Export

```bash
cd /home/intlc/projects/smom-dbis-138

# Compile with exact deployment settings
forge build --via-ir --optimize --optimizer-runs 200

# Extract Standard JSON from build output
# Check: out/CCIPWETH9Bridge.sol/CCIPWETH9Bridge.json
```

### Option 3: Try Without Via-IR (If Possible)

If the contract can be verified without `via-ir`, try:

1. **On Etherscan UI**:
   - Select "Standard JSON Input"
   - **Deselect "Via IR"** option
   - Use compiler version 0.8.20
   - Upload Standard JSON (without viaIR: true)

**Note**: This may not work if the contract was deployed with `via-ir` and requires it.

### Option 4: Use Sourcify (Alternative Verification)

Sourcify is an alternative verification service that might handle `via-ir` better:

1. Go to: https://sourcify.dev/
2. Upload contract metadata
3. Submit for verification

---

## 📋 Verification Checklist

- [x] Removed invalid "compiler" field from Standard JSON
- [x] Validated JSON syntax
- [ ] **Regenerate Standard JSON from source project** ← **NEXT STEP**
- [ ] Verify Standard JSON compiles correctly
- [ ] Compare generated bytecode with deployed bytecode
- [ ] Submit verification with correct Standard JSON

---

## 🔍 Diagnostic Steps

### Step 1: Verify Source Code Matches

Check if the source code in Standard JSON matches the deployed version:

```bash
cd /home/intlc/projects/smom-dbis-138

# Get the actual source file
cat contracts/ccip/CCIPWETH9Bridge.sol

# Compare with Standard JSON content
# The source should match exactly
```

### Step 2: Check Deployment Settings

Verify the exact deployment command used:

```bash
# From deployment script, the contract was deployed with:
# --via-ir
# --optimize (200 runs)
# Compiler: 0.8.20
```

### Step 3: Generate Fresh Standard JSON

```bash
cd /home/intlc/projects/smom-dbis-138

# Clean build
forge clean

# Build with exact deployment settings
forge build --via-ir --optimize --optimizer-runs 200 --force

# Extract Standard JSON from build artifacts
# Location: out/CCIPWETH9Bridge.sol/CCIPWETH9Bridge.json
```

---

## 📝 Standard JSON Requirements

For Etherscan verification, Standard JSON must:

1. ✅ Have valid JSON syntax
2. ✅ Include all source code (flattened)
3. ✅ Match exact compiler settings used during deployment
4. ✅ Have correct file names matching contract imports
5. ✅ Include `viaIR: true` if deployed with `--via-ir`

---

## 🚨 Common Issues

### Issue: "Unknown key 'compiler'"
**Status**: ✅ **FIXED** - Removed invalid field

### Issue: "Unable to get compiled bytecode"
**Cause**: Standard JSON doesn't compile correctly
**Solution**: Regenerate from source project

### Issue: Bytecode mismatch
**Cause**: Source code or settings don't match deployment
**Solution**: Use exact source and settings from deployment

---

## 📚 Next Steps

1. **Regenerate Standard JSON** from source project
2. **Verify it compiles** locally before submitting
3. **Compare bytecode** if possible
4. **Submit to Etherscan** with fresh Standard JSON

---

## 🔗 Related Files

- **Current Standard JSON**: `docs/CCIPWETH9Bridge_standard_json.json` (fixed, but may need regeneration)
- **Source Project**: `/home/intlc/projects/smom-dbis-138`
- **Source File**: `contracts/ccip/CCIPWETH9Bridge.sol`

---

**Status**: ⚠️ **STANDARD JSON FIXED - NEEDS REGENERATION FROM SOURCE**  
**Priority**: Regenerate Standard JSON from actual source project  
**Last Updated**: $(date)

