v0.9.5
Added
-
ripfuzz test <harness>finds broken invariants. It compiles a harness
through solc, deploys it on a sandbox chain, fuzzes handler sequences, checks
invariant_*functions after every call on a throwaway clone, shrinks each
reproduction, and writes traces and anlcov.infocoverage report under
.ripfuzz/. Broken invariants arervm.bail(Invariant)reports,
deduplicated by id, and argument generation is seeded from harness literals. -
ripfuzz max <harness>maximizes harnessvalue(). Coverage-guided search
uses per-call value deltas, shrinks the best sequence, persists a JSON
corpus, and writes the same traces and coverage report asripfuzz test.
Optionalsetupandsummaryfunctions run around the campaign. -
ripfuzz exec <script>compiles a Solidity script, deploys it, runsexec()
once, prints logs, and saves the execution trace. -
ripfuzz initwrites a starterripfuzz.tomland refuses to overwrite an
existing file.
Changed
-
Harnesses compile through solc from
ripfuzz.toml, not Foundry
forge build. Solc settings live under[solc], withversionrequired.
The legacy flatsolc = "0.8.36"form is rejected. Compilation resolves
remappings from the config and{root}/remappings.txt. -
Replaced
rvm.findingand theassert(false)panic workflow with
rvm.bail(Invariant).
Removed
-
ripfuzz runand the Foundry-based campaign stack. Useripfuzz testto
find broken invariants andripfuzz maxto maximizevalue(). -
The
rvm.getCodecheatcode.
Fixed
-
Tester campaigns keep the shortest reproducing sequence for each broken
invariant id, so a later one-call hit replaces a longer first hit. -
Signed-integer argument generation now uses extracted negative literals, so
gates below 256 bits are reachable. -
ripfuzz maxgenerates arguments for handlers that take struct parameters,
including arrays and nested structs. -
ripfuzzloads{cwd}/.envat startup for every command, sovm.getEnv
works intest,max, andexec.