Fair play

Nothing hidden. Everything checkable.

Our games keep chance small and make it provable. Here is exactly what is random, how it is generated, and how you can verify it yourself.

What is random

Only the pieces you are dealt

In Puzzle Crash, the single random element is which pieces appear in each hand. Placement, line clears, levels, multipliers and payouts follow fixed, published rules. The piece generator takes only two seeds and the hand number as input — never your balance, your past results or the decisions you make.

Commit – reveal

How every hand is generated

  1. 1

    Commit

    Before you play, the server draws a secret 32-byte server seed from a cryptographic random generator and shows you its fingerprint: SHA-256(serverSeed). It cannot change the seed afterwards without the fingerprint changing.

  2. 2

    Your seed

    A client seed is mixed in, so the server alone does not choose the outcome of the draws.

  3. 3

    Draw

    Hand n is derived from HMAC-SHA256(serverSeed, clientSeed + ":" + n) and the published piece probabilities. Hands are created only when the previous one is finished — future pieces do not exist yet.

  4. 4

    Reveal & verify

    When the round ends the server reveals the seed. Anyone can check the fingerprint, recompute every hand and replay every move.

Verify it yourself

Check the commitment in your browser

After a round, take the revealed server seed and the commitment you were shown at the start. This snippet runs in any modern browser console:

// serverSeed: revealed after the round (64 hex chars)
// commitment: shown to you before the round started
const bytes = (hex) => new Uint8Array(hex.match(/../g).map((b) => parseInt(b, 16)));
const hex = (buf) => [...new Uint8Array(buf)].map((b) => b.toString(16).padStart(2, '0')).join('');

const digest = await crypto.subtle.digest('SHA-256', bytes(serverSeed));
console.log(hex(digest) === commitment ? 'commitment OK' : 'MISMATCH');

// Entropy for hand n (input to the published piece draw):
const key = await crypto.subtle.importKey('raw', bytes(serverSeed), { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']);
const hand0 = hex(await crypto.subtle.sign('HMAC', key, new TextEncoder().encode(clientSeed + ':0')));

The game also re-checks the commitment and every dealt hand automatically in the round history, and the server publishes a full verification report (commitment, dealt hands, replay of every move and the hash chain).

Integrity

The server decides, and the record cannot be silently changed

Server-authoritative

The browser sends only intents such as “place piece 2 at column 4, row 1”. Board, level, multiplier, payout and balance are computed on the server.

One payout, exactly once

Cash-outs are protected by locks, version checks and a unique ledger entry — a retried or duplicated request can never pay twice.

Tamper-evident history

Every accepted move is stored with a state hash chained to the previous one. History tables are append-only.

Sessions

Clear rules when a round is left unfinished

Connection lost, app closed, phone offRound waits 30 minutes for you
You leave the round on purposeRound waits 5 minutes for you
Time runs out and cash-out is unlockedThe current cash-out is paid to you automatically
Time runs out and cash-out is still lockedThe round ends; the stake is lost

Whatever happens, you see a notice explaining it the next time you open the game.

Being straight with you

What we do not claim

  • Puzzle Crash is a demo. It uses free demo credits; there is no real-money play.
  • It has not yet been certified by an independent testing laboratory or licensed by any gambling regulator.
  • Whether a game like this counts as a game of skill, of chance, or a mix is decided differently in each country. Real-money operation would require legal review and licensing per market.
  • How far you get depends on how well you play. We do not promise a return.