A fee is proposed on the partial "sweep" withdrawal of validators using 0x01 credentials, to improve stake consolidation and fairness. Ethereum's fast finality roadmap hinges on staking service providers migrating from 0x01 validators to 0x02 compounding validators. One roadblock is that 0x01 validators receive free-of-charge sweep withdrawals for balances exceeding 32 ETH, which consume protocol resources that are not accounted for. To address this, a 0.05% fee is imposed on the partial 0x01 sweep using a minimal modification to process_withdrawals(), applying the new constant WITHDRAWAL_FEE_FRACTION = 2000.
The roadmap for fast finality hinges on stake consolidation, where staking service providers (SSPs) transition from running 32-ETH validators with 0x01 credentials to compounding validators with 0x02 credentials. A roadblock to this transition is that 0x01 validators have been designed with close-to-ideal capital efficiency and free-of-charge partial withdrawals for balances exceeding 32 ETH (the "sweep" function). When factoring in switching costs, the incentives do not favor stake consolidation. At the same time, sweep withdrawals take up resources on both the consensus layer (CL) and execution layer (EL) that are not paid for. It is unsuitable to give 0x01 validators an accounting advantage over 0x02 validators when Ethereum's roadmap hinges on stakers consolidating their stake in 0x02 validators.
To improve consolidation while upholding fairness, this EIP accounts for the resource load of the 0x01 partial withdrawal sweep by imposing a small withdrawal fee for it. The proposed fee is 0.05% of the withdrawn amount, imposed via WITHDRAWAL_FEE_FRACTION = 2000. Since the average sweep withdrawal credits around 0.0235 ETH, the average expected fee per withdrawal is $0.0235\;\mathrm{ETH} \times 0.0005 = 11\,750\;\mathrm{Gwei}$. The total expected fee over one year for a validator is 0.00048 ETH, corresponding to around \$2 at the current ETH price. An SSP running 50,000 0x01 validators (slightly below 5% of the stake) would thus need to pay around \$100,000 per year in withdrawal fees.
The fee approximates the EL workload imposed by the sweep, under the average base fee over the last year (4.53 gwei). The withdrawal incurs equivalent to around 2204 gas (not accounting for CL work), implying a fee of $2204 \times 4.53 = 9\,984\;\mathrm{Gwei}$ (albeit, the base fee has been lower in recent months).
The fee is taken out on the CL as a percentage, since a fixed fee could produce extreme outcomes if the number of 0x01 validators were to be drastically reduced due to consolidation. In such a scenario, the sweep will hit validators more frequently, and the fee will thus be taken out more frequently. Since validators then would also withdraw a lower balance each time, the percentage fee on the withdrawal keeps the burden on stakers fixed.
| Constant | Value |
|---|---|
WITHDRAWAL_FEE_FRACTION |
2000 |
In process_withdrawals(), take out a fee for swept 0x01 validators that did not perform a full exit, burning it on the CL:
def process_withdrawals(state: BeaconState, payload: ExecutionPayload) -> None:
...
# In this existing for-loop, calculate a fee before decreasing the balance
for w in expected_withdrawals:
vi = w.validator_index
fee = 0
if not has_compounding_withdrawal_credential(state.validators[vi]) and w.amount != state.balances[vi]:
fee = w.amount // WITHDRAWAL_FEE_FRACTION
decrease_balance(state, vi, w.amount + fee)
Fast finality is best realized through a reduction to the active validator set voting each round. Two paths have been envisioned. In one path referred to as Orbit SSF, the active set rotates in a weighted fashion, such that large consolidated validators always are active, and smaller validators are active less frequently. In another path, there is a fixed number of validator seats, with only the largest validators (e.g., the top 8,192) granted a seat. Both paths require consolidation to achieve a desirable stake weight and optimal performance.
The cost per validator per year under 3% CL yield becomes $32 \times 0.03 / 2000 = 0.00048$ ETH, corresponding to around \$2 at a $4,167 ETH price. The table summarizes outcomes under different numbers of validators. A solo staker running one 0x01 is unlikely to consider the $2 fee enough to tip the scale either way. A staking service provider (SSP) running 50,000 0x01 validators (slightly below 5% of the stake) has at least a moderate incentive since the cost then is $100,000. Under perfect competition, the SSP will not be able to pass on this cost to their customers.
| Validators (stake %) | Cost (ETH/year) | Cost (USD/year) |
|---|---|---|
| 1 (~0.0001%) | 0.00048 | $2 |
| 100 (~0.01%) | 0.048 | $200 |
| 10,000 (~1%) | 4.8 | $20,000 |
| 50,000 (~5%) | 24 | $100,000 |
| 100,000 (~10%) | 48 | $200,000 |
The switching cost may still be greater than the yearly fee for an SSP. Some smart contracts requiring 0x01 credentials may be frozen and others may require a full exit and entry, with associated opportunity costs. However, once the recurring fee is in place and there is a commitment from the protocol to phase out 0x01 validators for SSPs—potentially even raising the fee until such an outcome has been realized—then the switch will have to be done eventually. Ignoring other potential benefits of 0x01 validators, a more accurate comparison is thus between the recurring fee and the capital cost for financing the switch, which of course is lower.
The gas cost accounting is as follows:
It can be noted that we are not with this accounting charging for the CL work that 0x01 validators impose due to the sweep. We are neither charging 0x02 validators for the CL work of EL-triggered partial withdrawals via EIP-7002, but they are charged more extensively on the EL for triggering the withdrawal.
Besides free withdrawals, another benefit of 0x01 validators is the capital efficiency. A compounding 0x02 validator will on average have 0.75 ETH sitting idle, not counting toward the effective balance. This is due to the current hysteresis design, where a validator that gradually increases its balance will hold between 0.25 to 1.25 more ETH than their effective balance. A 0x01 will on average have just $0.0235/2 = 0.01175$ ETH idle, and are thus much more capital-efficient, particularly when the 0x02 validator holds a moderate balance overall.
A 0x02 validator can on the other hand leverage the hysteresis and make a partial withdrawal once having reached a 33 ETH effective balance, such that they only need to hold 32.75 ETH while still being able to hold onto the 33 ETH effective balance. The viability of this strategy under the current protocol then becomes a matter of withdrawal fees, which currently are rather low.
The current design discrepancies pertaining to capital efficiency are best addressed separately, with an EIP in development. The point to highlight here is that the proposed staking fee is even more important when we consider the current capital inefficiency of compounding 0x02 validators.
0x02 validatorsIt can be noted that 2048-ETH validators are exempted in the specification from the sweep withdrawal fee, to avoid harming consolidation, and as an acknowledgement that 2048 ETH is the maximum stake that the protocol currently is designed to handle.
To the best of the authors' knowledge, there are no security risks associated with the proposed fee.
Copyright and related rights waived via CC0.