Metacenter

How data is cross-checked

Every distribution is recomputed independently from contract state.

The indexer never uses the deprecated contract-events endpoint. For each distribution it takes three steps:

Find the block

The calculation height of distribution k is fixed: first burn height + (k + 1) × 1,050 − 1. The indexer binary-searches Stacks blocks for the first one whose state has last-reward-compute-height ≥ that height, reading historical state with Hiro's call-read ?tip=.

Read the event

It takes the calculate-rewards transaction in that block and reads the exact figures from its calculate-rewards and bond-distribution print events.

Recompute from state

It reads pox-5 state just before and just after that block:

  • the reserve delta, which must equal the deposit exactly
  • rewards-per-token × shares, for STX-only stakers and each bond

Results so far

DistributionCycleGross poolPaid to bondsReserve depositDifferences vs eventMatch
282141162,018,760 sats0 sats24,302,814 satsgross -1, reserve 0, stx -1, bonds 0yes
283141188,232,684 sats0 sats28,234,902 satsgross -1, reserve 0, stx -1, bonds 0yes
284142217,098,316 sats0 sats32,564,747 satsgross -1, reserve 0, stx -1, bonds 0yes
285142233,931,905 sats0 sats35,089,785 satsgross -1, reserve 0, stx -1, bonds 0yes
286143230,327,835 sats13,810,222 sats32,477,641 satsgross -2, reserve 0, stx -1, bonds -1yes

The differences come from integer truncation in rewards-per-token: at most 1 sat per product.

Edit on GitHub

On this page