Skip to content

contender v0.10.2

Latest

Choose a tag to compare

@github-actions github-actions released this 11 Jun 21:01
b528a46

Summary

Contender v0.10.2 adds more control over generated transactions, introduces a new stream-oriented spam mode, and improves scenario support for access lists and EIP-1559 priority-fee testing.

Highlights

  • Added spam-stream, a new CLI subcommand for streaming newline-delimited JSON FunctionCallDefinitions from stdin or a file.

    • Each input spec is sent exactly once through the existing scenario pipeline.
    • Reuses Contender’s agent pools, rate limiting, nonce management, funding, receipt tracking, and DB run persistence.
    • Emits structured, versioned JSON events on stdout, including per-tx results, backpressure events, and a terminal summary.
    • Supports deterministic pool derivation via the persisted seed file, so --skip-funding works across repeated runs.
  • Added scenario-level access list support.

    • Scenario FunctionCallDefinitions can now include an access_list.
    • Access-list addresses and storage keys support {placeholder} resolution, including scenario [env] placeholders.
    • This makes it easier to generate EIP-2930-style transactions and test access-list-sensitive execution paths.
  • Added support for per-transaction EIP-1559 priority fee configuration.

    • FunctionCallDefinition::max_priority_fee_per_gas can now be set statically or via placeholders.
    • FuzzParam::max_priority_fee_per_gas allows priority fees to be fuzzed per transaction.
    • max_fee_per_gas is automatically lifted when needed to preserve the EIP-1559 invariant.
    • Priority-fee and fuzz min/max values now accept raw wei, hex, and unit strings such as "10 gwei" or "0.001 eth".

Fixes and polish

  • Fixed gas estimation for transactions with static or fuzzed priority fees by lifting the estimation copy’s fee cap before calling estimate_gas.

  • Improved malformed priority-fee handling: invalid static max_priority_fee_per_gas values now fail at template time instead of silently resolving to None.

  • Fixed several spam-stream edge cases:

    • nonce sync is enabled before sending;
    • failed sends reclaim the local nonce to avoid nonce gaps;
    • blob and setCode specs are rejected up front;
    • gas price is cached instead of fetched for every streamed tx;
    • --min-balance now accepts unit strings.
  • Fixed the check-version CI script.

  • Updated dependencies:

    • console-subscriber to 0.5.0
    • strum to 0.28.0
    • tower-http to 0.6.10
    • rand to 0.10.1

Contributors

Thanks to @op-will and @jelias2 for the commits in this release range.

All Changes

  • chore(deps): bump tower-http from 0.6.8 to 0.6.10 (#566)
  • chore(deps): bump strum from 0.27.2 to 0.28.0 (#567)
  • chore(deps): bump console-subscriber from 0.4.1 to 0.5.0 (#570)
  • feat(generator): support static and fuzzed max_priority_fee_per_gas (#580)
  • chore: fix invalid links in changelogs (#582)
  • chore(deps): bump rand from 0.9.4 to 0.10.1 (#584)
  • feat(scenarios): add access_list support with placeholder resolution (#588)
  • feat(cli): add spam-stream subcommand for streaming tx specs (#589)
  • chore: update changelogs and bump versions for v0.10.2 (#591)
  • fix(ci): fix check-version script (#592)

Binaries

The binaries are signed with the PGP key: F62E A741 E6B4 E0BA 58D3 8619 698A C82F 9A2F E605

Contender CLI

System Architecture Binary PGP Signature
x86_64 contender-v0.10.2-x86_64-unknown-linux-gnu.tar.gz PGP Signature
aarch64 contender-v0.10.2-aarch64-unknown-linux-gnu.tar.gz PGP Signature
x86_64 contender-v0.10.2-x86_64-apple-darwin.tar.gz PGP Signature
aarch64 contender-v0.10.2-aarch64-apple-darwin.tar.gz PGP Signature