iGaming lab
API-backed demo

Fire Keno

REST · 20-of-80 draw
Server-backed keno engineNext
native.typescript / Slotopol

Fire Keno

An interactive number board backed by secure server-side drawing and paytable evaluation.

connecting
Demo credits1,000.00
Selected0 / 10
Last payout0.00
Source RTP92.0289%
number.matrix / 20-of-80awaiting draw
Select 2–10 numbersREADY

Select at least 2 numbers.

engineering.case-study

Inside the Fire Keno system boundary.

What the player experiences, what the implementation actually owns, and where production responsibilities would begin.

01

Game background

Fire Keno is a 20-of-80 draw game supporting 2–10 selections and a selection-specific paytable. It is a compact case for secure sampling, strict input validation, and exact hit-to-multiplier lookup.

02

How the game works

  1. Select 2–10 distinct values from 1–80.
  2. Choose a virtual stake and submit the draw.
  3. The backend draws 20 unique values and counts selected hits.
  4. The matching Fire Keno paytable cell produces the payout multiplier.
03

Backend architecture

The reusable KenoApiService owns an expiring session and delegates the draw to FireKenoGame. A shared cryptographic sampler generates unique values; the game owns board-state encoding and paytable lookup.

ClientREST APISelection validationCrypto drawHit scannerPayout
04

System boundaries

Game Client
Presentation, input, accessibility, and demo-credit display.
REST API
Request validation and routing into one isolated game session.
Game Session
Ephemeral configuration and the previous authoritative result.
Game Engine / RNG
Outcome generation, game rules, win evaluation, and result contracts.
Hit Scanner / Paytable
Intersection count and Fire Keno multiplier selection.
05

Critical engineering decisions

  • Reject duplicates and out-of-range selections.
  • Sample without replacement using a reusable crypto primitive.
  • Encode selected, drawn, and hit cells in server state.
  • Keep the imported paytable exact and cover it with a deterministic test.
06

Failure handling

  • A client disconnect does not rewrite a completed server result; reconnecting requires the session identifier while it remains in memory.
  • An unknown or expired session is rejected instead of silently creating a replacement outcome.
  • A timed-out spin or draw should not be blindly retried as though commands were idempotent; these demos do not yet persist command identifiers.
  • The browser’s virtual credits are not a ledger. If UI credit state is lost, it cannot be reconstructed from these focused game-engine modules.
07

Fairness / RNG

A cryptographic Fisher–Yates sampler draws 20 unique numbers on the backend. The source RTP is disclosed as model metadata; there is no certification or provably-fair commitment.

08

Conceptual data model

GameSession- gameId- betAmount- selectedNumbers- lastActivity
DrawResult- drawnNumbers- selectedNumbers- screen
Win- selected- hits- multiplier- payout