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

Consensus Layer Income

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

  • rewards (attestation, block proposing, sync committee rewards)

  • penalties (attester slashing, proposer slashing)

  • deposits (from ETH1 - aka execution layer)

  • withdrawals (to ETH1, if the 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 on the same day of the balance snapshot and previous_ is the last balance snapshot.

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

For granular consensus income data, please query beacon.validator.consensus_income model - this table provides slot-level consensus income from attestations, block proposing and sync committee reward paritcipation.

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 the builder sends an 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 the Execution Layer is the same entity as the Validator that is proposing the block on the 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 the proposer fee recipient.

Block Proposed by 711548, receiving 0.0407 ETH in MEV rewards: https://etherscan.io/block/17667807#mevinfo

Execution Income Pre-Merge

Before the Ethereum merge, there was no execution (L1) income for validators because validators on the Beacon Chain did not propose blocks. Block proposals and transaction execution were managed by miners on the Ethereum mainnet (proof-of-work chain).

Post-merge, Ethereum switched to proof-of-stake, where Beacon Chain validators propose blocks built by block builders on the execution chain. Execution income, including MEV rewards, is mapped from these blocks to validators.

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

https://app.allium.so/s/I50cFs9M

Retrieve the daily income and APR of the validator by validator_index.

select 

slot_timestamp, validator_index, total_income, consensus_income, execution_income

from beacon.validator.income 

where validator_index = 10 

https://app.allium.so/s/2nJ185bE

Table Columns

Column NameDescriptionExample
slot_numberSlot number of the balance snapshot.6,411,598
slot_timestampSlot timestamp of balance snapshot.2023-05-10 23:59:59
validator_indexUnique index of the validator.459,015
total_incomeTotal income = consensus + execution income0.002814952
consensus_incomeConsensus layer (Beaon Chain) income.0.002814952
execution_incomeExecution layer income, if validator proposed block and block miner sent MEV rewards in the block proposed.0
execution_income_pbsPBS blocks income - MEV payout transfer from block builder to proposer fee recipient.0
execution_income_non_pbsNon-PBS blocks income - assuming that there is no MEV payout in that transaction.0
income_7d7 day validator income to the current slot_timestamp.0.019833533
income_30d30 day validator income to the current slot_timestamp.0.084810516
income_90d90 day validator income to the current slot_timestamp.1.94E-01
apr_7dEstimated APR based on income in the last 7 days. Where APR_7D = income_7d/sum_effective_balance_7d/365.25*1003.234016932
apr_30dEstimated APR based on income in the last 30 days.3.226775101
apr_90dEstimated APR based on income in the last 90 days.4.439010365
current_balanceBalance of the validator at current date timestamp.32.00094938
previous_balanceBalance of the validator at the previous date timestamp.32.01058424
withdrawal_amount

Total ETH withdrawn for the validator at the current date.

This will be 0 if no withdrawals are made for the day.

0.012449812
deposit_amount

Total ETH deposit for the current validator at the current date.

This will be 0 if no deposits were made for the day.

0
statusCurrent status of the validator. Note that only active validators are included.active_ongoing
is_slashedWas validator slashed (not longer active).FALSE
pubkeyThe validator’s BLS public key, uniquely identifying them. 48-bytes, hex encoded with 0x prefix, case insensitive.0x9373298f965025e074c6be92d38e5e3d6049dcad80546f81ea1859e694f3f147d85918a4e87341a294cedf9c29165c90
withdrawal_prefixThe first byte of this credential is known as the withdrawal prefix. This value is currently either 0x00 or 0x01.0x01
withdrawal_addressETH1 Withdrawal address specified in withdrawal credentials, applicable for validators with 0x01 withdrawal credentials only.0x94e69f03d5d02acbab4b22747a064103fb6b6be0
current_effective_balanceEffective staked balance of the validator at current date.32
previous_effective_balanceEffective staked balance of the validator at previous date.32
unique_idUnique ID of the income entrydate-2023-05-10_validator_index-459015
slot_changeSlot change from the previous date to the current date.7,200