Income

Find the daily income and APR of active validators on Beacon Chain.

The beacon.validator.income table provides a daily snapshot of consensus & execution layer income (MEV rewards) of active validators.

Consensus Layer Income

Effectively, validator balances on Beacon Chain can only change due to the following events:

  • rewards (attestation, block proposing)

  • penalties (attester slashing, proposer slashing)

  • deposits (from ETH1 - aka execution layer)

  • withdrawals (to ETH1, if withdrawal address is specified)

Source: https://kb.beaconcha.in/rewards-and-penalties

Thus, the consensus layer income from rewards and penalties accrued at the end of the day can be derived from the following calculation

consensus_income = current_balance - previous_balance - current_deposits - current_withdrawals

Where current_ refers to deposits, withdrawals made at the same day of the balance snapshot and previous_ is the last balance snapshot.

Note: Income can be negative in the event where the validator is slashed. Exiting validators are not included in the calculation.

Execution Layer Income

Execution Layer Income of the validator is dependent on whether there is proposer-builder separation (PBS).

  • PBS Blocks: These are blocks where by the builder sends a MEV payout to the Proposer Fee Recipient (block proposer), which typically happens in the last transaction of a block.

  • Non-PBS Blocks: For blocks that do not have build -> proposer MEV payout, the execution layer income will be the total builder priority fee reward from transactions + the total direct ETH transferred to block builders.

Assumptions

  • the proposer fee recipient (MEV Reward) on Execution Layer is same entity as the Validator that is proposing the block on Consensus Layer.

i.e. in the following example, Validator = 711548 proposed this block and would be the recipient of MEV Rewards. Note that the withdrawal address of the validator can be different from proposer fee recipient.

Sample Query

Finding daily income of active validators by ETH1 withdrawal_address specified in withdrawal credentials.

select
    date(slot_timestamp) as date,
    count(distinct validator_index) as validators, -- active validators 
    sum(total_income) as total_income -- daily total income 
from beacon.validator.income 
where withdrawal_address = '0x210b3cb99fa1de0a64085fa80e18c22fe4722a1b' -- Kraken Withdrawal
group by 1
order by 1 desc

Retrieve the daily income and apr of validator by validator_index.

select 
slot_timestamp, validator_index, total_income, consensus_income, execution_income
from beacon.validator.income 
where validator_index = 10 

Table Columns

Column NameDescriptionExample

slot_number

Slot number of the balance snapshot.

6,411,598

slot_timestamp

Slot timestamp of balance snapshot.

2023-05-10 23:59:59

validator_index

Unique index of the validator.

459,015

total_income

Total income = consensus + execution income

0.002814952

consensus_income

Consensus layer (Beaon Chain) income.

0.002814952

execution_income

Execution layer income, if validator proposed block and block miner sent MEV rewards in the block proposed.

0

execution_income_pbs

PBS blocks income - MEV payout transfer from block builder to proposer fee recipient.

0

execution_income_non_pbs

Non-PBS blocks income - assuming that there is no MEV payout in that transaction.

0

income_7d

7 day validator income to the current slot_timestamp.

0.019833533

income_30d

30 day validator income to the current slot_timestamp.

0.084810516

income_90d

90 day validator income to the current slot_timestamp.

1.94E-01

apr_7d

Estimated APR based on income in the last 7 days. Where APR_7D = income_7d/sum_effective_balance_7d/365.25*100

3.234016932

apr_30d

Estimated APR based on income in the last 30 days.

3.226775101

apr_90d

Estimated APR based on income in the last 90 days.

4.439010365

current_balance

Balance of the validator at current date timestamp.

32.00094938

previous_balance

Balance of the validator at previous date timestamp.

32.01058424

withdrawal_amount

Total ETH withdrawn at the current date. Null if no withdrawals were made for the day.

0.012449812

deposit_amount

Total ETH deposit at the current date. 0 if no deposits were made for the day.

0

status

Current status of the validator. Note that only active validators are included.

active_ongoing

is_slashed

Was validator slashed (not longer active).

FALSE

pubkey

The validator's BLS public key, uniquely identifying them. 48-bytes, hex encoded with 0x prefix, case insensitive.

0x9373298f965025e074c6be92d38e5e3d6049dcad80546f81ea1859e694f3f147d85918a4e87341a294cedf9c29165c90

withdrawal_prefix

The first byte of this credential is known as the withdrawal prefix. This value is currently either 0x00 or 0x01.

0x01

withdrawal_address

ETH1 Withdrawal address specified in withdrawal credentials, applicable for validators with 0x01 withdrawal credentials only.

0x94e69f03d5d02acbab4b22747a064103fb6b6be0

current_effective_balance

Effective staked balance of the validator at current date.

32

previous_effective_balance

Effective staked balance of the validator at previous date.

32

unique_id

Unique ID of the income entry

date-2023-05-10_validator_index-459015

slot_change

Slot change from the previous date to the current date.

7,200

Last updated