CaliperForge

Blog · 2026-06-03 · Michael Moffett

First real protocol harnessed — cf-invariants-jito on Crucible.

Crucible ships the execution rails for invariant fuzzing on Solana / Anchor. The invariants and the program-under-test still come from someone's head. cf-invariants-jito picks a real upstream Apache-2.0 program (Jito Foundation's tip-distribution) and runs four invariant classes against it. Clean reference plus four planted-bug twins. CI asserts clean=0, planted≥1 on every push.

The gap

Toy vaults prove the rails. A real upstream program is the next test.

The previous CaliperForge build, cf-invariants-anchor, stood up a generic invariant-authoring scaffold on top of Crucible (Asymmetric Research's LibAFL + LiteSVM coverage-guided fuzzer for Anchor) and proved it green against a hand-authored vault_ref / vault_ref_planted pair. That established the seam. It did not establish that the seam holds against an upstream program written by someone else, with real account layouts, real CPI patterns, and a real on-chain footprint.

cf-invariants-jito is the answer to that. The target is the Jito Foundation tip-distribution program — the on-chain piece of the Jito MEV-redistribution stack on Solana. After a Jito-Solana validator earns MEV tips in an epoch, the program holds those tips in a TipDistributionAccount and, once a Merkle root over per-claimant amounts is uploaded, lets each claimant call claim with a Merkle proof to receive their share. Apache-2.0, real economic surface, real claim sequencing. A natural target for invariant fuzzing.

Port distance

anchor-lang 0.31.1 to 1.0.1 is not a free move.

The upstream Jito tip-distribution program pins anchor-lang 0.31.1. Crucible v0.2.0's workspace pins anchor-lang 1.0.1. Those are not the same macro expansion. To run the program under Crucible at all, the program has to be ported across the 0.31 → 1.0 boundary, and that boundary touches account validation, error types, CpiContext shape, and the IDL surface that Crucible's calldata generator reads. The NOTICE file in the repo preserves Jito's upstream Apache-2.0 attribution and itemizes the modifications.

The port lives at programs/tip-distribution in the repo. The production Jito program is not modified by this harness — the port exists only so Crucible can drive it. The on-chain footprint of Jito tip-distribution stays whatever Jito Foundation deploys.

What it tests

Four invariant classes. Four planted-bug twins. One clean reference.

The harness runs four invariant classes. Each runs as a Crucible fuzz fixture against (a) the clean reference (jito_tipdist_ref) and (b) a single-site planted-bug twin. The planted-bug twins are one-site-deep regressions authored to verify that the corresponding invariant class fires; they are not claims about the production Jito program. The classes:

The fuzz-fixture source for each invariant lives once under references/jito_tipdist_ref/fuzz/<inv>/src/main.rs. CI copies the same source into each planted variant before the run, so the only difference between a clean run and its planted-bug run is the .so binary loaded into LiteSVM. Same harness, same fuzz seed surface, different program under test.

What's verifiable today

Commit e683c5a. CI green. Four classes, eight runs, the right outcome on each.

The CI workflow runs a matrix of (class × variant) on every push: builds the workspace under cargo check --workspace --locked, builds the cf-invariants-jito port and all five reference variants via cargo build-sbf --tools-version v1.52, builds Crucible v0.2.0 from source (cargo install --path crates/crucible-fuzz-cli --locked), then runs each invariant under crucible run with a 30-second timeout against the clean reference and the class-matching planted twin. CI asserts:

That assertion held on commit e683c5a, the publication commit. The CI badge on the repo README is the source of truth from here on — if it is red, the harness is broken.

Pinned toolchain (the version authority is the README's "Pinned toolchain" section, not a downstream pin file): Rust stable, anchor-lang 1.0.1 (matches Crucible v0.2.0's workspace), Crucible v0.2.0 built from source, Anza / Solana CLI v2.1.21 for cargo-build-sbf, Solana platform-tools v1.52 (Crucible v0.2.0 deps require edition2024, which earlier platform-tools' rustc cannot build). The fuzz Cargo.tomls reference Crucible via path dep at ../../../../../crucible/...; CI clones Crucible v0.2.0 to that sibling path before the harness step, and local reproduction does the same. The sequence is documented in the "Reproduce from a fresh clone" section of the repo README.

Why this artifact

Specialization velocity, expressed as an existence proof.

CaliperForge's edge is not new fuzzing engines. The engines doing the work — snforge on Cairo, Crucible on Solana / Anchor — are run by other teams and we do not compete with them on coverage. What we are testing is throughput: how quickly the same operator can stand up an invariant-authoring layer against a new VM, against a new real protocol, and get it CI-verified.

The existence proof, as of 2026-06-03, is three points: cf-invariants (Cairo / Starknet / snforge), cf-invariants-anchor (Solana / Anchor scaffold on Crucible, generic vault target), and cf-invariants-jito (Solana / Anchor, a real upstream Jito MEV program). One operator, three CI-green artifacts, two distinct VMs, all within days of each other. The dates are checkable on GitHub, the commits are public, and the CI badges show today's state, not a screenshot from launch.

That is the claim. It is not that this harness covers everything Crucible covers, or that fuzzing Jito has surfaced anything in the production program. The claim is that the authoring layer ports across VMs at the speed shown, and the CI green light is the only evidence that matters.

What this is not

Not a fork. Not an audit. Not proofs.

Three framings the repo README is explicit about, mirrored here so this post does not drift:

The repo is at github.com/caliperforge/cf-invariants-jito. Issues and PRs are open. Operator of record on every commit: Michael Moffett.

— Michael Moffett. Built with AI assistance; the harness scaffold and the four invariant fixtures were drafted with an AI coding assistant under operator review, with full repo attribution. AI policy at caliperforge.com/ai-disclosure.