EIP-8365: BLS withdrawal credential retirement

Discussion topic for EIP-8365: Add EIP: BLS withdrawal credential retirement by ensi321 · Pull Request #12097 · ethereum/EIPs · GitHub

This proposal retires the 0x00 (BLS) withdrawal credential type: active 0x00 validators are exited at a capped rate per epoch, and deposits creating new 0x00 validators are no longer processed. BLSToExecutionChange stays open, so a retired validator’s full balance remains recoverable at any time by rotating to 0x01.

Motivation in short: the 0x00 population has stalled at ~9,300 validators (~343k ETH) after three years of conversion since Capella, several hundred of which are likely lost keys that nobody, including the protocol, can remove. Each of them cannot register post-quantum keys, and carrying the credential type into the PQ era means maintaining hardened BLSToExecutionChange machinery indefinitely. This is the first stage of a staged deprecation (retire, drain, remove). A companion EIP covering the balance drain will get its own thread.

Data on the current 0x00 population: Dealing with Legacy 0x00 Validators - HackMD

Feedback especially wanted on MAX_RETIREMENTS_PER_EPOCH sizing, deposit-guard edge cases at the fork boundary, and from operators still holding 0x00 credentials.

Why not exit the 0x00 to their deposit address by default ?
Interesting dashboard :
https://deprecatebls.com/dashboard

1 Like

I thought about this, but there are several issues:

  1. Deposit address is not in the beacon state. So you need to dig through the deposit contract logs from pre-merge era, which is something that is hard to form consensus on.

  2. The depositor doesn’t necessarily means the owner. Anyone can deposit to any validator they want without permission.

  3. What if multiple wallets did deposits to the same validator?

  4. 0x00 validators have a bls withdrawal key in their credentials. Withdraw to the deposit address is essentially bypassing this on-chain commitment and appoint another beneficiary feels wrong to me.

Also thanks for pointing me to the dashboard :grinning_face_with_smiling_eyes:

1 Like

Adding some context from our work at DeprecateBLS:
DeprecateBLS was started to help people that lost their withdrawal keys. Many of which are pre-genesis stakers like myself.

Combined balances of these lost validators: 46017 ETH. Which includes the large, confirmed lost, stake of Stakehound.

And another 5923 ETH is currently stuck in exited validators (that have not set 0x01/0x02) so high probability that they are also lost.

What would be the reasons behind not updating from 0x00 to 0x01 besides having lost access to your credentials (1) and not wanting to go through the hassle of retrieving your passphrase versus the befenit of partially withdrawing/compounding your balance (2) ?

Regarding (2), the growth of the outstanding balance progressively nudge 0x00 to upgrade. As EIP-8365 rolls out it creates an immediate hurge to upgrade.

Regarding (1), the situation is much more problematic. A validator that has lost its withdrawal key and is still active under his validating key will definitely want to stay active for as long as possible because he continues to earn when proposing a block on his fee recipient address.
I can definitely support the motivation of post-quantum transition nevertheless if you don’t provide a mean for those lost validators to eventually get back their stake, I see two problems:

  • Lost validators are strongly incentivised to refuse this change because it cuts their prospect of earnings on the unwithdrawable funds
  • Post exit, those unwithdrawable funds become a honeypot for quantum (which goes against the quantum motivation)

I concure with your comments on deposit address not being in the beacon state thus being a technical hurdle to point at. Nevertheless regarding the separation between the operator, the depositor and so on, I cannot imagine a setup where the actors are different and don’t have a line of communication of some sort to coordinate on such EIP rollout.

If I remember correctly, since Bellatrix the state does have the latest_execution_payload_header, which includes the fee_recipient of the most recently processed block. During the block processing itself, process_execution_payload sees the full payload of the current block, so the consensus layer transiently “knows” the fee recipient of each block as it validates it. Even though this is a per-block data tied to whoever proposed that slot and not a persistent mapping from validator index to address it’s probably the best thing available to tie the validator to a layer 1 address.

If the fee_recipient is actually avaible in the latest_execution_payload_header, what would you think about a mechanism such as: starting Hegota (or 6 months after Hegota or later, giving people enough time to prepare), when a 0x00 validator propose a block this triggers an exit to his fee_recipient address ?

A validator that has lost its withdrawal key and is still active under his validating key will definitely want to stay active for as long as possible because he continues to earn when proposing a block on his fee recipient address

This is interesting so I dug through mainnet data a bit. A 0x00 validator earns EL rewards of about 0.04 ETH per year on average (roughly 0.02 on median) while earning CL rewards of 0.77 ETH on average and 0.81 on median per year into the unwithdrawable balance. Anyone operating only for the EL rewards is operating at a loss, so the stay-active incentive really only applies to large entities running many lost-key validators from shared infrastructure.

Also on the ratio of crowd (1) and crowd (2). We know crowd (1) has roughly 1,400 validators by DeprecateBLS’s own registry, and the remaining ~7,300 live validators we cannot classify. Even taking the registry at face value, the convertible crowd likely outnumbers the lost crowd several times over, and blocking the EIP to protect crowd (1) forfeits the conversion nudge for crowd (2).

And blocking the EIP does not actually preserve crowd (1)'s income. Every PQ registry design force-exits validators that never register, so opposition buys roughly two extra years of ~0.04 ETH per validator per year and nothing else, while the cost is arriving at the PQ fork with 9,000 unresolved entries and increased friction for the PQ transition. Sounds to me the cost of blocking outweighs the benefit.

Post exit, those unwithdrawable funds become a honeypot for quantum (which goes against the quantum motivation)

It is the opposite. These funds are quantum proof because the credential is a sha256 commitment and the withdrawal pubkey is never revealed on chain. The exposure only begins the moment a BLSToExecutionChange is broadcast after quantum computers arrive, since the message reveals the pubkey. So keeping the path open into the PQ era means designing a PQ version of BLSToExecutionChange, which I do not know what it would look like, and spending effort to design one is not worth it when usage is already this low.

I cannot imagine a setup where the actors are different and don’t have a line of communication of some sort to coordinate on such EIP rollout.

This is an assumption we cannot verify. It would need to hold for all ~9,000 validators for the payout rule to be safe, and we cannot make protocol decisions based on that.

starting Hegota (or 6 months after Hegota or later, giving people enough time to prepare), when a 0x00 validator propose a block this triggers an exit to his fee_recipient address?

I see a couple of issues:

  • fee_recipient is set by the signing key, so it just bypasses the withdrawal key with an extra step
  • You can delegate your validator operation to any operator by handing over the signing key. This proposal allows operators to steal the fund by setting fee_recipient (and thus the withdrawal address) to anyone they like
  • The payload’s fee_recipient is often not the proposer’s address. Mev-boost for example sets fee_recipient to the builder’s address
  • What do you do with the offline but not exited 0x00 validators that will never propose?