Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

92 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SlotScope lens

SlotScope

EVM-1 · storage & bytecode probe
A precision instrument for Solidity: compile, deploy, and step through a contract entirely in your browser, and see the exact truth of it — source related to bytecode in both directions, every storage slot byte-accurate, and every runtime access named honestly or not named at all.

▶ Live instrument

SlotScope — the cockpit-bar workbench

What it does

The full measure loop — compile, deploy, call, step the trace, read every named storage access — works on one screen: source, assembly, and the storage probe stay visible while the cockpit bar and execute strip drive execution beneath them.

  • Compile locally, exactly. One bundled solc (0.8.36+commit.8a079791.Emscripten.clang, cancun) runs in a web worker. Optimizer (with runs) and via-IR are live toggles; the header echoes the environment the latched result actually compiled with, never the request. No backend, no network requests, works offline after load. A version mismatch is a fatal error, never a fallback.
  • Source ↔ assembly, honestly. Hover, keyboard-focus, or pin either side to see the exact compiler source range on the other — the complete set of instructions sharing a range, never a fake one-to-one mapping. Rows without a user source range say so.
  • Storage as a memory map. One row per slot, 32 byte cells under a 31 → 0 ruler (byte 0 is the LSB, rightmost), a per-slot record listing every field's name, byte range, and type, cross-inheritance packing with declaring-contract attribution from AST ids, packed structs, static arrays, hatched padding, and an honest explanation for anything the compiler output can't confidently expand (a mapping's entries live at keccak-derived runtime slots — deploy and call to see them named).
  • Initialized values, visible on deploy. The constructor is an execution like any other: deploying captures its trace exactly like a call, so every initializer's actual byte value shows up in Runtime storage the moment "Deploy locally" succeeds — labeled from the constructor, never parsed from source.
  • Run it locally, one screen. Deploy into an in-browser EVM (EthereumJS, Cancun) and call it through ABI forms. The live storage strip stays pinned above the trace detail tabs at every cursor position — one band per touched slot, bytes written up to the cursor filled amber and byte-diffed to the proven changed range. A full-width cockpit bar (steppers, scrubber, cursor facts, outcome) keeps stepping in view without losing the source or storage picture.
  • Storage accesses get honest names. allowance[0xaa…][0xbb…], mp[9].b, arr[2] — resolved only when every hop is grounded in recorded keccak bytes and layout facts, with an auditable derivation chain (KeccakFlow), byte-level write diffs, string-form migration badges, and cold/warm Cancun cost facts. Resolution status is a border treatment and a mark (=//?), never a color alone. Anything ungrounded says unresolved, never a guess.
  • Revert forensics and events. A failed call decodes Error(string), Panic(code) with its meaning, or a declared custom error by name — never a guess for an unknown selector — with the reverting step and a jump-to-it. Emitted logs decode against the ABI when the shape matches exactly, honest raw topics/data otherwise.
  • A curriculum, not just an inspector. Six Layout/Derivation challenges whose expected answers are derived at runtime from the same compiler and executor output the panes show — never an authored constant that could drift — including one deliberately Unresolved case to resolve by hand.
  • Share as a URL or a file. The whole state — source, compiler settings, the deterministic call sequence, trace cursor, one pin — travels in the #s= fragment (schema v2, bounded and tamper-rejecting) with live size feedback against the 2,000-character budget; larger sessions round-trip through .slotscope.json. The recipient's link recompiles, redeploys, and replays the recorded calls locally; nothing is hosted.
  • Keyboard-first, motion-optional. Every interaction works without a mouse (a Ctrl/⌘K command palette reaches the rest); every animation collapses to 0 ms under reduced motion with identical final state; axe-clean in both modes.

Quickstart

corepack prepare pnpm@11.17.0 --activate   # Node 24.18.0 (engine-strict)
pnpm install --frozen-lockfile
pnpm --filter @slotscope/web dev            # http://localhost:5173

Full command reference and the rules that block merges: CONTRIBUTING.md.

Why trust what it shows

Compiler output is the only truth: no Solidity reparsing for facts, no heuristics, no inference. Ground truth for the public fixture is reviewed byte-by-byte and independently cross-checked with Foundry's forge inspect; goldens change only through an explicit, diff-printing command. Every release gate — correctness fixtures, worker lifecycle, keyboard/reduced-motion/axe, zero-network, and a hard 2,000 ms p95 compile budget — runs blocking in CI with zero retries. Evidence lives in docs/releases.

Architecture

Static React/Vite workspace, ten exact-pinned packages:

Package Role
packages/domain Locked environment, immutable models, UTF-8↔UTF-16 index, hex primitives
packages/compiler Worker (exact solc), settings-aware Standard JSON, instruction/source-map decoding, normalize()
packages/layout solc storageLayout → exact bigint slot/cell model
packages/executor In-browser EVM worker (EthereumJS), keyframe/delta trace, revert/event decode
packages/semantics Layer-3 resolver: keccak-chain grounding, exact/inferred/unresolved
packages/session Share-URL schema v2 + bounded codec, .slotscope.json
packages/challenges Challenge schema + runtime-derived answer validator, progress store
packages/lifecycle Generic worker-lifecycle client shared by the compiler and executor
packages/ui Instrument design tokens, focus + motion contract
packages/fixtures Public fixture corpus, goldens, Forge cross-check
apps/web Composition: editor, assembly, probe pane, cockpit bar, execute strip, sharing

Details: docs/architecture.md · ADRs: docs/adr · honest cut-line: docs/limitations-v1.0.md · design system: docs/design/instrument-identity-v0.15.md

Roadmap

v0.1 Compile Spine ✔ → v0.15 Instrument Identity ✔ → v0.2 Stepper ✔ → v0.5 Semantics ✔ → v1.0 Launch ✔ → v1.1 Cockpit workbench ✔ (v1.0 KPI test pending — see docs/releases/v1.0.md). History: CHANGELOG.md.

About

EVM-1 · storage & bytecode probe A precision instrument for Solidity: compile one contract entirely in your browser and inspect the exact truth of it — deployed bytecode related to source in both directions, and the storage layout as byte-accurate 32-byte slots.

Resources

Contributing

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages