<aside> 🔗 Consider linking to your design doc from your PR to make your PR reviewer’s job easier!

</aside>

Abstract / TLDR

Withdrawals are a major part of the Ethereum Capella hard fork. This document explains how this feature will be designed in Prysm.

Background

Currently there is no way to withdraw funds stored in the validator balance. Validators can exit the validator pool, but their ETH is stuck at the CL. The next hard fork, which is named Capella, will change this. Validators will be able to withdraw their balances to their EL accounts. https://github.com/ethereum/consensus-specs/blob/dev/specs/capella/beacon-chain.md describes core CL changes that have to be made in order to enable withdrawals.

These are the main parts of this feature:

Current state

Desired state

Execution plan

Work plan

  1. Containers and protobufs objects can be created right away (eg. BLSToExecutionChange)
  2. With 1 in hand we can start adding pure functions to validate and process said containers (eg. process_bls_to_execution_change) 3a) Create the beacon endpoint 3b) Create the prysmctl CLI to validate the SignedBLSToExecutionChange JSON, serialize it to SSZ and send the message to the endpoint in 3a 3c) Work on the p2p side of sending, receiving and pre-validating these messages.
  3. Create new versions for the state and blocks
  4. Create fork logic