Date: 2023/04/12

Authors: Terence Tsao, Potuz, Nishant Das, James He

Status: Rootcause found and fix released. https://github.com/prysmaticlabs/prysm/releases/tag/v4.0.2

Network: Mainnet

Summary: Blinded capella blocks missed populating the new field BlsToExecutionChanges while unblinding the builder (aka relay) blinded block. Missing the bls changes resulted in invalid blocks and affects all prysm nodes connected with relays. Proposers will not be able to propose blocks. The inconsistency of submitting BLS messages (typically mostly at the fork) combined with the complexity of the builder setup and generic error resulted in difficult detection in the testnets.

Impact: All validators that run Prysm using MEV-Boost who propose blocks that have greater than 0 bls-to-exec-changes in them. On avg 40% [1] of the network uses Prysm. 80% of the network uses MEV-Boost [2]. Which translates to 5-6 missing blocks every epoch.

Detection: Lido first asked us to investigate a missing block

Action Items:

Action Item Type Owner Relevant Link Notes
Produce Fix code Terence Done
Review PR review Potuz, Nishant, James, Kasey Done
Direct Users communication Team Discord, Lido, Rocketpool, Twitter, Flashbots Done
Determine Release decision Team https://github.com/prysmaticlabs/prysm/releases/tag/v4.0.2 Done
Release Fix devops Team https://github.com/prysmaticlabs/prysm/releases/tag/v4.0.2 Done
E2E Testing With Builders Feature Addition Nishant
Investigate builder setting caching bug Investigate James
Validators that remove all relay/builder related flags from their beacon nodes and validators will still access builder paths which cause panics. Validators that have registered mev boost cannot unregister Requires Fix Team

| this panic appears to be happening in the validator client calling getPayloadHeaderFromBuilder | | UX improvement potential with —enable-builder flag in combination with —proposer-settings flag | Discussion | James | | Create a guide for enabling and disabling builder settings | | Better release structure. Preston is the only person that can sign the release. It becomes a blocker for critical recovery | devops | Preston and team | | | | Increase the number of builder enabled validators run by the Prysm team significantly (10% → 80%) so that any builder issues are much more visible in testnets. | devops | Team | | | | Start having separate builders run by the team so that mismatches between proposers and builders are more visible and allow easier insight into possible bugs on the prysm’s builder client code path. | devops | Team | | |

What went wrong

Where we got lucky

Lessons Learned