EIP-7002: Execution layer triggerable exits

Thanks for the pointer - looks like all but question 2 are answered! (“How much ETH can I withdraw from a validator before it’s exited?”)

TLDR: you can’t exit your validator using Partial Withdrawals, it is safe to use! :slight_smile:

Long answer:

There are two types of withdrawal requests, Full and Partial.

A full withdrawal is when the amount = 0, to indicate that the validator will be fully withdrawn and exit its duties as a validator.

A partial withdrawal is any withdrawal where amount > 0. This allows you to withdrawal any excess of 32 ETH balance that you have (e.g. if you validator has 35 ETH balance, you can withdrawal up to 3 ETH.) But even if you create the request with amount > 3, the protocol prevents you from dropping your balance lower than 32 ETH.

Reference (from process_withdrawal_request):

to_withdraw = min(
    state.balances[index] - MIN_ACTIVATION_BALANCE - pending_balance_to_withdraw,
    amount
)

For a validator to exit due to low balance, you would need to reduce your balance to be lower than EJECTION_BALANCE (currently 16 ETH).

Due to the constraints in process_withdrawal_request, you won’t be able to exit your validator by mistake using Partial Withdrawals. The only way to exit using withdrawals is using a Full Withdrawal.

Hopefully, this answers your question!

1 Like

Hi. Staking since genesis and 0x01 withdrawal address got compromised recently.
Please give us the ability to generate a new withdrawal address, currently if this EIP will pass my only option is to race against a hacker to try fetch the funds after a voluntary exit.

Not sure if this is the right place to ask, but is there a reason that the EIP-7002 (and other) system contracts are written in assembly, and not Solidity or Vyper?