[pull] develop from OffchainLabs:develop#1037
Merged
Merged
Conversation
## Summary On a Gloas-genesis devnet (Kurtosis, glamsterdam-devnet-4), Prysm reconstructs a genesis block whose `body_root` does **not** match `state.latest_block_header.body_root`. Every Lodestar/Lighthouse node returns canonical genesis root `0x2ed167c76d353b77…`; both Prysm nodes return `0xfef8248511dc8b91…` (orphaned). All clients agree on the state root (`0xf29bc0bb3aff0efa…`), so the divergence is purely in Prysm's locally-constructed `BeaconBlockBodyGloas`, not in the loaded SSZ state. The validator client surfaces the inconsistency at slot 1 with the BN's own state: ``` ERROR rpc/validator: Finished building block error=… could not process block header: parent root 0xfef8248511… does not match the latest block header signing root in state 0x2ed167c7… ``` Diffing the JSON of the genesis block body returned by Lighthouse vs Prysm reveals exactly two fields differ, both inside `signed_execution_payload_bid.message`: | field | Lighthouse / Lodestar (canonical) | Prysm (orphan) | |---|---|---| | `parent_block_hash` | `0xab172d9e48985f0dc7789…` (== `state.latest_block_hash`) | `0x0000…0000` | | `execution_requests_root` | `0x85e253b40599d0df756be…` (== `hash_tree_root(ExecutionRequests())`) | `0x0000…0000` | Both of those values appear verbatim in `state.latest_execution_payload_bid` (verified against the genesis SSZ from `eth-beacon-genesis`). The genesis distribution tool commits to `body.signed_execution_payload_bid.message == state.latest_execution_payload_bid`; Prysm's `gloasGenesisBlock` was using zero defaults instead. This PR threads `state.LatestExecutionPayloadBid` into `gloasGenesisBlock` so the reconstructed body matches what the state header committed to. Also initializes `parent_execution_requests` to a non-nil empty `ExecutionRequests`, since the proto field was added but never populated here — `BeaconBlockBodyGloas.HashTreeRoot()` dereferences `ParentExecutionRequests` unconditionally (`gloas.ssz.go`). ## Test plan - [x] `go build ./...` - [x] `go test ./beacon-chain/core/blocks/ -run TestGenesis` - [ ] Verify on a Gloas Kurtosis devnet that: - All Prysm nodes return the same genesis `block_root` as Lighthouse/Lodestar/Teku. - Validator proposes successfully at slot 1 (no "parent root … does not match" error). - [ ] Walk a fresh chain from genesis through the Gloas fork epoch (non-Gloas-genesis path) to confirm no regression for `upgrade_to_gloas` flows.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.4)
Can you help keep this open source service alive? 💖 Please sponsor : )