# BetFury "Provably Fair" — Independent Audit **BetFury advertises a 99.02% RTP on its in-house Original games and calls them "provably fair."** This repository holds the complete evidence behind the ProvablyFair.org investigation of three of those games — Limbo, Dice and Plinko: **240,000 real bets**, of which **180,000 instrumented rounds are verified one-by-one against BetFury's own cryptographic commitments**, plus a 60,000-bet exploratory capture published as corroboration. | Game | Measured RTP | Advertised | Deviation | | |------|:---:|:---:|:---:|---| | **Limbo** | **97.326%** | 99.02% | **−1.69 pts** | win rate 88.478% vs the displayed 90.018% — **12.58σ below the game's own odds** | | Plinko | 99.008% | 99.02% | −0.01 pts (−0.02σ) | consistent with advertised | | Dice *(control)* | 99.393% | 99.02% | +0.37 pts (+0.92σ) | consistent with advertised | **Limbo's sample house edge is ~2.7× the advertised rate.** Dice and Plinko — measured the same way, at the same time, on the same account — land on their advertised mathematics, so the rig that finds Limbo short finds the controls on target: the deficit is specific to Limbo, not a measurement artifact. The shortfall is serially independent (a skewed payout distribution, not a streaky RNG), and it appeared twice: an earlier 60,000-bet exploratory run at a 2.00× target returned **97.890%** with one instant bust every **29** bets against one-in-**51** expected. 📄 **Read the full report** at [ProvablyFair.org](https://provablyfair.org) — verdicts, the statistical treatment, and what "provably fair" would actually require. ## Why you can trust these numbers Every instrumented row is a real, unaltered BetFury outcome. BetFury commits to each round by publishing `SHA-256(randomSeed)` where `randomSeed` is `_` — the outcome in plaintext. We recorded that seed and hash for every bet; **`SHA-256(seed)` reproduces BetFury's own published hash on all 180,000 rounds**, so nobody can claim the log was fabricated — the hashes are BetFury's. (That the commitment contains the *finished result*, with no player input and no derivation formula, is also precisely why the system is not provably fair — Part 1 of the report.) ``` $ node scripts/verify.mjs limbo 60000 rounds | SHA256(seed)==hash: 60000/60000 | result-in-seed: 60000/60000 ✓ PASS plinko 60000 rounds | SHA256(seed)==hash: 60000/60000 | result-in-seed: 60000/60000 ✓ PASS dice 60000 rounds | SHA256(seed)==hash: 60000/60000 | result-in-seed: 60000/60000 ✓ PASS TOTAL 180000 rounds | 180000/180000 hash-verified | 180000/180000 result-in-seed ``` ## Reproduce every figure Requires only Node.js — no dependencies, no network. ``` $ node scripts/analyze.mjs ══════════ LIMBO (n=60000) ══════════ INTEGRITY hash-verified: 60000/60000 ✓ ALL | index ordered: yes | stake: 0.001 HEADLINE money RTP: 97.326% vs advertised 99.020% z=-11.81 95% CI [97.045%, 97.607%] win@1.1x: 88.478% vs BetFury's shown 90.018% z=-12.58 […] ══════════ SUMMARY — measured RTP vs advertised 99.02% ══════════ limbo 97.326% z= -11.81 plinko 99.008% z= -0.02 dice 99.393% z= 0.92 (control) ``` Two z-scores appear for Limbo because they test different claims: **−11.81** tests the money RTP against the advertised 99.02%, and **−12.58** tests the observed win rate against the 90.018% win chance BetFury's own bet panel displays. They are separate statistics — both computed by the script, both fatal to the advertised figure. ``` $ node scripts/exploratory.mjs ══════════ LIMBO EXPLORATORY (n=60000, target 2.00x) ══════════ HEADLINE money RTP: 97.890% vs advertised 99.020% z=-2.77 BUSTS 1.00x rounds: 2072 (3.453%, 1 in 29) vs 1176 expected under advertised (1.960%, 1 in 51) z=26.4 IMPLIED R 0.97512 (95% CI 0.9736-0.9766) vs advertised 0.9902 AGREEMENT instrumented run implies R 0.97415; difference 0.91 sigma -> consistent ✓ ``` The exploratory capture (15–16 July, before the instrumented runs) recorded results, payouts and timestamps but not the seed/hash fields, so it is **not pooled** with the verified 180,000 — it is corroboration. Fitted on its own, it points at the same payout constant as the instrumented run. ## Method - **Pre-committed.** Fixed `n = 60,000` per game, declared before the first bet — the `data/*.precommit.json` manifests are timestamped seconds ahead of each game's first recorded round. One analysis, no extending, no cherry-picking. - **Single stake, single currency, no bonus bets.** `0.001 USDT` per bet, full record logged per round in capture order with index and timestamp. - **A built-in control.** Dice applies its edge in the *payout* (a true 50% win chance paid at 1.9804× instead of 2× — confirmed on every row), so a correct measurement must land on 99.02% — and it does. Plinko's full paytable is embedded in the data (16-row Medium: 120.4/41/10/5/3/1.5/1/0.5/0.3 mirrored; fair-model mean 99.02%). Money RTP (paid ÷ staked) is the single, mechanism-agnostic metric used everywhere. ## Repository layout ``` data/ limbo-60000.jsonl 60,000 instrumented rounds — seed, hash, result, stake, payout plinko-60000.jsonl 60,000 rounds — incl. the full 16-step ball paths dice-60000.jsonl 60,000 rounds — raw rolls (the control) limbo-exploratory-60000.json 60,000 exploratory rounds at 2.00× (no seed/hash — corroboration) *.precommit.json dated fixed-n pre-commitment per game analysis-summary.json machine-readable results siq-rng-certificate-2022.pdf BetFury's SIQ RNG certificate (local copy) scripts/ verify.mjs re-hash every round → matches BetFury's committed hashes analyze.mjs reproduce the RTP / distribution / independence analysis exploratory.mjs reproduce the exploratory-run corroboration figures ``` Account identifiers and balances were stripped from the public data; nothing else was altered. ## Scope Part 1 of the report (the system is not verifiable by players) is a statement about *verifiability*, not a claim that any single result was altered. BetFury's 2022 SIQ certificate (included) covers a submitted `Math.random()`-based PRNG sample and states that the RGS and live games are the subject of separate reports; it contains no payback-ratio testing. Part 2 is a direct measurement: in these captures Limbo paid below its advertised RTP; Plinko and Dice paid as advertised. All findings are scoped to Limbo, Plinko and Dice on betfury.com, captured 15–16 July 2026, and every figure is reproducible from this repository. --- Prepared by [ProvablyFair.org](https://provablyfair.org) — the certification standard for provably fair gambling.