Meet! SolDiff.
Built for a secure Solana future.
Decompile BPF bytecode and surface risk-graded diffs in seconds.
Run a real mainnet upgrade diff.
Pick a program below to load a pre-computed report for a genuine on-chain upgrade. Every finding here was produced by the rule engine, not hand-written.
From upgrade signatures to
evidence-backed bytecode diffs.
Built around trustworthy historical reconstruction first. Advanced semantic claims stay out of scope until they can be proven.
Parse upgrade transactions
SolDiff reads two BPF Upgradeable Loader Upgrade transactions, extracts buffer / Program / ProgramData addresses, and validates Version A is older than Version B.
parseUpgradeTransaction(sigA|sigB)Reconstruct historical ELFs
Buffer Write instructions are collected, ordered deterministically, isolated to a deployment cycle, coverage-checked, and assembled into validated ELF64 artifacts with full SHA-256 identity.
Write replay → coverage map → validateElf()Raw byte + SBF instruction diff
`.text` and `.rodata` are compared at the byte-chunk layer. An SBF instruction-level decoder adds sequence-aligned instruction evidence. This is not a semantic decompiler.
raw-byte diff + soldiff-ebpf-isa / optional sbpf|llvm-objdumpOptional Anchor IDL diff
When an IDL can be historically matched, instruction/account/discriminator changes are reported with evidence. Otherwise historical IDL is marked unavailable — never silently unchanged.
normalizeIdl → compareNormalizedIdlsEvidence-backed findings
Heuristic findings attach analyzer, confidence, and evidence. Overstated claims (e.g. treating sampled pubkeys as CPI targets) are avoided.
Finding{ analyzer, code, severity, confidence, evidence }Reproducible case study
CLI/scripts emit manifest.json + report.md with hashes and provenance. Reports are ephemeral in the UI today — persistence/shareable URLs are not shipped yet.
bun run case-study --program … --from … --to …Ten rules that catch
real exploits.
Every rule is derived from a real Solana incident. The engine targets a zero false-negative rate on CRITICAL findings — if it fires, treat the upgrade as dangerous until proven otherwise.
Fits into your existing workflow.
Web UI, CLI, TypeScript SDK, or GitHub Actions. One engine, every entry point.