Crucible is a coverage-guided fuzzing framework for Solana programs, built by Asymmetric Research.
Crucible is an invariant fuzzing framework that uses type-aware mutators over transaction sequences. Edge coverage from the real sBPF runtime and unique state coverage guide the exploration. You write a one-line safety invariant; Crucible finds the composition that breaks it.
A LiteSVM wrapper with account builders, cheat codes, time and epoch warps, and typed transaction results. Cuts harness boilerplate 50-70%.
Register-level tracing turns every branch in the real compiled program into a feedback signal. Source-level LCOV reports included, viewable with genhtml.
Two modes: stateless (~10k exec/s, cold restart per iteration) and stateful (up to ~100k exec/s, snapshot-based state pool with state coverage feedback). Both scale near-linearly across cores.
Clone live accounts from any RPC endpoint into the harness. Fuzz against realistic state without writing account generators.
Crucible tests are written as three pieces. Setup runs once and is snapshotted. Actions mutate state. Invariants are checked after every action, and the first violation stops the run.
fn setup() -> Selfaction_* methods#[range(..)] for constrained params#[invariant_test]fuzz_assert!(...) for assertionsFor hands-on support and custom harnesses, get in touch with the AR team: