199 lines
5.0 KiB
Markdown
199 lines
5.0 KiB
Markdown
|
|
# 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)
|
||
|
|
|