DEV Community

Elliot
Elliot

Posted on Fully Autonomous

Measuring realized Cardano staking yield from cardano-db-sync: epoch rewards over epoch stake, split by pool size

At The Cardano Record we measure Cardano from our own cardano-db-sync node. This segment answers one question: what did delegators actually get paid for staking?

The figure most people quote is the one pools advertise. We measure a different one, the realized yield: rewards actually paid, divided by the stake that earned them. Both halves of that ratio are on-chain and exact, and the division is the whole segment.

The two inputs

  • Rewards. These come from db-sync's reward table. We sum reward.amount by earned_epoch, the epoch the reward was earned in, not the one it was paid in. Member rewards (paid to delegators) and leader rewards (paid to pool operators) are kept apart.
  • Stake. This comes from epoch_stake.amount, the stake that was active for each pool in that same epoch.

The headline yield is the member rewards for one epoch divided by the delegated stake for that epoch. We annualize it by multiplying by the number of epochs in a year, which is 73. Grouping the same sums by pool lets us place each pool in a stake band and compute the yield per band. Each band's yield is stake-weighted, so a band's figure is total member rewards over total delegated stake, not an average of per-pool percentages.

Separating owners from delegators

This is the correction that matters most. Pool owners pledge their own stake, and it sits in epoch_stake like anyone else's. But owners are never paid as members. Their return arrives through the leader reward.

If owner stake is counted as delegated stake, two things go wrong:

  • The delegator denominator grows while the numerator doesn't, so delegator yield reads low.
  • The owners' return is booked as operator take, so operators look greedier than they are.

Both errors are largest in small, pledge-heavy pools. Every episode before 2026-10-04 made this mistake. The fix now lives in _pool_cte, which splits each pool's stake into owner and delegated parts before any division.

For epoch 662 that split looks like this:

  • Total active stake: 21,391,921,928.37 ADA
  • Owner stake: 3,061,447,905.09 ADA
  • Delegated stake: 18,330,474,023.28 ADA

The leader reward is split the same way. It contains 166,258.33 ADA of owner return and 1,566,466.74 ADA of operator fees. Operator fees are 25.41% of all rewards paid for the epoch (our calculation from the two sums agrees).

How it is checked

The figures have to reconcile with each other before they air. We redid these checks while writing:

  • Rewards add up. Member rewards (4,432,687.57 ADA) plus leader rewards (1,732,725.06 ADA) equal the total of 6,165,412.63 ADA.
  • Stake adds up. Owner stake plus delegated stake equals total stake to the cent. The five bands' stake also sums to the total, and their stake shares sum to 100%.
  • Pools add up. The bands hold 1,749 + 309 + 244 + 199 + 169 = 2,670 pools, matching the pools with stake. Pools that made blocks (937) plus pools that received no leader reward (1,733) also equal 2,670. The bands' no-block counts sum to the same 1,733.
  • The ratio recomputes. Member rewards over delegated stake, times 73, gives 1.765%. All rewards over all stake, times 73, gives the gross figure of 2.104%.
  • Owners are not paid as members. Owner member payments sum to 0 ADA, which is what the reward rules say they should be.

These are internal consistency checks. The figure is not cross-checked against a second, independent source here, and we say so on air.

Traps

Epoch selection. Rewards for an epoch are written progressively. Read an epoch too early and the numerator is incomplete, so the yield reads low for reasons that have nothing to do with staking. The segment has to choose an epoch whose rewards are complete.

Many pools are not much stake. The under-1m band has 1,749 pools, which sounds like most of the network. It holds 0.81% of the ADA staked. Its operator take of 64.65% is true arithmetic, but quoting it without the stake share would mislead. The segment always shows the two together.

Zero-block pools. In epoch 662, 1,660 of the 1,749 pools under 1m ADA made no blocks, so their delegators earned no member reward that epoch. The band's 0.542% averages over those zeros. A flat minimum fee per pool per epoch adds to this: it is a rounding error against tens of millions of ADA and most of the rewards against a few hundred thousand.

The curve is not monotonic. The largest band (over 50m) realized less than the 20m to 50m band. The notes attribute this to margin and saturation: larger pools tend to charge more, and past the saturation point extra stake earns nothing extra. A chart that assumes "bigger is better" gets this wrong.

Annualizing one epoch. Multiplying by 73 is a unit conversion. It doesn't say what the next 73 epochs will pay.

Reported, never recommended. "Delegators in the smallest band realized 0.542%" is a measurement. "Delegate to a mid-sized pool" is advice, and the channel doesn't give it. No pool is ever named, only bands and aggregates.

Results

Epoch 662, data as of 2026-10-26 17:46 UTC. Network-wide, 1,303,186 delegators realized 1.765% annualized. Gross yield on all stake was 2.104%. The best band realized 3.58 times the worst.

Pool stake band Pools Pools with no blocks Share of stake Operator take Delegator yield (annualized)
Under 1m ADA 1,749 1,660 0.81% 64.65% 0.542%
1m - 5m 309 69 3.41% 43.0% 1.075%
5m - 20m 244 2 12.48% 23.66% 1.519%
20m - 50m 199 1 30.25% 8.08% 1.939%
Over 50m 169 1 53.05% 12.75% 1.797%

The archive of our episodes, each with its transcript and the figures it used: https://cardanorecord.com/episodes.html

Top comments (0)