-
-
Published
Linked with GitHub
# Adding EL-initiated consolidations to EIP-7002 machinery
EIP-7251 adds a notion of "consolidation" so that two 32 ETH validators can combine into a single validator with higher balance. See EIP-7251 for further details and motivation.
The EIP currently specifies in-protocol consolidation as a consensus-layer operation, and after talking to various staking pools on mainnet, it has become clear that offering this same functionality from the execution layer is desirable.
A direct way to do this is to extend EIP-7002 with a consolidation operation, just like the exit and withdrawal functionality it currently supports.
From EIP-7251, the consensus layer operation looks like this:
```python=
class Consolidation(Container):
source_index: ValidatorIndex
target_index: ValidatorIndex
epoch: Epoch
```
To support this message via EIP-7002, the EIP-7002 message type would need to be extended. The current message type looks like this:
```python=
RLP([
source_address,
validator_pubkey,
amount
])
```
where `source_address` is the sender on the EL, `validator_pubkey` is the public key of the validator the message intends to effect, and the `amount` is the amount of ETH to exit or withdraw. Note, withdrawing the full balance of a validator is interpreted as an exit.
To support consolidations, one possible implementation extends the message type:
```python=
RLP([
operation_byte,
operation_parameters
])
```
where a byte prefix `operation_byte` is used to disambiguate the following data `operation_parameters`.
If `operation_byte == 0x00`, `operation_parameters` are `[source_address, validator_pubkey, amount]`.
If `operation_byte == 0x01`, `operation_parameters` are `[source_address, source_pubkey, destination_pubkey]` to match the parameters of the CL `Consolidation` operation.
If we go this route, we would need to update the EIP-7002 predeploy to accomodate this additional flexibility and also consider the rate-limiting strategy, as we may want different rate limits for one operation type other another. The simplest way to handle is to keep the status quo and have the 1559-style mechanism apply to any operation type, regardless of its identity.