Upgrade Semantic Diff compares two contract versions at the bytecode level and tells you what changed. It’s the quick screen before a full upgrade simulation — a list of the semantic differences plus a before/after profile of the parts that matter for security.
Why it exists
Before approving an upgrade, the first question is simply “what changed?” — and running a full decompile or re-analysis to answer it is overkill. This page is the fast path: it diffs the two bytecodes and surfaces the categories of change worth a closer look, so you know where to spend the deeper review.
Who uses it
- Auditor — screens a proposed upgrade before committing to the full simulator run.
- Researcher — diffs two versions of a contract to understand what moved.
How to open it
- Sidebar → Simulation → Upgrade Diff.
- Direct URL —
/upgrade-diff.
Running a diff
Pick a source contract from the workspace — its stored bytecode loads
automatically — and paste the new runtime bytecode as the target, then
Run semantic diff. Try Me loads a sample so you can see the page
work without real inputs. The result is a changes list of the detected
semantic differences and a profile summary giving before/after counts
for the security-relevant surface: authorization slots, event topics,
delegatecall, tx.origin, and reverts.
Limits
- Requires a signed-in account, and diffs EVM bytecode.
- This is a bytecode-level diff — storage-layout and selector checks live in the Upgrade Simulator. The page describes what it does and doesn’t catch inline; read that before interpreting a result. An all-zeros profile means no categorized changes, which is a valid result.
Related pages
- Upgrade Simulator — the full storage-and-selector simulator for proxy upgrades.