Skip to content

feat(engine): add getPayloadBodiesV2 endpoints for EIP-7928 BAL support#21774

Merged
mattsse merged 3 commits intomainfrom
feat/payload-bodies-v2
Feb 10, 2026
Merged

feat(engine): add getPayloadBodiesV2 endpoints for EIP-7928 BAL support#21774
mattsse merged 3 commits intomainfrom
feat/payload-bodies-v2

Conversation

@gakonst
Copy link
Member

@gakonst gakonst commented Feb 3, 2026

Summary

Replaces the deprecated engine_getBALsByHashV1 and engine_getBALsByRangeV1 endpoints with the new V2 getPayloadBodies endpoints that include the block_access_list field per the EIP-7928 spec update.

Changes

  • Added engine_getPayloadBodiesByHashV2: Returns ExecutionPayloadBodyV2 objects containing transactions, withdrawals, and block_access_list
  • Added engine_getPayloadBodiesByRangeV2: Returns ExecutionPayloadBodyV2 objects for a range of blocks
  • Removed deprecated engine_getBALsByHashV1 and engine_getBALsByRangeV1 endpoints
  • Updated capabilities to advertise the new V2 methods
  • Added metrics for the new V2 endpoints
  • Updated Optimism RPC to include the new V2 methods

Implementation Notes

The V2 implementation reuses the existing V1 code via the get_payload_bodies_by_*_with helper functions but returns ExecutionPayloadBodyV2 with block_access_list set to None. This will be populated once BAL storage is implemented.

Related

This replaces the deprecated engine_getBALsByHashV1 and engine_getBALsByRangeV1
endpoints with the new V2 getPayloadBodies endpoints that include the
block_access_list field in ExecutionPayloadBodyV2.

Per the EIP-7928 spec update:
- engine_getPayloadBodiesByHashV2: Returns ExecutionPayloadBodyV2 with BAL
- engine_getPayloadBodiesByRangeV2: Returns ExecutionPayloadBodyV2 with BAL

The implementation reuses the existing V1 logic but returns
ExecutionPayloadBodyV2 with block_access_list set to None (will be
populated once BAL storage is implemented).

See: ethereum/EIPs@ac65351
Amp-Thread-ID: https://ampcode.com/threads/T-019c257c-5fbe-765f-9a02-658bd2752ece
Co-authored-by: Amp <amp@ampcode.com>
Copy link
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 doesnt yet integrate the bal but this is fine for now

@github-project-automation github-project-automation bot moved this from Backlog to In Progress in Reth Tracker Feb 4, 2026
gakonst and others added 2 commits February 4, 2026 11:09
…payload-bodies-v2

Amp-Thread-ID: https://ampcode.com/threads/T-019c480c-9b05-749c-afee-5d1582a6e995
Co-authored-by: Amp <amp@ampcode.com>

# Conflicts:
#	crates/optimism/rpc/src/engine.rs
@mattsse mattsse enabled auto-merge February 10, 2026 14:58
@github-actions
Copy link
Contributor

⚠️ Changelog not found.

A changelog entry is required before merging. We've generated a suggested changelog based on your changes:

Preview
---
reth-rpc-api: minor
reth-rpc-engine-api: minor
---

Added `engine_getPayloadBodiesByHashV2` and `engine_getPayloadBodiesByRangeV2` RPC methods with support for EIP-7928 block access lists. Removed `engine_getBALsByHashV1` and `engine_getBALsByRangeV1` methods.

Add changelog to commit this to your branch.

@mattsse mattsse added this pull request to the merge queue Feb 10, 2026
Merged via the queue into main with commit b25b8c0 Feb 10, 2026
43 checks passed
@mattsse mattsse deleted the feat/payload-bodies-v2 branch February 10, 2026 15:19
@github-project-automation github-project-automation bot moved this from In Progress to Done in Reth Tracker Feb 10, 2026
CarlBeek added a commit to CarlBeek/reth that referenced this pull request Feb 10, 2026
* paradigmxyz/main: (144 commits)
  feat(engine): add getPayloadBodiesV2 endpoints for EIP-7928 BAL support (paradigmxyz#21774)
  ci: skip scheduled workflows on forks (paradigmxyz#22022)
  chore: rm random log file (paradigmxyz#22023)
  chore: remove base.reth.rs public endpoint references (paradigmxyz#22019)
  feat(rpc): add `subscribeFinalizedChainNotifications` endpoint (paradigmxyz#22011)
  feat(trie): remove `SerialSparseTrie` (paradigmxyz#21808)
  fix(rocksdb): set max_open_files to prevent fd exhaustion (paradigmxyz#22005)
  refactor(txpool): rename and document validation methods (paradigmxyz#22008)
  feat(engine): prefetch withdrawal addresses in pre-warming (paradigmxyz#21966)
  refactor(pool): add IntoIter: Send bounds to avoid unnecessary Vec collect (paradigmxyz#22001)
  fix(rpc): enforce blockHash constraint in append_matching_block_logs (paradigmxyz#22007)
  chore: move Kurtosis failures to the hive slack channel  (paradigmxyz#21983)
  feat(rpc): propagate TransactionOrigin through send_transaction and batcher (paradigmxyz#21969)
  feat(engine): reorg depth commitment metric (paradigmxyz#21992)
  feat(storage): add use_hashed_state storage setting (paradigmxyz#21997)
  perf: better scheduling for storage roots computation (paradigmxyz#21987)
  chore(deps): bump alloy 1.6.2 -> 1.6.3 (paradigmxyz#21986)
  fix(stages): skip sender unwind when fully pruned (paradigmxyz#21988)
  chore(net): remove OP stack bootnodes (paradigmxyz#21984)
  ci: use depot for hive and kurtosis image builds, run daily (paradigmxyz#21976)
  ...

# Conflicts:
#	.github/workflows/compact.yml
#	.github/workflows/dependencies.yml
#	.github/workflows/docker-tag-latest.yml
#	.github/workflows/docker.yml
#	.github/workflows/e2e.yml
#	.github/workflows/hive.yml
#	.github/workflows/integration.yml
#	.github/workflows/kurtosis.yml
#	.github/workflows/lint.yml
#	.github/workflows/release.yml
#	.github/workflows/reproducible-build.yml
#	.github/workflows/stale.yml
#	.github/workflows/sync-era.yml
#	.github/workflows/sync.yml
#	.github/workflows/unit.yml
#	bin/reth/Cargo.toml
#	crates/cli/commands/src/node.rs
#	crates/node/core/src/node_config.rs
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