Skip to content
TraceFast Docs

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
ParameterInTypeNotes
periodquerystring, optional7d (default), 30d, 90d, 1y or all
groupByquerystring, optionalvalidator (default) or address
limitqueryinteger, optionalrows 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=address instead.
  • 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

FieldMeaning
chainId1
periodthe window asked for: 7d, 30d, 90d, 1y or all
windowDaysthe window in days. Absent for all
groupByvalidator or address
asOfSlotthe newest proposed slot in the window — what the leaderboard is current to
asOfTimethe time of that slot, RFC 3339 UTC
totalBlocksblocks proposed in the window — the denominator behind any share
distinctProposersdistinct validators that proposed in the window
validators[]the ranking when grouped by validator. Absent otherwise
addresses[]the ranking when grouped by address. Absent otherwise
unattributedBlocksonly 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

FieldMeaning
validatorIndexthe validator's index in the consensus registry
blocksProposedblocks it proposed in the window
withdrawalAddressthe execution-layer address its withdrawals are paid to, lowercase. Absent when its withdrawal credential names no address
credentialTypethe 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

FieldMeaning
withdrawalAddressthe payout address, lowercase
blocksProposedblocks proposed in the window by validators paying here
validatorshow many distinct validators paying here proposed in the window

Errors

StatuscodeWhendetails
400bad_requestperiod outside its five valuesreason: period_invalid, period
400bad_requestgroupBy outside validator / addressreason: group_by_invalid, groupBy
400bad_requestlimit outside 1..100reason: limit_out_of_range, maxLimit: 100
503service_unavailableno 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.


Last updated 22 Oct 2026, 08:06 UTC · verified against TraceFast v1.0.261 · Markdown