# Etherscan Bytecode Mismatch - Troubleshooting Guide **Error**: "Unable to find matching Contract Bytecode and ABI" **Contract**: `0x89dd12025bfCD38A168455A44B400e913ED33BE2` --- ## 🔍 Root Cause The bytecode mismatch occurs when the compiler settings used for verification don't match the settings used during deployment. **Key Finding**: The contract was deployed with `--via-ir` flag, which is likely the issue. --- ## ✅ Solution: Try These Settings in Order ### Option 1: With Via IR Enabled (MOST LIKELY) **Settings**: - **Compiler Type**: `SINGLE FILE / CONCATENATED METHOD` - **Compiler Version**: `v0.8.20+commit.a1b79de6` - **License**: `MIT License (MIT)` - **Optimization**: `Yes` (200 runs) - **Via IR**: ✅ **YES** ← **This is likely the issue!** **Why**: The deployment script used `--via-ir` flag, so verification must also use via-ir. --- ### Option 2: Without Via IR **Settings**: - **Compiler Type**: `SINGLE FILE / CONCATENATED METHOD` - **Compiler Version**: `v0.8.20+commit.a1b79de6` - **License**: `MIT License (MIT)` - **Optimization**: `Yes` (200 runs) - **Via IR**: `No` **Try this if Option 1 fails**. --- ### Option 3: Different Compiler Version If the exact commit hash doesn't match, try: - `v0.8.20` (without commit hash) - Or check the exact compiler version from the deployment transaction --- ## 🔧 Additional Troubleshooting Steps ### 1. Verify Constructor Arguments **ABI-Encoded Constructor Arguments**: ``` 0x00000000000000000000000080226fc0ee2b096224eeac085bb9a8cba1146f7d000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca ``` **Decoded**: 1. `_ccipRouter`: `0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D` 2. `_weth9`: `0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2` 3. `_feeToken`: `0x514910771AF9Ca656af840dff83E8264EcF986CA` **Verify**: Double-check these addresses are correct. --- ### 2. Check Source Code Ensure the flattened contract source code matches exactly what was deployed: - **File**: `docs/CCIPWETH9Bridge_flattened.sol` - **Lines**: 396 lines - **Includes**: IRouterClient interface and IERC20 interface --- ### 3. Verify Compiler Settings Match From `foundry.toml`: - `solc_version = "0.8.20"` - `optimizer = true` - `optimizer_runs = 200` - `via_ir = false` (default, but deployment used `--via-ir`) **Important**: The deployment used `--via-ir` flag, which overrides the default `via_ir = false` setting. --- ### 4. Try Standard JSON Input Method If single-file method continues to fail: 1. **Generate Standard JSON**: ```bash cd /home/intlc/projects/smom-dbis-138 forge build --via-ir --force ``` 2. **Use Standard JSON Input** on Etherscan: - Select "Standard JSON Input" instead of "Single file" - Upload the Standard JSON from build artifacts --- ## 📋 Deployment Information From `broadcast/DeployCCIPWETH9Bridge.s.sol/1/run-latest.json`: - **Deployment Transaction**: `0x424b51cac9bf78c59629af93b8bcdabe8fee6235458785da32bec933bac1051d` - **Block Number**: `0x16afbd0` (23,844,816) - **Deployer**: `0x4a666f96fc8764181194447a7dfdb7d471b301c8` - **Constructor Args**: - `0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D` - `0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2` - `0x514910771AF9Ca656af840dff83E8264EcF986CA` **Note**: The broadcast file shows a different contract address (`0x3304b747e565a97ec8ac220b0b6a1f6ffdb837e6`), which suggests the contract at `0x89dd12025bfCD38A168455A44B400e913ED33BE2` may have been deployed separately or with different settings. --- ## 🎯 Recommended Action **Try Option 1 first** (with Via IR: YES): 1. Go to Etherscan verification page 2. Select **Via IR: YES** 3. Use all other settings as before 4. Paste the flattened contract code 5. Enter constructor arguments 6. Submit If that fails, try Option 2 (Via IR: NO), then Option 3 (different compiler version). --- ## 🔍 Verify Bytecode Match To verify the bytecode matches: ```bash # Get deployed bytecode cast code 0x89dd12025bfCD38A168455A44B400e913ED33BE2 --rpc-url $ETHEREUM_MAINNET_RPC > deployed.bytecode # Compile with via-ir cd /home/intlc/projects/smom-dbis-138 forge build --via-ir --force # Compare bytecode from build artifacts ``` --- **Last Updated**: $(date) **Status**: ⚠️ **TROUBLESHOOTING - TRY VIA IR: YES**