Income
Find the daily income and APR of active validators on Beacon Chain.
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)
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 in the event that 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 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.
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.
Retrieve the daily income and APR of the validator by validator_index
.
Table Columns
Column Name | Description | Example |
---|---|---|
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 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 |
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