Skip to main content

Ethereum Validator Lifecycle

Introduction

important

"A validator is an entity that participates in the consensus of the Ethereum proof-of-stake protocol." consensus-specs

This guide explains each of the different validator statuses, and how they relate to the validator lifecycle, including Figment-specific statuses reported by the Validator API.

During their operation, the status of Ethereum validators will change as necessary to reflect their current state. The details of any validator provisioned by Figment can be viewed using the Validator API. Along with other important information relevant to that validator, the status is included in the validator's attributes.

note

... indicates where the Validator API response was trimmed for display

{
...
"type": "validator",
"attributes": {
"id": 32,
"pubkey": "d1ef8d468ef53d82368d2026e321ab2c6d44f44c33b7b9f22369bf6dcf37fb0208f82dd6b485325ce1bbf5aec7ad45bb",
"name": null,
"withdrawal_credentials": "010000000000000000000000fc438e6cc4b230eb5bfaae1337c3f5da2b9140f1",
"amount": 32000000000,
"signature": "aab7e3b41689fced6c3437a6bc5caf471ed319b94ad2642c47c5f641d5e3a046432171d47d48cd7a3e8a323939d4976c1315ad4dae134c421214673ddff9105ef1bb7f79c1babc6cd9c31428d5e44472164e9c9fccfd10fb9768c0855b194f49",
"deposit_data_root": "b2f5083221d6b61f2237af155c07c746f6a75c7d24dfe418106efdf87e9b9422",
"deposit_message_root": "026cbefa013e03a3d81592b7a5f6205773c12a6f7674529e497e9a4eb2df2d44",
"fork_version": "00001020",
"eth2_network_name": "goerli",
"status": "deposited",
"deposit_cli_version": "1.2.0",
"status_synced_at": "2023-02-03T15:00:21.420Z",
"status_history": [
{
"status": "funding_requested",
"changed_at": "2023-01-04T16:00:14.459Z"
}
],
...
}

Slashing

  • Slashing is a major penalty which occurs when a validator acts maliciously, not following the rules of the network particularly by double-signing. Cases of slashing penalties for being offline and missing attestions are much less severe, typically amounting to the same as the potential rewards for that period.

  • Figment takes a proactive stance of Safety Over Liveness, preventing slashing events by optimizing uptime instead of maximizing uptime.

Withdrawal Address

  • The Ethereum address where validator rewards are sent automatically or when the validator deposit is withdrawn. The deposited 32 ETH (minus any outstanding slashing penalties) will be returned to the withdrawal address when the validator exits.

Withdrawal Credentials

  • Validators possess a withdrawal credential beginning with either 0x01 or 0x00. This value is set by the deposit tool when a deposit is made. In summary, a 0x01 credential is needed to enable withdrawal of the deposited ETH and earned consensus layer rewards to the withdrawal address. 0x00 credentials can be upgraded with the ethdo CLI tool.

Epochs

The specific epochs used to determine a validator status are:

  • activation_eligibility_epoch When the criteria for activation were met
  • activation_epoch When the validator is/was scheduled to activate. May change while the validator is in the activation queue
  • exit_epoch When the validator is/was scheduled to exit. May change while the validator is exiting
  • withdrawable_epoch When the validator can withdraw funds

Validator Lifecycle

A validator proposes and attests to new blocks on the Ethereum network, gaining ETH rewards for completing their duties and securing Ethereum. In practicality, validators are comprised of signing keys, withdrawal credentials and other implementation details. The entity which controls the validator via the signing keys is the Validator Operator. The software and hardware which connect to Ethereum are commonly referred to as the Validator Client, or VC.

Validators provisioned by Figment can remain un-funded until use, however validators are not registered and cannot participate in the network without proof of depositing 32 ETH to the deposit contract.

Once a deposit is confirmed, the validator enters an activation queue and ultimately becomes an active participant in the network.

The active set is comprised of validators currently active and participating in the consensus and security of Ethereum. While a validator is performing, its effectiveness can be impacted by node uptime among other factors. In the event of a significant slashing, validators can be removed from the network and forfeit some or all of the deposited ETH. Validators exiting the active set are still responsible for attestations and should remain online and active to avoid slashing penalties.

Including rewards which accumulated prior to the Shapella upgrade, balances in excess of the 32 ETH deposit will be automatically distributed to the respective withdrawal address for each validator. This is a round-robin process which currently averages approximately one week to cover the entire active set.

Validators provisioned and operated by Figment can exit the network voluntarily, using a pre-signed exit transaction.

important

Pre-signed exit transactions ensure that clients can exit their validators at any time, independently of Figment's infrastructure. These exit transactions require clients to supply Figment with appropriate encryption keys. If you are interested in using pre-signed exit transactions, please contact the Sales team via sales@figment.io

Provision

  • For staking multiples of 32 ETH, Figment provides secure and managed validators by request. Until a provisioned validator is funded by a 32 ETH deposit, it remains inactive and is not registered as a validator on Ethereum.
  • Note: Figment maintains a maximum of 300 un-funded validators per withdrawal address. The eth2_staking/provision endpoint of Figment's Validator API can be used to provision a maximum of 100 validators per call.

Request an Ethereum validator to be provisioned using Figment's Validator API. When the provisioning operation is complete, the validator status will be:

StatusDescription
provisionedFigment specific Indicates that a validator has been created by Figment and is available for funding....

Deposit

This is the beginning of the validator lifecycle. During the deposit process, possible statuses are:

StatusDescription
funding_requestedFigment specific Indicates that a funding request has been made for a validator and the deposit is not yet confirmed.
depositedFigment specific When a deposit has been confirmed, the validator can enter the activation queue.

Pending

StatusDescriptionCondition
pending_initializedWhen the validator is funded and has not yet entered the activation queue.validator.activation_eligibility_epoch == FAR_FUTURE_EPOCH
pending_queuedWhen the validator is in the activation queue. The speed of the activation (and withdrawal) queues are dependent on the number of active validators.(validator.activation_eligibility_epoch < FAR_FUTURE_EPOCH) and (validator.activation_epoch > current_epoch)

Active

While validators are in the active set:

StatusCondition
All Activevalidator.activation_epoch <= current_epoch < validator.exit_epoch
StatusDescriptionCondition
active_ongoingHealthy validator status, indicating an operational validator which is participating in the active set and earning rewards.(validator.activation_epoch <= current_epoch) and (validator.exit_epoch == FAR_FUTURE_EPOCH)
active_exitingWhen a validator has requested to exit the active set, its status becomes active_exiting.(validator.activation_epoch <= current_epoch) and (current_epoch < validator.exit_epoch < FAR_FUTURE_EPOCH) and (not validator.slashed)
active_slashedWhen a validator is still part of the active set but has been slashed. A slashed validator cannot perform a voluntary exit.(validator.activation_epoch <= current_epoch) and (current_epoch < validator.exit_epoch < FAR_FUTURE_EPOCH) and validator.slashed

Exited

This is the end of the validator lifecycle. While validators are exiting the active set:

StatusCondition
All Exits(validator.exit_epoch <= current_epoch < validator.withdrawable_epoch)
StatusDescriptionCondition
exited_unslashedWhen a validator has no slashing penalties and has voluntarily exited the active set. This occurs when making a full withdrawal.(validator.exit_epoch <= current_epoch < validator.withdrawable_epoch) and (not validator.slashed)
exited_slashedWhen a validator has been removed from the active set and has slashing penalties.(validator.exit_epoch <= current_epoch < validator.withdrawable_epoch) and validator.slashed

Withdrawal

StatusDescriptionCondition
withdrawal_possibleIndicates that a withdrawal can be performed, as the validator has exited the active set.(validator.withdrawable_epoch <= current_epoch) and (balance != 0)
withdrawal_doneIndicates that a full withdrawal of the deposited 32 ETH to the withdrawal address has been completed for this validator.(validator.withdrawable_epoch <= current_epoch) and (balance == 0)

References