Skip to content

Honest XvB economics: measured realization + win odds on both earnings surfaces - #874

Merged
VijitSingh97 merged 3 commits into
developfrom
feat/xvb-honest-economics
Aug 3, 2026
Merged

Honest XvB economics: measured realization + win odds on both earnings surfaces#874
VijitSingh97 merged 3 commits into
developfrom
feat/xvb-honest-economics

Conversation

@VijitSingh97

Copy link
Copy Markdown
Collaborator

What

The expected-vs-actual card and the XvB tier calculator both priced XvB's published per-tier estimate as income. Measured on production (30d ending 2026-08-02): wins paid ~19% of that face value, making the card read 54% while the P2Pool leg ran at 120% — and the calculator's Net/yr showed +2.97 XMR/yr for a tier measured at about −1.8.

The winners file we already mirror over Tor publishes the qualifier count per round, so both surfaces become honest with no new egress and no re-derivation of XvB's reward_calc:

  • parse_round_stats — second parse of the same fetched body: round-type frequencies, qualifier averages, span. Cached beside the reward estimates with the same XvB algo over-donates when the XvB stats fetch is stale/failing (no staleness guard) #311 staleness rule.
  • Expected wins — the card's "—" becomes a forecast: rounds-per-day ÷ qualifiers for the held tier (verified against production: predicted 0.84 whale wins/day, measured 0.84/day).
  • Measured realization — confirmed payouts within 2h of each settled win ÷ face value per win, ≥5 wins required. The earnings card's XvB leg and the calculator's Net/yr scale by it and label themselves (measured); until measurable, face value stands, labeled (face value) and described as an upper bound.
  • Draw line — each tier's win odds + qualifier count in the calculator, which also makes a single-qualifier tier (Mega, currently one donor winning 42% of rounds) self-evident.

Testing

Tier 1/2 per docs/dev/testing-strategy.md: parser bounds + aggregation, storage contract, forecast/realization/tempering unit tests, calculator payload tests, frontend logic + component render tests (271 node tests). Full suite + docs voice lint green; patch coverage 98%.

Docs: docs/dashboard.md updated for all three surfaces in house voice.

Closes #866. Closes #872.

🤖 Generated with Claude Code

VijitSingh97 and others added 3 commits August 2, 2026 21:42
The expected-vs-actual card folded XvB's published per-tier estimate into
expected at face value, and the tier calculator's Net/yr did the same — on a
production Whale box the card read 54% while the P2Pool leg ran at 120%, and
the calculator showed +2.97 XMR/yr for a tier measured at about -1.8.

The winners file we already mirror over Tor carries the qualifier count per
round, so both surfaces can be honest without new egress or re-deriving
reward_calc:

- parse_round_stats aggregates every round (one fetch, second parse): type
  frequencies, players averages, span.
- xvb_expected_wins_day forecasts wins/day for the held tier (verified against
  production: predicted 0.84/day, measured 0.84/day) — fills the wins row's
  expected cell.
- xvb_realization measures what wins actually paid (confirmed payouts within
  2h of each settled win vs face value per win); the earnings card's XvB leg
  and the calculator's Net/yr scale by it when >=5 wins are measurable, and
  say so; face value stands labeled as an upper bound otherwise.
- The calculator shows each tier's draw (win odds + qualifier count), which
  also makes a single-qualifier tier's fragility self-evident.

Closes #866. Closes #872.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@VijitSingh97
VijitSingh97 merged commit 167891c into develop Aug 3, 2026
16 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant