Skip to content

perf(rpc): pre-allocate vectors in eth_feeHistory#23334

Merged
mattsse merged 2 commits into
paradigmxyz:mainfrom
AKABABA-ETH:fix-fee-history-api
Apr 2, 2026
Merged

perf(rpc): pre-allocate vectors in eth_feeHistory#23334
mattsse merged 2 commits into
paradigmxyz:mainfrom
AKABABA-ETH:fix-fee-history-api

Conversation

@AKABABA-ETH
Copy link
Copy Markdown
Contributor

Vectors in eth_feeHistory were growing dynamically despite block_count being known upfront. Switched from Vec::new() to Vec::with_capacity() for all five vectors, eliminating ~10 reallocations per vector on large requests (block_count=1024).

Vectors in `eth_feeHistory` were growing dynamically despite `block_count` being known upfront. Switched from `Vec::new()` to `Vec::with_capacity()` for all five vectors, eliminating ~10 reallocations per vector on large requests (block_count=1024).
Copy link
Copy Markdown
Collaborator

@mattsse mattsse left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is headed in the right direction, but I think we should make one small change before merging. The four fee/gas vectors are good candidates for preallocation, but rewards is now preallocated on every call, including the common path where reward_percentiles is omitted and no rewards are returned at all. Since this PR is framed as reducing allocations in eth_feeHistory, I would avoid introducing a new unconditional allocation on that path.

Please make the rewards capacity conditional on actually requesting reward percentiles, and this should be in good shape.

Comment thread crates/rpc/rpc-eth-api/src/helpers/fee.rs Outdated
@github-project-automation github-project-automation Bot moved this from Backlog to In Progress in Reth Tracker Apr 2, 2026
Copy link
Copy Markdown
Collaborator

@mattsse mattsse left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Addressed in bd1bd92. rewards now stays lazy when reward_percentiles is omitted, and the focused fee_history tests passed locally.

@mattsse mattsse enabled auto-merge April 2, 2026 10:25
@mattsse mattsse added this pull request to the merge queue Apr 2, 2026
Merged via the queue into paradigmxyz:main with commit aa5effb Apr 2, 2026
35 checks passed
@github-project-automation github-project-automation Bot moved this from In Progress to Done in Reth Tracker Apr 2, 2026
github-merge-queue Bot pushed a commit to tempoxyz/tempo that referenced this pull request Apr 3, 2026
Automated nightly update of reth dependencies from `paradigmxyz/reth`
main branch.

## Upstream reth changes


[`f8efc76...c82d435`](paradigmxyz/reth@f8efc76...c82d435)

🔗 Amp thread:
https://ampcode.com/threads/T-019d517e-981b-75fd-b3cf-8ad2455f38f6
**RPC**
- Remove `0x` prefix from `admin_peers` id and return keccak256 node ID
in `admin_nodeInfo.id` to match go-ethereum format
([#23318](paradigmxyz/reth#23318),
[#23319](paradigmxyz/reth#23319))
- Apply count filter only after `after` is consumed in pagination
([#23338](paradigmxyz/reth#23338))
- Pre-allocate vectors in `eth_feeHistory`
([#23334](paradigmxyz/reth#23334))
- Add `bal` RPC methods
([#23330](paradigmxyz/reth#23330))

**Engine**
- Include backpressure in reported `persistence_wait`, make wait-time
mimic CL slot time
([#23308](paradigmxyz/reth#23308))

**Perf**
- Reduce cacheline ping-pong in workers availability
([#23321](paradigmxyz/reth#23321))

**Net**
- Avoid itertools `Format` panic in tracing log
([#23331](paradigmxyz/reth#23331))

**DB**
- Cap `storage_v2` unwind history by MDBX tip
([#23335](paradigmxyz/reth#23335))

**Bench**
- Add warmup step for big blocks mode
([#23323](paradigmxyz/reth#23323))
- Make payload handling ethereum-only
([#23324](paradigmxyz/reth#23324))
- Use repository instead of GitHub Actions cache to track hourly runs
([#23306](paradigmxyz/reth#23306))
- Upload nightly regression results to ClickHouse
([#23344](paradigmxyz/reth#23344))

**Chore**
- Migrate `allow(clippy::` to `expect(clippy::`
([#23340](paradigmxyz/reth#23340))
- Remove unused return value from `dispatch_with_chunking`
([#23341](paradigmxyz/reth#23341))
- Update nixpkgs to 25.11 and refresh flake inputs
([#23342](paradigmxyz/reth#23342))

## Migrations

🔗 Amp thread:
https://ampcode.com/threads/T-019d517e-baf0-727b-a57e-0488240af973
- **Reth dependency bump**: All `reth-*` git dependencies updated from
rev `f8efc76` to `c82d435`
- **New `GetBlockAccessList` trait impl**: `TempoEthApi` now implements
`GetBlockAccessList` (imported from `reth_rpc_eth_api::helpers::bal`),
likely a new required trait added upstream in the reth update

[GitHub
Workflow](https://github.com/tempoxyz/tempo/actions/runs/23933027282)

---------

Co-authored-by: Arsenii Kulikov <klkvrr@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

2 participants