Activation/Deactivation Queues

What happens in the activation queue?

Two steps done by Ethereum after funding your validator before it starts earning rewards:

  1. A constant ~16 hours before the validator is recognized by the consensus layer
  2. The activation queue is FIFO, so the more validators waiting to enter at this time, the longer your validator will spend in this queue. After this your validator starts earning rewards

What happens in the withdrawal queue?

Three steps done by Ethereum after submitting your validator for exit:

  1. The exit queue is FIFO, so the more validators that want to exit at this time, the longer your validator will spend in this queue. Your validator is still earning rewards during this time
  2. Then a ~27 hour "wait" period where your validator has exited but not yet ready for full withdrawal. The validator is offline and no longer receiving rewards
  3. Lastly, the withdrawal queue is processed in a Round Robin fashion in order of increasing validator index by an automatic sweep job on Ethereum. This could be a very short amount of time (minutes) if your validator is ready to withdraw when the sweep job is processing close to your validator's index, or a few days longer if the sweep job is further away from your validator.

How to retrieve the current queue times

Our ETH Network Overview endpoint returns estimates (in hours) for

  • activation queue
  • deactivation queue, broken down between exit (steps 1 and 2 above) and withdrawal (step 3 above)
{
  "activation_estimate": {
    "hours": 650
  },
  "exit_estimate": {
    "hours": 0
  },
  "withdrawal_estimate": {
    "hours_min": 27,
    "hours_max": 171
  }
}

This endpoint allows you to display to your users the estimates queue times they should expect when staking and unstaking ETH. This is what we display in the Figment App

In the screenshot above, we're using activationTimeDays on the left and minDeactivationTimeDays and maxDeactivationTimeDays on the right, as calculated below:

const hoursPerDay = 24;
const activationTimeDays = Math.round(response.activation_estimate.hours * 10) / hoursPerDay / 10;

const exitTimeHours = response.exit_estimate.hours;
const minWithdrawalTimeHours = response.withdrawal_estimate.hours_min;
const maxWithdrawalTimeHours = response.withdrawal_estimate.hours_max;

const minDeactivationTimeDays = Math.round((exitTimeHours + minWithdrawalTimeHours) * 10) / hoursPerDay / 10;
const maxDeactivationTimeDays = Math.round((exitTimeHours + maxWithdrawalTimeHours) * 10) / hoursPerDay / 10;

You can also track the activation, exit, and withdrawal estimates on a per-validator basis for all of your Figment-run validators with GET /validators!