Skip to content

Rundler v0.4.0

Latest
Compare
Choose a tag to compare
@github-actions github-actions released this 06 Nov 01:51
· 2 commits to main since this release
a92183b

v0.4

Summary

Major features:

Alloy migration

The largest feature of this release is our replacement of ethers-rs with alloy. This aligns us with the most popular type system in the Rust-Ethereum ecosystem, as well as removes our dependence on the deprecated ethers-rs library.

This was a large scale refactor, touching almost every file in Rundler. Major logical changes are concentrated to our smart contract compilation code as well as our provider interfaces.

PreVerificationGas DOS fix

Prior versions were susceptible to a DOS attack on networks with data availability (DA) gas costs charged via PreVerificationGas (PVG). An attacker (or an incorrectly configured user, same diff) could flood the mempool with user operations that pay high amounts of fees, but are ineligible to be mined due to low PVG. Since Rundler is configured to accept UOs with lower than required PVG (due to fee swings), these UOs are allowed in the mempool. However, since the builder sorts by gas fees, these ineligible UOs can block out correctly priced UOs.

Previously, it required a network call to a DA gas cost oracle per UO to determine if that UO had sufficient PVG. This release contains a new interface to calculate DA gas cost in a (mostly) synchronous way, requiring only 1 network call per UO for its lifetime within the mempool and 1 network call per block.

With this efficiency gain, the mempool can now check each UO for sufficient PVG on every block's fee values. When the builder wants to build a bundle it is only served eligible UOs, mitigating the DOS attack described above.

Minor features:

  • Use Reth task management
  • Switch to metrics-derive
  • Configurable gas limit efficiency requirement to mitigate gas limit DOS attacks
  • Custom tower-based metrics middleware for alloy, jsonrpsee, tonic
  • Configurable base fee overhead requirement
  • Update rust to v1.82

BREAKING CHANGES:

  • Type changes to chain spec variables. Most integer values now must be configured as integer strings instead of hex strings. Check the diff to see which variables this applies to.

All Changes

  • chore(ci): remove windows build (#902)
  • chore(deps): bump quinn-proto from 0.11.6 to 0.11.8 (#881)
  • chore(ci): update download-artifact to v4 (#900)
  • fix(builder): fix flashbots auth signature (#899)
  • fix: amend openbnb testnet config (#898)
  • feat(libc): upgrade to libc5 in cross builder (#896)
  • feat(ratelimit): adding github token to get past rate limits (#895)
  • fix: fix middleware service clone. (#894)
  • fix(builder): remember last cancel txn fees on underpriced (#893)
  • fix(builder): don't wait for next block after bundle mine in auto (#892)
  • fix: change provider error log to warning (#891)
  • fix(da): fix gas price for da gas estimation to be UO gas price (#890)
  • fix(signer): fix signer key balance metric (#885)
  • fix(pool): fix candidate gas price (#884)
  • chore: release v0.4.0 (#882)
  • fix(provider): fail-open if fjord check fails with rpc error (#880)
  • chore(pool): add tests for da/gas limit in pool (#877)
  • feat(base): change base prio fee usage ratio to 20%
  • feat(gas): configure base fee overhead percent
  • fix(pool): fix add UO eligibility check
  • fix(providers): fix alloy retry layer CUPS
  • chore: update to rust 1.82
  • chore: rename da oracle to DAGasOracleType
  • refactor: use type erasure on types with lots of generics
  • refactor: refactor da gas provider/oracle interfaces
  • feat(pool): emit log when UO removed due to pool size
  • feat(pool): reject UOs below configurable gas limit efficiency
  • fix(pool): only ineligible if da tracking, always emit events
  • feat(pool): add da tracking to pool
  • refactor: remove redundant code.
  • feat(better-error): change provider error cast to carry more context.
  • feat: enable permissions for pr from forks.
  • style: check pr title with commitlint.
  • fix: submitter should be used regardless use_submit_for_status's value
  • fix(builder): fix raw txn sender submitter provider order
  • fix(types): fix v0.7 valid_until parsing to replace 0 with MAX
  • feat(provider): add error log to alloy provider RPC calls
  • feat(provider): modify da gas provider interface for better caching/sync
  • feat(provider): add cached DA oracles for bedrock/nitro
  • feat: better output error with inner root cause. (#844)
  • style: sort cargo.toml. (#843)
  • feat(rpc): log rpc error message. (#841)
  • feat: switch to metrics_derive (#832)
  • feat: prep for da oracle with cache
  • feat: move limits to providers, add da to limit
  • feat(middleware): add response extractor. (#816)
  • feat(types): improve handling of bundle size in pvg gas limits
  • refactor: modify uo gas limit calcs & v0.6 builder
  • fix(builder): don't forget underpriced info when no ops
  • test(evm): add getCodeHash unit test. (#826)
  • fix(provider): use latest for fee history in pending base fee
  • chore: update rust to 1.81
  • feat: replace existing tasks with reth tasks
  • feat: update alloy to v0.4, fix types
  • fix(build): fix contracts build
  • feat(bin): update binary to alloy, pass spec tests w/ fixes
  • feat(builder): update builder crate to alloy types
  • feat(rpc): modify rpc to use alloy types
  • fix(middleware): change mod visibility to pass build. (#815)
  • feat(pool): update pool to use alloy types
  • feat(middleware): create a generic middleware to collect method metrics. (#804)
  • feat(sim): update sim crate to use alloy types
  • feat(task): update task crate to alloy
  • feat(provider): modify provider traits for new types, impl alloy provider
  • feat(types): use alloy/native types in types crate
  • feat(contracts): add contracts crate, remove from types
  • feat(utils): update utils to use new types
  • feat: inject providers from bin
  • feat(rpc): update jsonrpsee version, rework metrics middleware
  • chore: update rust version and various deps
  • chore: remove dev crate and tools binaries

Binaries

The binaries are signed with the PGP key: 85C5 DEF0 37D3 FDE4 FC17 94B1 475B 35EA 9352 EB2

System Architecture Binary PGP Signature
x86_64 rundler-v0.4.0-x86_64-unknown-linux-gnu.tar.gz PGP Signature
aarch64 rundler-v0.4.0-aarch64-unknown-linux-gnu.tar.gz PGP Signature
x86_64 rundler-v0.4.0-x86_64-apple-darwin.tar.gz PGP Signature
aarch64 rundler-v0.4.0-aarch64-apple-darwin.tar.gz PGP Signature
System Option - Resource
Docker v0.4.0