Skip to content

Ensure empty withdrawal lists are set in BFT blocks when the protocol spec is shanghai or higher#6765

Merged
matthew1001 merged 5 commits intobesu-eth:mainfrom
matthew1001:shanghai-qbft-fix
Mar 27, 2024
Merged

Ensure empty withdrawal lists are set in BFT blocks when the protocol spec is shanghai or higher#6765
matthew1001 merged 5 commits intobesu-eth:mainfrom
matthew1001:shanghai-qbft-fix

Conversation

@matthew1001
Copy link
Copy Markdown
Contributor

@matthew1001 matthew1001 commented Mar 19, 2024

PR description

If the protocol spec is as shanghai or higher, a valid (if empty) withdrawals list must be present in the blocks proposed.

Fixed Issue(s)

Fixes #6760

… schedule is shanghai or higher

Signed-off-by: Matthew Whitehead <matthew1001@gmail.com>
Signed-off-by: Matthew Whitehead <matthew1001@gmail.com>
Signed-off-by: Matthew Whitehead <matthew1001@gmail.com>
final Block block = blockCreator.createBlock(headerTimeStampSeconds).getBlock();

// Determine if we're at a protocol spec that requires withdrawals (even if empty) to be present
ProtocolSpec protocolSpec =
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This is duplicated several times. It feels like we can do this in BftBlockCreator by overriding createBlock, checking the withdrawal validator, and switching on that. If the sequence number is truly needed then making a new createBlock method with both args. May need to also do it for PkuQbftBlockCreator since there is no shared parent classes.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Good thought. I've done some refactoring as BftBlockCreator already has access to the parent header required to get the next block number. So it was a little easier than I thought. Now QbftRound and IbftRound can just continue to call createBlock(...) as they did before, and BftBlockCreator.createBlock(...) can decide which type of block to actually create. There's a little repetition in PkiQbftBlockCreator like you say, but it's definitely tidier now.

@matthew1001 matthew1001 force-pushed the shanghai-qbft-fix branch 5 times, most recently from 036b7e2 to 41bf3e0 Compare March 21, 2024 15:13
Signed-off-by: Matthew Whitehead <matthew1001@gmail.com>
Signed-off-by: Matt Whitehead <matthew.whitehead@kaleido.io>
@matthew1001 matthew1001 enabled auto-merge (squash) March 27, 2024 16:18
@matthew1001 matthew1001 merged commit 5bc81ae into besu-eth:main Mar 27, 2024
amsmota pushed a commit to Citi/besu that referenced this pull request Apr 16, 2024
… spec is shanghai or higher (besu-eth#6765)

* Ensure empty withdrawal lists are set in BFT blocks when the protocol schedule is shanghai or higher

Signed-off-by: Matthew Whitehead <matthew1001@gmail.com>

* Unit tests missing mock

Signed-off-by: Matthew Whitehead <matthew1001@gmail.com>

* Unit tests missing mock

Signed-off-by: Matthew Whitehead <matthew1001@gmail.com>

* Refactor and reduce code duplication

Signed-off-by: Matthew Whitehead <matthew1001@gmail.com>

---------

Signed-off-by: Matthew Whitehead <matthew1001@gmail.com>
Signed-off-by: Matt Whitehead <matthew.whitehead@kaleido.io>
Signed-off-by: amsmota <antonio.mota@citi.com>
amsmota pushed a commit to Citi/besu that referenced this pull request Apr 16, 2024
… spec is shanghai or higher (besu-eth#6765)

* Ensure empty withdrawal lists are set in BFT blocks when the protocol schedule is shanghai or higher

Signed-off-by: Matthew Whitehead <matthew1001@gmail.com>

* Unit tests missing mock

Signed-off-by: Matthew Whitehead <matthew1001@gmail.com>

* Unit tests missing mock

Signed-off-by: Matthew Whitehead <matthew1001@gmail.com>

* Refactor and reduce code duplication

Signed-off-by: Matthew Whitehead <matthew1001@gmail.com>

---------

Signed-off-by: Matthew Whitehead <matthew1001@gmail.com>
Signed-off-by: Matt Whitehead <matthew.whitehead@kaleido.io>
Signed-off-by: amsmota <antonio.mota@citi.com>
@cryptohazard
Copy link
Copy Markdown

hello,
could you confirm that this update only work for network that will now go through a Shanghai update and not for previous networks that already activated Shanghai with an older version of Besu.
I'm having an issue related to that #7036 (comment)

@ex-shubham-koli
Copy link
Copy Markdown

+following

This was referenced May 16, 2024
matthew1001 added a commit to kaleido-io/besu that referenced this pull request Jun 7, 2024
… spec is shanghai or higher (besu-eth#6765)

* Ensure empty withdrawal lists are set in BFT blocks when the protocol schedule is shanghai or higher

Signed-off-by: Matthew Whitehead <matthew1001@gmail.com>

* Unit tests missing mock

Signed-off-by: Matthew Whitehead <matthew1001@gmail.com>

* Unit tests missing mock

Signed-off-by: Matthew Whitehead <matthew1001@gmail.com>

* Refactor and reduce code duplication

Signed-off-by: Matthew Whitehead <matthew1001@gmail.com>

---------

Signed-off-by: Matthew Whitehead <matthew1001@gmail.com>
Signed-off-by: Matt Whitehead <matthew.whitehead@kaleido.io>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

QBFT/Shanghai blocks failing withdrawal validation on import

4 participants