feat: force the proposer to reorg late payloads - #9431
Conversation
…ld-on-full-slot-guard # Conflicts: # packages/fork-choice/test/unit/protoArray/gloas.test.ts
There was a problem hiding this comment.
Code Review
This pull request updates the shouldBuildOnFull method in ProtoArray to force building on the EMPTY variant if the payload is determined to be untimely, in addition to when blob data is unavailable. Unit tests have been added to verify this behavior under threshold conditions. There are no review comments, so no additional feedback is provided.
# Conflicts: # packages/beacon-node/src/chain/produceBlock/produceBlockBody.ts # packages/fork-choice/src/protoArray/protoArray.ts # packages/fork-choice/test/unit/protoArray/gloas.test.ts
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 19909e2614
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| // signalled the blob data is not available, forcing a build on EMPTY (reorg). | ||
| // (set by chain.getProposerHead(slot)). Returns false when the PTC majority signalled | ||
| // the blob data is not available or the payload was not timely, forcing a build on EMPTY (reorg). | ||
| const isBuildingOnFull = this.forkChoice.shouldBuildOnFull(parentBlock, blockSlot); |
There was a problem hiding this comment.
Reject builder bids when forced onto EMPTY
When a Gloas proposer has a builder bid for the FULL head and PTC timeliness NO votes exceed the threshold, this new shouldBuildOnFull check only affects the local execution-payload branch. The earlier builderBid !== undefined branch never calls it, and produceBlockV4 fetches a bid for parentBlock.executionPayloadBlockHash then prefers any fulfilled builder result, so the validator can still publish a builder block extending the late FULL payload instead of reorging to EMPTY. The builder path needs to be gated or look up/build only bids for the EMPTY parent when shouldBuildOnFull(parentBlock, slot) is false.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
this new shouldBuildOnFull check only affects the local execution-payload branch
this seems like a bug if that's the case, but kinda unrelated to this PR
There was a problem hiding this comment.
cc @ensi321 since you worked on this, I haven't reviewed your PR in detail yet but this seems like a valid finding, meaning we would not reorg late payloads if we use a bid instead of local build
There was a problem hiding this comment.
It's a valid concern. We need to call shouldBuildOnFull in our builder bid flow
There was a problem hiding this comment.
Performance Report✔️ no performance regression detected Full benchmark results
|
twoeths
left a comment
There was a problem hiding this comment.
the change itself is correct, just want to compare to FULL variant instead
|
🎉 This PR is included in v1.44.0 🎉 |
See ethereum/consensus-specs#5210, depends on #9428