Block-proposal leaderboard
See the top block proposers in TraceFast →
Which validators proposed the most blocks over a window — or, grouped by withdrawal address, which payout addresses the proposals of their validators sum to. In Ethereum's proof of stake, every slot (12 seconds) assigns one validator the duty to propose the block; see the Ethereum proof-of-stake docs.
GET https://tracefast.xyz/api/v1/chains/1/consensus/proposers
| Parameter | In | Type | Notes |
|---|---|---|---|
period | query | string, optional | 7d (default), 30d, 90d, 1y or all |
groupBy | query | string, optional | validator (default) or address |
limit | query | integer, optional | rows to return, 1..100, default 20 |
Access — an API key on the Intelligence plan or higher (plans), or no key at all: pay per call with x402 at the same path on https://mpp.tracefast.xyz/api/v1, at the price its 402 states. As a tool for AI agents: get_block_proposers on the MCP server. Stable — see stability.
chains/1 is a literal: the method serves Ethereum mainnet data. Other chain
ids answer 404 chain_not_supported, and an unknown query parameter is refused
rather than ignored.
What it covers, and what it does not
- The proposer is the validator whose duty the slot was — never the block's fee recipient, which is usually a builder or a relay, a different party.
- A withdrawal address is a payout destination, not an operator. The largest one on mainnet is a staking pool's vault funded by unrelated depositors. Nothing here names or claims an operator.
- The two groupings rank different sets. The leading validator proposes a
handful of blocks a week; the leading withdrawal address sums thousands over
thousands of validators. Collapsing the per-validator list by address does not
produce the address ranking — ask for
groupBy=addressinstead. - Counts of proposed blocks only — no rewards, no MEV, no yield.
Response
200 application/json, here with ?limit=3 (grouped by validator):
{
"data": {
"chainId": 1,
"period": "7d",
"windowDays": 7,
"groupBy": "validator",
"asOfSlot": 15186560,
"asOfTime": "2026-09-10T17:52:23Z",
"totalBlocks": 50138,
"distinctProposers": 40483,
"validators": [
{
"validatorIndex": 2236426,
"blocksProposed": 9,
"withdrawalAddress": "0x4aafdb911085dd7703e57951279744dd713f744d",
"credentialType": 2
},
{
"validatorIndex": 1988499,
"blocksProposed": 8,
"withdrawalAddress": "0xfc1dc93c70576684ceae71213c6cbd39bd9ea16f",
"credentialType": 2
},
{
"validatorIndex": 2001019,
"blocksProposed": 8,
"withdrawalAddress": "0x07706faf6607365d0832618fe632925f28e5ff34",
"credentialType": 2
}
]
},
"meta": {
"chain": "ethereum",
"timestamp": 1789063605024,
"cached": false,
"docs": "https://docs.tracefast.xyz/api/consensus-proposers"
}
}With ?groupBy=address&period=30d&limit=3 the ranking is by payout address:
{
"data": {
"chainId": 1,
"period": "30d",
"windowDays": 30,
"groupBy": "address",
"asOfSlot": 15186560,
"asOfTime": "2026-09-10T17:52:23Z",
"totalBlocks": 215166,
"distinctProposers": 143907,
"addresses": [
{
"withdrawalAddress": "0xb9d7934878b5fb9610b3fe8a5e441e8fad7e293f",
"blocksProposed": 45661,
"validators": 42290
},
{
"withdrawalAddress": "0x8e609ac80f4324e499a6efd24f221a2caa868224",
"blocksProposed": 17098,
"validators": 12173
},
{
"withdrawalAddress": "0x7e2a2fa2a064f693f0a55c5639476d913ff12d05",
"blocksProposed": 3092,
"validators": 2859
}
],
"unattributedBlocks": 1386
},
"meta": {
"chain": "ethereum",
"timestamp": 1789063605744,
"cached": false,
"docs": "https://docs.tracefast.xyz/api/consensus-proposers"
}
}data
| Field | Meaning |
|---|---|
chainId | 1 |
period | the window asked for: 7d, 30d, 90d, 1y or all |
windowDays | the window in days. Absent for all |
groupBy | validator or address |
asOfSlot | the newest proposed slot in the window — what the leaderboard is current to |
asOfTime | the time of that slot, RFC 3339 UTC |
totalBlocks | blocks proposed in the window — the denominator behind any share |
distinctProposers | distinct validators that proposed in the window |
validators[] | the ranking when grouped by validator. Absent otherwise |
addresses[] | the ranking when grouped by address. Absent otherwise |
unattributedBlocks | only when grouped by address: blocks whose proposer has no withdrawal address, so no address can claim them. Reported as a count, never bucketed under a placeholder address |
A validator row
| Field | Meaning |
|---|---|
validatorIndex | the validator's index in the consensus registry |
blocksProposed | blocks it proposed in the window |
withdrawalAddress | the execution-layer address its withdrawals are paid to, lowercase. Absent when its withdrawal credential names no address |
credentialType | the withdrawal credential prefix: 0 (BLS, no address), 1 (execution address) or 2 (compounding). Absent when the registry does not know the validator |
An address row
| Field | Meaning |
|---|---|
withdrawalAddress | the payout address, lowercase |
blocksProposed | blocks proposed in the window by validators paying here |
validators | how many distinct validators paying here proposed in the window |
Errors
| Status | code | When | details |
|---|---|---|---|
| 400 | bad_request | period outside its five values | reason: period_invalid, period |
| 400 | bad_request | groupBy outside validator / address | reason: group_by_invalid, groupBy |
| 400 | bad_request | limit outside 1..100 | reason: limit_out_of_range, maxLimit: 100 |
| 503 | service_unavailable | no proposal is recorded in the window yet; retry later | — |
Malformed input, unknown parameters and the key check's 401/403/429 are the same for every method — see conventions and API keys.
Related pages
- Withdrawals of a validator — the payouts of one validator from this list
- Validator queues now — the activation and exit queues
- Validator queues over time — the queues as a daily series
- Validators — the same leaderboard, read in the app
Last updated 22 Oct 2026, 08:06 UTC · verified against TraceFast v1.0.261 · Markdown