The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Note: this file did not exist until after
v0.5.6.
0.10.0 - 2026-04-20
- (rpc): accept eth denominations (e.g. "1 eth") for min_balance (#518)
- report now includes total/successful/failed transaction counts with failure rate (#519)
- core logs: replaced "SIMULATING SETUP COST" banners with tracing spans (#520)
- errors are now also saved to the DB when not collecting receipts (#511)
- improve campaign/spam logs (particularly when
--reportis passed) (#508) - refactored
Contenderorchestrator to a typestate-based lifecycle —Contender<Uninitialized>vsContender<Initialized>— eliminating all runtime lifecycle checks and enforcing correct usage at compile time (#507) - custom spam callbacks can now wrap a
LogCallbackviaLogCallback::with_callbackto inherit the tx-caching and FCU behavior thatcontender reportdepends on, removing the boilerplate that previously caused custom callbacks to silently break reporting (#326) - added contender server + some supporting (and internally-breaking) changes (#494)
0.9.1 - 2026-04-01
- support spamming with
eth_sendRawTransactionSyncwith new flag--send-raw-tx-sync(#459) - auto-fund spammer accounts periodically when running with
--foreverto prevent ETH depletion (#502) - add
--time-to-inclusion-bucketflag to configure histogram bucket size in reports (#498) - move default data dir to
$XDG_STATE_HOME/contender(~/.local/state/contender), with automatic migration from legacy~/.contender(#460) - organize
--helpoutput into logical sections forspamandcampaignflags (#408) - bugfix: only retry recoverable errors in
init_scenario(within spam), allow CTRL-C to terminate it (#503) - harden against RPC failures (#496)
- add live spam progress report logs, enabled with
--report-interval(#493)
0.9.0 - 2026-03-17
- added
--send-raw-tx-syncflag tospamandcampaignforeth_sendRawTransactionSyncsupport (#459) - limit concurrent funding tasks to 25 (#451)
- added contender version to bottom of reports (#452)
- enable custom data dir at runtime (453)
- clean up html report UI, support batched
eth_sendRawTransactionlatency metrics (#455) - added
--scenario-labelflag to deploy and spam the same scenario under different labels (#456) - fix: generate report when
--gen-reportis passed tospam(#457) - control
SETUP_CONCURRENCY_LIMITwith env var (#461) - add gas quantiles to report (#464)
- add support for flashblocks time-to-inclusion collection &
--flashblocks-ws-url(#465) - added
contender rpcsubcommand for spam-testing arbitrary JSON-RPC methods with latency tracking and HTML report generation (#468)
0.8.1 - 2026-02-09
- bugfix: fixed internal default erc20 args, made
TimedSpammeroutput more regular (#443) - bugfix: limit concurrent setup tasks to prevent FD exhaustion (#447)
0.8.0 - 2026-02-02
- track nonces internally for create & setup transactions (#438)
- bugfix: tolerate failure of
get_block_receipts(#438)
- removed
--redeploy, no longer skips contract deployments if previously deployed (#438) - breaking changes in
contender_core(see core changelog for details)
0.7.4 - 2026-01-27
- revised campaign spammer (#427)
0.7.3 - 2026-01-20
- transactions that revert onchain now store error as "execution reverted" DB, rather than NULL (#418)
- added
--infiniteflag to campaigns; loops campaigns indefinitely (#420) - added
--accounts-per-agentflag to setup, fix campaign seeds (#425) - improved
--min-balancewarning log formatting (#421) - lock-free TxActor & non-blocking tx-sending (#423)
0.7.2 - 2026-01-14
- bugfix: deploy contracts before attempting to estimate spam cost (#416)
0.7.1 - 2026-01-09
--timeoutflag fromcontender spamis deprecated, will be removed in a future release- added
contender admin contract-addresscommand (#412) - fixed funding-tx collision bug triggered by campaigns (#413)
0.7.0 - 2026-01-05
- setup txs are now sent asynchronously (#390)
- added campaigns: meta-scenario config files (#389)
- scenario files now support units in
valuefield (#388) - tx cache is now processed async & independent of spammer (#396)
- spam gas price can now be locked manually with
--gas-price(#400) - CLI logs are now less verbose (#406)
Potentially breaking:
--loops [num]has been replaced with--forever(bool)
0.6.0 - 2025-11-25
Features:
- more env var support (#376)
--skip-setup flag, minor UX improvements (#377)- scenarios: add groth16Verify scenario to test onchain proof verification (#379)
- spammer: support batching json-rpc eth_sendRawTransaction reqs (#381)
- minor UX improvements (#382)
- campaign meta-scenarios: new
contender campaigncommand and campaign TOML schema for staged parallel mixes
Internal changes:
- revamp error handling (#378)
- DB schema bumped to
user_version = 6to record campaign/stage metadata in runs.- If you see a DB version mismatch, export/reset your DB:
contender db export(optional backup) thencontender db reset(ordrop) to recreate with the new schema.
- If you see a DB version mismatch, export/reset your DB: