Second Prover secondprover.com

AI-driven formal verification · a second tool alongside Certora

Machine-checked.
Never proofs of safety.

An AI pipeline that reads a Solana protocol's real source, proposes safety invariants, and discharges them on the open-source Certora Prover running locally on the compiled crate. Every result closes on a recorded command. Every build is re-checked by agents that did not write it — and the record of what's blocked is published next to what passed.

Real SMT prover, not a model Adversarial multi-family gauntlet Findings under coordinated disclosure Priced below the manual audit anchor
1.00
Benchmark verdict-recall
11 / 11 oracle cases match the real prover — including an injected mutation it correctly refutes.
10 / 12
Acceptance gates green
1 honestly blocked (reported, not hidden) · 1 dropped with a stated reason.
5
Independent model families
Four attack the surviving catalog; a fifth adjudicates with an executable judge.
2
Confirmed live findings
Real behavior violating a desired property — under coordinated disclosure to the protocol team.

The number that isn't self-referential

Recall against a known-correct oracle

Auto-rate can be gamed; recall against an oracle cannot. A standing corpus pairs historical findings, an injected checked_div→checked_mul mutation, and regression cases with the answer known in advance. One command runs them all on the real prover.

1.00verdict-recall · 11 of 11 cases decided correctly · 0 undecided
# one command, real Certora Prover
$ source tools/certora_env.sh
$ python3 -m autogen.run_bench_real
→ verdict_recall 11/11 = 1.00

How a run works

Four stages, one fail-closed router

The routine ~90% clears automatically; anything ambiguous — an unsigned assumption, an un-replayed counterexample, a timeout — escalates to a human. The tool never quietly upgrades a "maybe" into a "proved."

STAGE 01

Read the source

Model families read the real Rust and propose candidate safety invariants — solvency, share-accounting conservation, rounding bounds, health monotonicity.

STAGE 02

Adjudicate

An I80F48 simulator, anchored line-by-line to the source, tries to break each claim across millions of adversarial trials. Survivors only.

STAGE 03

Prove

Surviving invariants compile into CVLR rules and run on the open-source Certora Prover, locally, against the actual compiled crate.

STAGE 04

Route 90 / 10

A deterministic, fail-closed router auto-clears the routine and escalates the rest — with a counterexample that must replay on the real program before it counts as a finding.

Acceptance discipline

Twelve gates. Each closes on a command, never an argument.

The honesty is the product: a gate is either green on a recorded command, or it says blocked with the measured reason. Reporting the blocked one is the posture an FV evaluator trusts.

Green — recorded command Blocked — measured reason Dropped — stated reason
G1Pipeline completes0 / 64 rules dropped as uncompilableGreen
G2Harness fidelity94% drive real code · 0 dead assertsGreen
G3Yield with integritymeasured zero — the honest stateGreen
G4Mutation test, standinginjected defect flips the verdict, every runGreen
G5Reproducibilitypinned toolchain + recorded hashesGreen
G6Truthful docsevery overclaim correctedGreen
G7Honest generalizationdomain leak fixed, measuredGreen
G8State-space exploredpositive certification needs an oracle that does not existBlocked
G9Summaries disciplineevery summary paired with a discharge ruleGreen
G10Arithmetic substitutiondropped — would erase the one real theoremDropped
G11Ground-truth benchmarkverdict-recall 1.00 against the real proverGreen
G12Obligation validationskip mode-dead write sites before provingGreen

+ G13 — obligation → rule generator (standing product). A deterministic enumerator reads the guard-parity table and mechanically emits a prover rule per unguarded obligation — it reproduced the flagship finding with no human pointing at it, and then surfaced a genuinely new one on a second property.

Why more than one model

An adversarial gauntlet, judged by execution

Independent families take turns attacking the surviving catalog; the judge rules with the simulator, never by vote. A defect that one family missed, another has found — and the record shows it happening.

Judge · synthesis
Claude Fable
Anthropic
Attacker
Claude Opus
Anthropic
Attacker
DeepSeek
DeepSeek
Attacker
Kimi K3
Moonshot
Attacker
Codex
OpenAI

The last build round survived four successive adversarial verification passes — each one caught a regression the previous fix introduced, and each was closed with a pinned test. The pipeline is built to distrust its own results.

Flow sketch · how an engagement runs

Bring your program. Get a private report.

A concierge submission: the code owner opens a session, the crate is onboarded, the AI family runs the pipeline end-to-end, and the findings come back to the owner alone — never public first.

second-prover — engagement session
$ secondprover session --new
▸ verifying you control this program…
ownership confirmed — signed commit + on-chain upgrade authority
$ secondprover onboard ./program
▸ building the crate under the prover toolchain…
engineer-assisted step today — see note below
compiles with the certora feature · 0 rules dropped
$ secondprover run
▸ model families read source → propose invariants
5 families · 41 candidate invariants
▸ executable adjudication (I80F48 simulator, >5.7M trials)
23 survive · 18 falsified with concrete counterexamples
▸ real Certora Prover on the compiled crate
router 90 / 10 · 2 escalations to human review
▸ adversarial gauntlet — families attack the survivors
1 confirmed residual finding (counterexample replays on-program)
private report ready owner only
· findings + reproducible commands
· signed, human-reviewed assumption ledger
· nothing published — coordinated disclosure first
$

note Onboarding an arbitrary crate to build under the prover is the one step still done by an engineer today — it is the honest bottleneck, and automating it for a supported class of programs (standard Anchor + common dependencies) is exactly what the funded build turns self-serve, with CI re-verification on every pull request.

What we will not claim

The guardrails are part of the offer

✕ never

"Proofs of safety"

Machine-checked properties under a signed, human-reviewed assumption ledger — not a blanket safety certificate the math can't support.

✕ never

A Certora replacement

A complementary second tool for the STRIDE program, priced below the per-engagement manual anchor. The seat for a second FV vendor is open.

✕ never

Public findings first

Every finding goes to the protocol team privately, under embargo, before any foundation or public mention. No exceptions.