- Does the compiler version and optimizer setting have to match exactly?
- Yes. The compiler recompiles your source with the exact settings you choose, then compares the result byte-for-byte against what's on chain. A different optimizer run-count, optimizer on/off, or compiler version produces different bytecode even from identical source — so it won't match. If you don't know the original settings, check the 'we noticed embedded metadata' hint above the form; it pre-fills the compiler version when it can detect one.
- My contract has a constructor with arguments — what do I put in 'Constructor arguments'?
- The ABI-encoded hex of the exact arguments passed at deployment, in order — the same bytes that were appended after the contract's bytecode in the deployment transaction. Each argument is a 32-byte word; multiple arguments are concatenated back-to-back. If the constructor takes no arguments, leave the field blank.
- My contract imports another file — can I verify it?
- Not yet through this form — it only accepts a single source file today, even though the backend format supports up to 25. If your contract has local imports, you'll need to inline everything into one file before submitting, or wait for multi-file support.
- My contract links an external library — can I verify it?
- Not yet — there's no field for library addresses on this form yet, even though the underlying system supports it. Contracts with linked libraries can't be verified here for now.
- I submitted and got 'no match' with a byte diff — what went wrong?
- Almost always one of: wrong compiler version, wrong optimizer enabled/runs setting, source that isn't exactly what was deployed (even a single changed character changes the bytecode), or missing/wrong constructor arguments. The diff shows the first byte offset where your recompiled code and the on-chain code diverge — an early divergence usually means compiler/optimizer settings are off; a late one often points to constructor arguments.
- Is my source code private once I submit it?
- No — a successful verification publishes your source and ABI on the public contract page immediately, for everyone. Don't submit source you don't want public.
- Does the source have to come from the original deployer?
- No. Anyone can submit source for any unverified contract — verification only checks that the bytecode matches, not who's submitting it. That's also why it proves nothing about the deployer's identity (see the Official badge for curated issuer identity).
- I got 'too many failed attempts, wait' — what happened?
- After 3 failed verify attempts on the same contract within 10 minutes, submissions are temporarily blocked to prevent brute-forcing compiler settings. Wait 10 minutes, double-check your settings, and try again.