Skip to content

Releases: alchemyplatform/rundler

Rundler v0.4.0

06 Nov 01:51
a92183b
Compare
Choose a tag to compare

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

Rundler v0.3.0

08 Jul 21:18
Compare
Choose a tag to compare

Summary

  • Main Feature: Bundle builder state machine improvements
    • Rewrite the state machine to support "cancellations." A cancellation occurs when the bundler receives a "replacement underpriced" error from a node, but it believes its submitting a fair gas price and there are current UOs that pay this gas price. Previously, the bundler would get stuck in this state and UOs that pay fair gas wouldn't get mined. It was possible to get into this price if a bundle was submitted with a high priority fee, but wasn't mined, and is blocking the bundler's nonce. The bundler now detects this state and attempts to remedy it with a transaction cancellation.
    • There are two types of cancellations: hard and soft. Some RPCs support soft cancellations which allow the sender to cancel and existing transaction without issuing a replacement (i.e. Flashbots). Hard cancellations require a replacement transaction and cost tokens.
    • Remove maximum fee increases from bundle submission - if a UO is paying enough gas to be included in a bundle it should. Maximum fee increases still applies to hard cancellation transactions.
    • Remove transaction status polling from the tracker, the state machine runs completely off of a defined trigger - either a new block or a timeout.
    • Add time to mine tracking and metrics.
  • Chain support:
    • Add support for Avalanche
    • Ban access to Arbitrum Stylus contracts without whitelist
    • Remove Goerli networks
  • Bug fixes:
    • Fix race condition in paymaster tracking.
    • Fix error message for unstaked entity mempool count.
    • Raise Polygon Amoy chain configuration min fee to 30 gwei.
    • Add a timeout of 10s to the tracer calls.
  • Small Features:
    • Allow for multiple private keys to be configured.
    • Allow staked senders to have multiple UOs per bundle.
    • Check for total gas limit exceeded after estimation.
    • Remove ops from pool if condition is not met when using conditional RPC.
    • Update to Rust v1.79.0
    • Fix transaction sender's support of transaction status across various provider types.

Breaking changes

  • Removed BUILDER_MAX_FEE_INCREASES replaced with BUILDER_MAX_CANCELLATION_FEE_INCREASES
  • Removed BUILDER_SENDER=conditional replaced with BUILDER_SENDER=raw and BUILDER_USE_CONDITIONAL_RPC=true
  • Deprecated BUILDER_PRIVATE_KEY replaced with BUILDER_PRIVATE_KEYS

All Changes

  • feat: add support for avax chains
  • feat(sim): ban access to arbitrum stylus contracts during sim
  • fix(builder): improve replacement underpriced handling
  • fix(cli): error if recursive base config, remove goerli netowrks
  • feat(tx): change transaction size limit (#749)
  • fix: various v0.3-rc fixes
  • chore: update to rust v1.79.0
  • chore(amoy): raise amoy chain config min fee to 30gwei
  • fix(pool): fix crash when block height goes backwards
  • chore: fix docs and set v0.3 version number
  • fix(rpc): fix error message for unstaked entity mempool count
  • fix(builder): fix builder state machine replacement tracking
  • feat(sim): check total gas limit after estimation
  • chore(builder): add unit tests to bundle_sender
  • feat(builder): allow for multiple private keys
  • feat(builder): reject ops if condition not met after failure
  • fix(builder): rework raw sender to support dropped/conditional/split-rpcs correctly
  • refactor(builder): large refactor of bundle sender state machine and metrics
  • feat(builder): cancel transaction when replacement underpriced
  • feat(builder): remove polling from transaction tracker, update state machine
  • feat(pool): allow staked senders to have multiple UOs in best_operations
  • feat(pool): add time to mine tracking and metrics
  • fix(pool): fix race condition in paymaster tracking
  • fix(tracer): set tracer timeout default back to 10s (#733)
  • chore(deps): bump braces from 3.0.2 to 3.0.3 in /crates/sim/tracer
  • feat(tracer): add timeout of 10s to tracer (#730)
  • feat(ci): check if output file exists (#727)

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.3.0-x86_64-unknown-linux-gnu.tar.gz PGP Signature
aarch64 rundler-v0.3.0-aarch64-unknown-linux-gnu.tar.gz PGP Signature
x86_64 rundler-v0.3.0-x86_64-pc-windows-gnu.tar.gz PGP Signature
x86_64 rundler-v0.3.0-x86_64-apple-darwin.tar.gz PGP Signature
aarch64 rundler-v0.3.0-aarch64-apple-darwin.tar.gz PGP Signature
System Option - Resource
Docker v0.3.0

Rundler v0.2.2

11 Jun 14:58
Compare
Choose a tag to compare

Rundler v0.2.2

All Changes

  • chore: release v0.2.2
  • fix(cli): fix ep disable flags

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.2.2-x86_64-unknown-linux-gnu.tar.gz PGP Signature
aarch64 rundler-v0.2.2-aarch64-unknown-linux-gnu.tar.gz PGP Signature
x86_64 rundler-v0.2.2-x86_64-pc-windows-gnu.tar.gz PGP Signature
x86_64 rundler-v0.2.2-x86_64-apple-darwin.tar.gz PGP Signature
aarch64 rundler-v0.2.2-aarch64-apple-darwin.tar.gz PGP Signature
System Option - Resource
Docker v0.2.2

Rundler v0.2.1

07 Jun 15:55
Compare
Choose a tag to compare

Rundler v0.2.1

Summary

Small bug fix release:

  • Fix missing CLI parameters
  • Fix for v0.7 gas estimation using the new executeUserOp special feature of the v0.7 entry point.

All Changes

  • chore: release 0.2.1, small doc fix
  • fix(sim): handle v0.7 executeUserOp special call in call gas estimation
  • fix(cli): add missing global to many common parameters

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.2.1-x86_64-unknown-linux-gnu.tar.gz PGP Signature
aarch64 rundler-v0.2.1-aarch64-unknown-linux-gnu.tar.gz PGP Signature
x86_64 rundler-v0.2.1-x86_64-pc-windows-gnu.tar.gz PGP Signature
x86_64 rundler-v0.2.1-x86_64-apple-darwin.tar.gz PGP Signature
aarch64 rundler-v0.2.1-aarch64-apple-darwin.tar.gz PGP Signature
System Option - Resource
Docker v0.2.1

Rundler v0.2.0

24 May 17:11
Compare
Choose a tag to compare

Summary

  • Entry point v0.7 support
  • Bug fixes

All Changes

  • chore: release v0.2.0
  • feat(simulation): check whether the op fits within a valid time range (#712)
  • fix(sim): update simulation for dencun opcodes
  • fix(builder): filter fee before filtering by gas limit
  • chore(docs): fix dead ERC-4337 links
  • fix(provider): use state overrides for gas used, not ctor method
  • fix(chain): set maximum transaction size bytes to 128KB for ethereum chains
  • chore(docs): add docs for entry point version support
  • fix(types): define entrypoint specific gas overheads
  • fix(types): fix unpack factory from initcode on v0.7
  • feat(builder): support multiple flashbots builders
  • fix: add flashbots signature header
  • refactor: use flashbots relay rpc
  • feat(builder): add option to pass in additional builders to flashbots mev-share rpc
  • chore(deps): bump rustls from 0.22.2 to 0.22.4
  • feat(entrypoint): use checksummed address with correct casing
  • fix(sim): handle explicit zero fees in 0.7 pre-verification gas
  • fix(sim): handle explicit zero fees in 0.6 pre-verification gas
  • chore(sim): move bytecode to contracts crate, use hex constant
  • fix(simulation): don't use abi-generated EntryPoint bytecode
  • fix(cli): enforce num keys greater than or equal to num builders
  • fix(rpc): make the validationRevert error message more clear
  • feat(rpc): return internal errors and increment metric on panic
  • feat(rpc): add distinct types for EP version gas estimations
  • feat(sim): skip estimation if gas field is provided in op
  • chore(docs): Update commands in makefile, readme, and help messages
  • fix(rpc): include inner error message in revert message
  • fix: add abi_encoded_size back to UserOperation
  • refactor(simulation): use abi-generated EntryPoint bytecode
  • feat(simulation): v0.7 call gas estimation
  • feat(rpc): return validation revert data from rpc
  • chore(simulation): remove postop gas estimates
  • feat(simulation): v0.7 verification gas estimation
  • chore(ci): fix remote tests for v0.6 and v0.7
  • fix(sim): use same method for expected storage in v0.7 from v0.6 tracer
  • feat(sim): sto-022 factory or entity needs stake, with cleanups
  • feat: add entry point to some logs and metrics
  • fix(sim): use H256 instead of U256 for expected storage
  • feat(sim): correctly attribute OP-054 and OP-061 to the correct phase
  • feat(sim): cleanups for v0.7 sim
  • feat(sim): implement simulation for v0.7 entrypoint using reference tracer
  • refactor: create context interface for simulation
  • fix(mempool): fix configuration deserialization
  • feat: cleanups for entry point v0.7 support
  • chore: fixing PR comments
  • chore: fixing PR comments
  • fix: remove extra box from dyn objects
  • chore: fixing PR comments
  • feat: end to end entry point routing (#649)
  • feat: unsafe mode for EP v0.6 (#648)
  • feat(provider): add an entry point v0.7 provider
  • feat(builder): start support for multiple entry points in builder (#645)
  • feat(pool): Add entry point routing to pool
  • refactor: move builder and pool traits to types
  • feat(rpc): introduce entry point routing
  • feat: add and use a user operation trait
  • feat(types): add entrypoint 0.7 contract types
  • feat: add and use a user operation trait
  • feat(types): add entrypoint 0.7 contract types
  • chore: start v0.2.0-rc0

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.2.0-x86_64-unknown-linux-gnu.tar.gz PGP Signature
aarch64 rundler-v0.2.0-aarch64-unknown-linux-gnu.tar.gz PGP Signature
x86_64 rundler-v0.2.0-x86_64-pc-windows-gnu.tar.gz PGP Signature
x86_64 rundler-v0.2.0-x86_64-apple-darwin.tar.gz PGP Signature
aarch64 rundler-v0.2.0-aarch64-apple-darwin.tar.gz PGP Signature
System Option - Resource
Docker v0.2.0