Skip to the main content
Lovele

Provably fair

Check a spin without an account

Someone who does not trust us should be able to check us anyway. Paste the values from a spin and this page recomputes the result in front of you. If our result and yours differ, we are the ones who are wrong.

No account, no sign up, and nothing you type leaves this page.

Check a spin

A spin is HMAC-SHA256(server_seed, client_seed:nonce). The first 8 hex characters, read as a number modulo 10000, give the roll. The roll falls on the first segment whose cumulative weight passes it.

SHA-256 of the server seed, published before any spin used it.

Fill in the server seed, the client seed and the nonce. The result appears here.

Everything runs here, in your browser. Nothing you type is sent anywhere.

The same check, in a terminal

Without JavaScript, the same check works in any terminal:

Commitment

printf '%s' "$SERVER_SEED" | sha256sum

HMAC, then the roll

HMAC=$(printf '%s' "$CLIENT_SEED:$NONCE" | openssl dgst -sha256 -hmac "$SERVER_SEED" | awk '{print $NF}')
printf '%d\n' $(( 0x${HMAC:0:8} % 10000 ))

Both commands are OpenSSL and coreutils. Neither of them is ours.

Reward structure

Rolls run from 0 to 9999. Each segment owns a range as wide as its weight, in order. This table is the exact structure spins are checked against.

Segment Points Weight Roll range
1 10 40.00% 0-3999
2 25 30.00% 4000-6999
3 50 20.00% 7000-8999
4 100 8.00% 9000-9799
5 250 1.90% 9800-9989
6 1,000 0.10% 9990-9999

Where the four values come from

  1. The published commitment appears on the wheel before the first spin of a pair. It never changes while the pair is open.

  2. The client seed belongs to the account and can be changed at any time, after our commitment is already public.

  3. The nonce is the number of the spin inside the pair. The first spin is 1, the second is 2.

  4. The server seed is revealed when the pair is closed. Until then it is secret, which is the only reason the commitment is worth anything.

The wheel is provably fair

Every result is decided and sealed before the wheel moves. The animation only shows a decision that already exists.

Sealed before you tap

Before your first spin, we lock in a secret choice that fixes every future result, and we publish its fingerprint where you can see it. Changing any result afterwards would change the fingerprint.

You add your own part

Your account carries a small code you can change at any time, after our fingerprint is already public. It mixes into every result, so the results could not have been picked to suit us.

Opened afterwards

On request, or after a while, the secret choice is opened in full. Anyone can re-run every spin with tools we do not control and compare.

Nobody has to trust us.