From a7c2d2de72cd60605ccb6c94db687292b6982a37 Mon Sep 17 00:00:00 2001 From: markolazic01 Date: Mon, 31 Aug 2026 14:50:23 +0200 Subject: [PATCH 1/7] feat: post-gloas payload attributes --- apis/eventstream/index.yaml | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/apis/eventstream/index.yaml b/apis/eventstream/index.yaml index 2c90a25f..78fb9db4 100644 --- a/apis/eventstream/index.yaml +++ b/apis/eventstream/index.yaml @@ -135,7 +135,17 @@ get: The node has computed new payload attributes for execution payload building. This event gives block builders and relays sufficient information to construct or - verify a block at `proposal_slot`. The meanings of the fields are: + verify a block at `proposal_slot`. + + From `gloas` onwards a block at `proposal_slot` may build on either the parent's delivered + payload (full) or the parent's own execution parent (empty), and which one the proposer + uses is decided at proposal time. Nodes SHOULD emit this event once per distinct + `(parent_block_root, parent_block_hash)` as soon as that parent becomes buildable: + the empty variant when the parent block is imported, the full variant when the parent's + payload is imported. Nodes MAY emit the same variant again, for example at a fixed point + in the slot. Consumers MUST deduplicate by `(proposal_slot, parent_block_root, parent_block_hash)`. + + The meanings of the fields are: - `version`: the identifier of the beacon hard fork at `proposal_slot`, e.g. `"bellatrix"`, `"capella"`. @@ -153,13 +163,16 @@ get: `execution-apis` with two differences: 1) `snake_case` identifiers must be used rather than `camelCase`; 2) integers must be encoded as quoted decimals rather than big-endian hex. + - `safe_block_hash`, `finalized_block_hash`: the execution block hashes the node would pass + as `safeBlockHash` and `finalizedBlockHash` in `engine_forkchoiceUpdated` when building + on `parent_block_hash`. The frequency at which this event is sent may depend on beacon node configuration. The fee recipient may also be set via beacon node config, but should likely be ignored by block builders and most other API consumers. value: | event: payload_attributes - data: {"version": "gloas", "data": {"proposer_index": "123", "proposal_slot": "10", "parent_block_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", "parent_block_hash": "0x9a2fefd2fdb57f74993c7780ea5b9030d2897b615b89f808011ca5aebed54eaf", "payload_attributes": {"timestamp": "123456", "prev_randao": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", "suggested_fee_recipient": "0x0000000000000000000000000000000000000000", "withdrawals": [{"index": "5", "validator_index": "10", "address": "0x0000000000000000000000000000000000000000", "amount": "15640"}], "parent_beacon_block_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"}}} + data: {"version": "gloas", "data": {"proposer_index": "123", "proposal_slot": "10", "parent_block_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", "parent_block_hash": "0x9a2fefd2fdb57f74993c7780ea5b9030d2897b615b89f808011ca5aebed54eaf", "payload_attributes": {"timestamp": "123456", "prev_randao": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", "suggested_fee_recipient": "0x0000000000000000000000000000000000000000", "withdrawals": [{"index": "5", "validator_index": "10", "address": "0x0000000000000000000000000000000000000000", "amount": "15640"}], "parent_beacon_block_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"}}, "safe_block_hash":"0x9a2fefd2fdb57f74993c7780ea5b9030d2897b615b89f808011ca5aebed54eaf", "finalized_block_hash":"0x9a2fefd2fdb57f74993c7780ea5b9030d2897b615b89f808011ca5aebed54eaf"} data_column_sidecar: description: The node has received a DataColumnSidecar (from P2P or API) that passes all gossip validations on the data_column_sidecar_{subnet_id} topic value: | From c6da1b6f4d0b349ae0830ab3463a528590cf619c Mon Sep 17 00:00:00 2001 From: markolazic01 Date: Mon, 31 Aug 2026 15:05:13 +0200 Subject: [PATCH 2/7] chore: missing spaces --- apis/eventstream/index.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apis/eventstream/index.yaml b/apis/eventstream/index.yaml index 78fb9db4..a87f8069 100644 --- a/apis/eventstream/index.yaml +++ b/apis/eventstream/index.yaml @@ -172,7 +172,7 @@ get: ignored by block builders and most other API consumers. value: | event: payload_attributes - data: {"version": "gloas", "data": {"proposer_index": "123", "proposal_slot": "10", "parent_block_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", "parent_block_hash": "0x9a2fefd2fdb57f74993c7780ea5b9030d2897b615b89f808011ca5aebed54eaf", "payload_attributes": {"timestamp": "123456", "prev_randao": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", "suggested_fee_recipient": "0x0000000000000000000000000000000000000000", "withdrawals": [{"index": "5", "validator_index": "10", "address": "0x0000000000000000000000000000000000000000", "amount": "15640"}], "parent_beacon_block_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"}}, "safe_block_hash":"0x9a2fefd2fdb57f74993c7780ea5b9030d2897b615b89f808011ca5aebed54eaf", "finalized_block_hash":"0x9a2fefd2fdb57f74993c7780ea5b9030d2897b615b89f808011ca5aebed54eaf"} + data: {"version": "gloas", "data": {"proposer_index": "123", "proposal_slot": "10", "parent_block_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", "parent_block_hash": "0x9a2fefd2fdb57f74993c7780ea5b9030d2897b615b89f808011ca5aebed54eaf", "payload_attributes": {"timestamp": "123456", "prev_randao": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", "suggested_fee_recipient": "0x0000000000000000000000000000000000000000", "withdrawals": [{"index": "5", "validator_index": "10", "address": "0x0000000000000000000000000000000000000000", "amount": "15640"}], "parent_beacon_block_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"}}, "safe_block_hash": "0x9a2fefd2fdb57f74993c7780ea5b9030d2897b615b89f808011ca5aebed54eaf", "finalized_block_hash": "0x9a2fefd2fdb57f74993c7780ea5b9030d2897b615b89f808011ca5aebed54eaf"} data_column_sidecar: description: The node has received a DataColumnSidecar (from P2P or API) that passes all gossip validations on the data_column_sidecar_{subnet_id} topic value: | From 9e530adea38bc5040a270e05401d3d54db40ab6d Mon Sep 17 00:00:00 2001 From: markolazic01 Date: Mon, 31 Aug 2026 15:39:43 +0200 Subject: [PATCH 3/7] fix: remove behavior paragraph --- apis/eventstream/index.yaml | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/apis/eventstream/index.yaml b/apis/eventstream/index.yaml index a87f8069..8ecd129c 100644 --- a/apis/eventstream/index.yaml +++ b/apis/eventstream/index.yaml @@ -135,17 +135,7 @@ get: The node has computed new payload attributes for execution payload building. This event gives block builders and relays sufficient information to construct or - verify a block at `proposal_slot`. - - From `gloas` onwards a block at `proposal_slot` may build on either the parent's delivered - payload (full) or the parent's own execution parent (empty), and which one the proposer - uses is decided at proposal time. Nodes SHOULD emit this event once per distinct - `(parent_block_root, parent_block_hash)` as soon as that parent becomes buildable: - the empty variant when the parent block is imported, the full variant when the parent's - payload is imported. Nodes MAY emit the same variant again, for example at a fixed point - in the slot. Consumers MUST deduplicate by `(proposal_slot, parent_block_root, parent_block_hash)`. - - The meanings of the fields are: + verify a block at `proposal_slot`. The meanings of the fields are: - `version`: the identifier of the beacon hard fork at `proposal_slot`, e.g. `"bellatrix"`, `"capella"`. From ad322f49e9141e62fca63cedb14706498d9290fc Mon Sep 17 00:00:00 2001 From: markolazic01 Date: Mon, 31 Aug 2026 16:10:06 +0200 Subject: [PATCH 4/7] fix: reorder fields in data --- apis/eventstream/index.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apis/eventstream/index.yaml b/apis/eventstream/index.yaml index 8ecd129c..be18fb61 100644 --- a/apis/eventstream/index.yaml +++ b/apis/eventstream/index.yaml @@ -162,7 +162,7 @@ get: ignored by block builders and most other API consumers. value: | event: payload_attributes - data: {"version": "gloas", "data": {"proposer_index": "123", "proposal_slot": "10", "parent_block_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", "parent_block_hash": "0x9a2fefd2fdb57f74993c7780ea5b9030d2897b615b89f808011ca5aebed54eaf", "payload_attributes": {"timestamp": "123456", "prev_randao": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", "suggested_fee_recipient": "0x0000000000000000000000000000000000000000", "withdrawals": [{"index": "5", "validator_index": "10", "address": "0x0000000000000000000000000000000000000000", "amount": "15640"}], "parent_beacon_block_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"}}, "safe_block_hash": "0x9a2fefd2fdb57f74993c7780ea5b9030d2897b615b89f808011ca5aebed54eaf", "finalized_block_hash": "0x9a2fefd2fdb57f74993c7780ea5b9030d2897b615b89f808011ca5aebed54eaf"} + data: {"version": "gloas", "data": {"proposer_index": "123", "proposal_slot": "10", "parent_block_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", "parent_block_hash": "0x9a2fefd2fdb57f74993c7780ea5b9030d2897b615b89f808011ca5aebed54eaf", "safe_block_hash": "0x9a2fefd2fdb57f74993c7780ea5b9030d2897b615b89f808011ca5aebed54eaf", "finalized_block_hash": "0x9a2fefd2fdb57f74993c7780ea5b9030d2897b615b89f808011ca5aebed54eaf", "payload_attributes": {"timestamp": "123456", "prev_randao": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", "suggested_fee_recipient": "0x0000000000000000000000000000000000000000", "withdrawals": [{"index": "5", "validator_index": "10", "address": "0x0000000000000000000000000000000000000000", "amount": "15640"}], "parent_beacon_block_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2"}}} data_column_sidecar: description: The node has received a DataColumnSidecar (from P2P or API) that passes all gossip validations on the data_column_sidecar_{subnet_id} topic value: | From c305775fac69cbbf3a4274de162df2ad8d6d0e8b Mon Sep 17 00:00:00 2001 From: markolazic01 Date: Thu, 24 Sep 2026 01:11:44 +0200 Subject: [PATCH 5/7] chore: remove extra spacing --- apis/eventstream/index.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/apis/eventstream/index.yaml b/apis/eventstream/index.yaml index a9b8ce87..9074f43e 100644 --- a/apis/eventstream/index.yaml +++ b/apis/eventstream/index.yaml @@ -163,7 +163,6 @@ get: value: | event: payload_attributes data: {"version": "gloas", "data": {"proposer_index": "123", "proposal_slot": "10", "parent_block_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", "parent_block_hash": "0x9a2fefd2fdb57f74993c7780ea5b9030d2897b615b89f808011ca5aebed54eaf", "safe_block_hash": "0x9a2fefd2fdb57f74993c7780ea5b9030d2897b615b89f808011ca5aebed54eaf", "finalized_block_hash": "0x9a2fefd2fdb57f74993c7780ea5b9030d2897b615b89f808011ca5aebed54eaf", "payload_attributes": {"timestamp": "123456", "prev_randao": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", "suggested_fee_recipient": "0x0000000000000000000000000000000000000000", "withdrawals": [{"index": "5", "validator_index": "10", "address": "0x0000000000000000000000000000000000000000", "amount": "15640"}], "parent_beacon_block_root": "0xcf8e0d4e9587369b2301d0790347320302cc0943d5a1884560367e8208d920f2", "slot_number": "10", "target_gas_limit": "60000000"}}} - data_column_sidecar: description: The node has received a DataColumnSidecar (from P2P or API) that passes all gossip validations on the data_column_sidecar_{subnet_id} topic value: | From deeaf49d8645e6a915f505b88a69d59b0ada6dfa Mon Sep 17 00:00:00 2001 From: markolazic01 Date: Thu, 24 Sep 2026 01:18:23 +0200 Subject: [PATCH 6/7] chore: update changelog --- CHANGES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 2a492f37..9d034781 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -38,7 +38,7 @@ There are likely to be descriptions etc outside of the list below, but new query | [#608](https://github.com/ethereum/beacon-APIs/pull/608) `POST /eth/v1/validator/prepare_beacon_proposer` deprecated | | | | | | | [#608](https://github.com/ethereum/beacon-APIs/pull/608) `POST /eth/v1/validator/register_validator` deprecated | | | | | | | [#608](https://github.com/ethereum/beacon-APIs/pull/608) `POST /eth/v1/validator/beacon_committee_subscriptions` updated | | | | | | -| [#621](https://github.com/ethereum/beacon-APIs/pull/621) `payload_attributes EVENT` updated | | | | | | +| [#621](https://github.com/ethereum/beacon-APIs/pull/621) / [#638](https://github.com/ethereum/beacon-APIs/pull/638) `payload_attributes EVENT` updated | | | | | | | [#651](https://github.com/ethereum/beacon-APIs/pull/651) `GET /eth/v1/beacon/blinded_blocks/{block_id}` deprecated | | | | | | | [#651](https://github.com/ethereum/beacon-APIs/pull/651) `POST /eth/v2/beacon/blinded_blocks` deprecated | | | | | | | [#651](https://github.com/ethereum/beacon-APIs/pull/651) `GET /eth/v3/validator/blocks/{slot}` deprecated | | | | | | From 93b500ffffdb78c64b3279cae6aa906c52b76bfd Mon Sep 17 00:00:00 2001 From: Nico Flaig Date: Sat, 26 Sep 2026 15:13:06 +0100 Subject: [PATCH 7/7] review --- apis/eventstream/index.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apis/eventstream/index.yaml b/apis/eventstream/index.yaml index 9074f43e..335d09eb 100644 --- a/apis/eventstream/index.yaml +++ b/apis/eventstream/index.yaml @@ -144,6 +144,9 @@ get: - `parent_block_root`: the beacon block root of the parent block to be built upon. - `parent_block_number`: the execution block number of the parent block. Removed from `gloas` onwards. - `parent_block_hash`: the execution block hash of the parent block. + - `safe_block_hash`, `finalized_block_hash`: the execution block hashes the node would pass + as `safeBlockHash` and `finalizedBlockHash` in `engine_forkchoiceUpdated` when building + on `parent_block_hash`. Added from `gloas` onwards. - `proposer_index`: the validator index of the proposer at `proposal_slot` on the chain identified by `parent_block_root`. - `payload_attributes`: beacon API encoding of `PayloadAttributesV` as @@ -153,9 +156,6 @@ get: `execution-apis` with two differences: 1) `snake_case` identifiers must be used rather than `camelCase`; 2) integers must be encoded as quoted decimals rather than big-endian hex. - - `safe_block_hash`, `finalized_block_hash`: the execution block hashes the node would pass - as `safeBlockHash` and `finalizedBlockHash` in `engine_forkchoiceUpdated` when building - on `parent_block_hash`. The frequency at which this event is sent may depend on beacon node configuration. The fee recipient may also be set via beacon node config, but should likely be