Skip to main content
Sigvex

Upgrade Semantic Diff

Bytecode-level semantic diff between two contract versions, with a profile summary and a Try Me sample.

What it is

A page that takes two contract versions and produces a semantic diff from their bytecode. It renders a Changes list and a Profile summary panel, with a Try Me button that loads a sample.

Why it exists

Before a proxy upgrade, the auditor needs a quick answer to “what actually changed between these two bytecodes?” that is faster than a full decompile or re-analysis. Upgrade Diff is that fast screen — it highlights the semantic differences and flags categories of change that are worth reviewing.

Who uses it

  • Auditor — screens a proposed upgrade before the full simulator run.
  • Researcher — diffs two versions of a contract to understand what changed.

How to open it

  1. Sidebar → Simulation → Upgrade Diff.
  2. Direct URL — /upgrade-diff.

Using the page

  1. Source — pick a contract from the workspace; its stored bytecode loads automatically.
  2. Target (hex) — paste the new runtime bytecode into the textarea.
  3. Run semantic diff — computes and renders the diff.
  4. Try Me — loads a synthetic sample so the page can be explored without real inputs.
  5. Changes — list of detected semantic differences.
  6. Profile summary — before/after counts for auth slots, event topics, DELEGATECALL, tx.origin, and REVERTs.

Inputs and outputs

Input Source Required
Source Workspace picker yes
Target (hex) Bytecode textarea yes
Output Format Destination
Changes list In-page HTML
Profile summary In-page HTML

Controls reference

  • Run semantic diff — launches the diff.
  • Try Me — loads the sample inputs.

Limits

  • Requires a signed-in account.
  • Bytecode-level diff only; storage-layout and selector checks live in Upgrade Simulator.
  • The page describes what this catches (and what it doesn’t) inline — review that section before interpreting results.

Troubleshooting

Symptom or error Cause Action
Changes list is empty Bytecodes are identical or unsupported Double-check inputs; use Try Me to confirm the page works.
Profile summary shows all zeros Diff produced no categorised changes None — a clean result is valid.