CSRP · Collective Synchronic Randomness Protocol

Every action at the table
shapes the next card.

CSRP uses every player's previous-round decision time and bet size as random factors, then combines them with system randomness to draw the next card in real time. Randomness comes not only from code, but also from physical-world perturbations created by live play.

A♠♠
K♥♥
2♦♦
DRAW #01 · JUST IN TIME
HOW IT WORKS

Two layers of randomness.
One next card.

The first layer comes from real player actions and timing differences across the table. The second comes from a secure system random source. Only after they are fused is the next card selected.

01 / PHYSICAL INPUT

Player actions create random perturbations

Every player's previous-round decision time (ElapsedMs) and bet size (Amount) are written to the event stream in order.

Seat 2 · Think 1,247 msBET 120
Seat 4 · Think 3,891 msCALL 120
Seat 6 · Think 742 msRAISE 360
02 / SYSTEM RANDOM

System randomness adds core entropy

For every draw, the system obtains a fresh 32-byte value from the operating system CSPRNG. It is used once, then discarded.

SystemRandom · 32 bytes
Fresh for every card · Never pre-generated
03 / FUSION

Fuse both layers and draw

The action-event digest and system random value are combined through HMAC-SHA256, then rejection sampling maps the result fairly to the remaining deck.

01DECK INDEX
Player action factor + system random factor
HMAC-SHA256 → 569d…04c4
52 cards remaining → 2♦
Core idea: the algorithm does not rely on a code-only random source. It also incorporates timing and bet-size differences generated by everyone at the live table, so two layers of randomness determine the next card together.
ONE ROUND → NEXT CARD

Real actions from one round
shape the next card.

Players cannot reproduce the exact same millisecond-level decision times and bet combinations. Every round creates a new perturbation that is fused with system randomness before the next draw.

01 · PLAYER ACTIONS

The table completes one round

Each player's decision time, bet amount, and action order are recorded in real time.

ElapsedMs + Amount
Seat + ActionType
EventNo increments in order
8♣K♥
02 · TRANSCRIPT

Create the event-stream digest

All actions from the previous round are canonicalized into one unique public digest.

Canonical Serialization
SHA-256(Event Stream)
→ TranscriptDigest
A♣7♥
03 · SYSTEM RANDOM

Add the system random factor

A fresh secret random value is created at draw time and enters the algorithm together with the event digest.

SystemRandom · 32 bytes
CSPRNG · one-time use
HMAC-SHA256 key
4♦
04 · NEXT CARD

Draw the next card

The two random factors are fused, then an unbiased mapping selects a deck position. Only then does the next card exist.

FusionOutput
Rejection Sampling
DeckIndex = value mod size
2♦
WHY IT MATTERS

Two layers. True randomness.

  • 01
    Not dependent on a single code-only sourceReal-table timing and bet-size perturbations are added to system randomness.
  • 02
    The entire table contributes factorsThe event stream is formed by the previous round's actions from every player—not one individual.
  • 03
    Recalculated for every drawBoth the action digest and system random value update as every next card is generated just in time.
  • 04
    No prebuilt future deck orderFuture cards are not stored as a complete sequence at the start of the hand.
For technical details, visit the official GitHub.
CHIPCHIP was founded by crypto enthusiasts disappointed with the poker ecosystem. There is no project team; everyone is a stakeholder. CHIPCHIP belongs to all players. Let's build a new generation Web3 poker platform together and create our own miracle.