Introduction

Ether Withdrawal Flow

Restaked Ether (reETH) withdrawals have four stages:

  1. reETH holders request a withdrawal.

  2. A daily ETH rebalance occurs, transferring ETH from the deposit pool to the withdrawal queue to fulfill pending withdrawals. If the deposit pool lacks sufficient ETH to cover pending withdrawals, the protocol selects validators for exit, starting with the oldest validators from the operator with the highest utilization.

  3. Selected operators exit these validators.

  4. Validator exits are verified on the EigenPod, and following the withdrawal delay, the ETH is moved into the withdrawal queue to pay the outstanding balance of the pending withdrawals from the first step.

This means that operators need a way to react quickly to protocol requests.

The suggested method is to generate and sign exit messages ahead of time which will be sent out when needed by a special daemon called the Validator Ejector.

Validator Ejector

The Validator Ejector is a daemon service which monitors RioLRTOperatorRegistry events and initiates an exit when required.

In messages mode, on start, it loads exit messages in form of individual .json files from a specified folder or an external storage and validates their format, structure and signature.

It then loads events from a configurable amount of latest finalized blocks, checks if exits should be made and after that periodically fetches fresh events.

In webhook mode, it simply fetches a remote endpoint when an exit should be made, allowing to implement JIT approach by offloading exiting logic to an external service and using the Validator Ejector as a secure exit events reader.

Github Repository

Custom Solution

If you prefer to use custom exit automation software, rather than the Validator Ejector, you MUST listen for the following event on the RioLRTOperatorRegistry contract, which will inform your software which validator(s) to exit:

event ETHDepositsDeallocated(uint8 indexed operatorId, uint256 depositsDeallocated, bytes pubKeyBatch)
  • operatorId: Your assigned operator ID. You should only take action on events that include your operator ID.

  • depositsDeallocated: The number of validators that must be exited.

  • pubKeyBatch: The concatenated public key(s) of the validator(s) that must be exited.

Please review the example from the Validator Ejector, which listens for and parses these events.

The RioLRTOperatorRegistry address can be found here.

Last updated