You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
rvm.fork resolves Flare-family network hardforks (Durango → Shanghai, Etna
→ Cancun, pre-Durango → London) from go-flare's upgrade schedule instead of
defaulting to the newest spec
--max-failures N to collect up to N distinct failed assertions (invariant
mode only) before stopping the campaign, with each one shrunk and reported
separately
max_* harness functions: read-only, no-argument uint256 getters where
reverted or empty results score 0 and any value above 0 is the finding
Trace decoding falls back to common standard events (ERC20 Transfer/Approval, ERC721 ApprovalForAll, WETH9 Deposit/Withdrawal,
Ownable OwnershipTransferred) when no project artifact declares them,
rendering names and arguments instead of raw emit Log(0x...) lines
Changed
The fuzzing lifecycle is one fuzz tracing span carrying the harness
contract and thread count, with consistent started, progress, and finished events; the campaign log file records the fuzz-phase duration when
the span closes
Per-function statistics log kind function as the message (e.g. handler deposit calls=60.2K gas=11.14 G reverts=0) instead of a generic Function statistics message with a function field
Maxxing campaigns that find no improvement log a warn naming the objective
(e.g. objective=max_profit No sequence improved the max value (best stayed at 0))
instead of an error
Removed the redundant Called setup log line and the Ripfuzz out. see ya
farewell line
Fuzzing progress lines now log structured key=value fields (matching the
final campaign summary) instead of ·-separated prose
Terminal log lines print a simple local HH:MM:SS timestamp without the
module target; the campaign log file keeps the full RFC 3339 timestamp with
target
Trace output hangs children, call context, logs, storage, and result lines
directly under each frame's name (aligned regardless of gas amount),
replacing the --- Call #N --- header with a [N] counter on the root frame
line
--fail-on-revert is replaced by --stop-on-revert: any reverted
transaction stops the campaign (invariant and maxxing mode), writes the full
trace to fulltrace.log, dumps a compact trace (call context and storage
changes omitted) to the log and stderr, names both file paths in the error,
and exits with a failure instead of shrinking
A failed setup() after a successful deployment stops the campaign like --stop-on-revert: full trace to fulltrace.log, compact trace to log and
stderr, both paths named in the error
A failed harness deployment stops the campaign like --stop-on-revert: full
trace to fulltrace.log, compact trace to log and stderr, both paths named
in the error
Failed-assertion and max-value findings now dump their traces like --stop-on-revert without failing the campaign: full trace to fulltrace.log (per-finding fulltrace-N.log or fulltrace-max-N.log),
compact trace to log and stderr, both paths named
Maxxing campaigns no longer track failed assertions or enter the shrinker on
a revert
Upgraded solc dependency to v0.1.1
Fuzzer and shrinker progress logs one compact line every 3 seconds, with the
full statistics printed after the phase finishes
Terminal status output now goes through tracing; --disable-log disables
all log output (terminal and campaign log file)
Campaign mode is selected automatically: a harness with a max_* function
runs in max mode, which supports exactly one max function and rejects invariant_* functions
Renamed the maxxing campaign type from MaxCampaign to MaxxingCampaign.
Fuzzer types now live under fuzzers.
Shrinker types now live under shrinkers: Shrinker is renamed to InvariantShrinker and MaxShrinker to MaxxingShrinker; the max module
was removed.
Campaign dispatch moved into commands::run::run; CampaignKind::Max is
renamed to CampaignKind::Maxxing.
Fixed
Fork RPC batches that mix cached and missing keys no longer kill the fetcher
thread with fetcher did not receive all keys, which stalled campaigns after
new storage slots appeared
Campaign worker failures are no longer swallowed: any failed or panicked
fuzzer/shrinker thread exits the campaign after all workers settle, with the
full cause chain (e.g. revm transaction failed: database error: RPC rate limited: …) instead of
only the outer message
Skipped build artifacts now warn with the artifact file path and full error
chain instead of a bare cause message printed twice
Build artifacts are loaded once per campaign, so trace contexts reuse them
instead of re-reading the build output directory (which duplicated artifact
parse errors in the log)
--stop-on-revert traces stop at the first reverted transaction: only the
calls up to and including it are re-run and dumped
Mid-transaction rvm.fork switches no longer drop or leak remote state
written earlier in the same transaction (e.g. rvm.store/rvm.deal on fork
A then rvm.fork to B): journaled remote mutations commit to the active fork
overlay before the switch, and local harness accounts stay shared across
forks
Fork transport JSON-RPC payloads are logged at debug instead of info, so
default runs no longer flood the terminal with full payload lines