Skip to content

Releases

v0.1.0

Choose a tag to compare

@latent-9 latent-9 released this 03 Nov 00:21

First release of ChainOfFuzz, a mutation fuzzer for consensus adjacent parsers.

What ships

  • Four targets sharing one engine, mutator and oracle: sbpf-elf, block-component, votor-wire, shred-ingress
  • Receipts: 130,000,000 iterations across the four targets, 957,062 accepted, 0 panics
  • Seed invariant tests: every target must reject its own seeds cleanly and accept at least one of them
  • CI with dependency cache, libclang for the rocksdb bindgen step, and a 20k-iteration smoke campaign per target
  • MIT license

Fixes landed before this tag

  • shred-ingress seeds now carry valid ShredVariant bytes (MerkleData/MerkleCode, proof size 6) at exact wire sizes. The previous seeds used the ShredType tag bytes, which ShredVariant::try_from rejects outright, so the target measured a rejection gate instead of the parser. Accepted inputs went from 12 to 187,595 over 10M iterations.
  • votor-wire seeds are generated from a fixed keypair, making the corpus byte-identical across runs.
  • block-component footers now include reward certificate payloads.
  • The sbpf-elf program loader is built once instead of per iteration.

Receipts

target crate iterations accepted rejected panics
sbpf-elf solana-sbpf 0.25.0 100,000,000 65,110 99,934,890 0
block-component solana-entry 4.5.0-alpha.2 10,000,000 447,763 9,552,237 0
votor-wire agave-votor-messages 4.5.0-alpha.2 10,000,000 256,594 9,743,406 0
shred-ingress solana-ledger 4.5.0-alpha.2 10,000,000 187,595 9,812,405 0

Rerun: cargo run --release -- <target> <iterations>, default seed 12648430.