Skip to content

v0.9.4

Choose a tag to compare

@pyk pyk released this 23 Aug 09:05
· 159 commits to main since this release
v0.9.4
4bfcade

Added

  • Trace decoding extracts function argument types from runtime bytecode with
    evmole when no project ABI matches the selector, so unverified and forked
    calls render decoded arguments instead of 0xselector(...)

Changed

  • Max-mode campaigns now log under a maxxing{threads=N} span instead of
    fuzz, and their progress/finished summaries include the current best max
    value
  • The shrink progress line now logs structured fields (runs, calls,
    elapsed, call_rate, gas_rate, initial_calls, current_calls),
    matching the fuzz progress summary
  • Max-mode campaigns no longer print the full call sequence in the log; it
    stays available in the trace file
  • Harnesses may declare an optional summary() function (no arguments, not
    view/pure) that ripfuzz calls once after shrinking in the traced re-run, so
    it can log a final summary that shows up at the end of the trace
  • The Found N distinct failed assertion(s) finding now logs at info instead
    of error, since the campaign still completes successfully
  • Shrunk invariant failures are now persisted to the corpus, so the next
    campaign discovers the shortest failing sequence during replay instead of
    re-fuzzing it
  • Campaign logs now use shrink{threads=N} and trace spans after fuzzing, so
    the whole lifecycle reads builddeployreplayfuzzshrink
    trace; shrink progress messages also log assertion, initial_calls, and
    final_calls as structured fields instead of concatenated text
  • The trace span now prints only the decoded log entries (when present) below
    the trace: line and the trace file path, instead of the compact trace and a
    fulltrace: line; the campaign log path moves to its own log span
  • Coverage report generation now logs under a report span, the percentage
    line is no longer indented, and the lcov path is full like the trace and log
    paths
  • Session setup logs are now grouped under build, deploy{contract=...}, and
    replay{items=N} spans, matching the fuzz{threads=N} span
  • The Loaded harness contract and Deployed messages no longer repeat the
    contract name, since the deploy span already carries it
  • The corpus replay and fuzz progress/finished summaries now collapse the
    edge/depth/revert/jump counters into a single compact coverage field (e.g.
    8,407e 1,409d 17r 782j) alongside the contract count
  • Artifact parse warnings now render as failed to parse artifact <path> under
    the build:load_artifacts span, without the repeated project path

Fixed

  • Remove the redundant contract field from the fuzz log span in invariant
    and max-mode campaigns, so the line reads fuzz{threads=N} instead of
    fuzz{contract=Name threads=N}
  • Invariant campaigns now report failed assertions discovered while replaying
    the corpus, instead of seeding coverage and ignoring those panics