Operator evaluation · Demo credits only

Verify the result, step by step.

Hangar uses a SHA-256 seed commitment and HMAC-SHA256 to derive reproducible game outcomes. In this demo, seeds are generated in the browser; verification checks the calculation, not independent server custody.

Commit, calculate, reveal

  1. Publish SHA-256(serverSeed) before the round.
  2. Calculate HMAC-SHA256 with the server seed as key and the string “playerSeed:nonce” as message.
  3. Convert the first 13 hexadecimal digits into an integer and divide by 2⁵².
  4. Apply the game’s mapping, then reveal the seed after the round. Compare its hash with the commitment and recompute the result.

Reproducible Updraft example

These are fixed, public example inputs, not a live round.

Server seed: hangar-example-server-seed
Player seed: operator-demo
Nonce: 12
Commitment: 140711489dde82d0113ff63473e92f4bc1401d9abffcb9e162b140d9979890a7
HMAC: b191dbe63f30c998dd28db30d7c7f298688f7c862f04d69bba3a4883390bf501
Crash: 3.16×
import { createHash, createHmac } from 'node:crypto';
const server = 'hangar-example-server-seed', player = 'operator-demo', nonce = 12;
console.log(createHash('sha256').update(server).digest('hex'));
const h = createHmac('sha256', server).update(player + ':' + nonce).digest('hex');
const r = parseInt(h.slice(0, 13), 16) / 2 ** 52;
console.log(Math.min(10000, Math.max(1, Math.floor(0.97 / (1-r) * 100 + 1e-9) / 100)));

Different games, different mappings

Minefield uses a Fisher–Yates shuffle driven by HMAC-derived values with rejection sampling. Dice maps to 10,000 possible rolls; Limbo maps to a multiplier. Plinko uses HMAC-derived left/right decisions and the selected paytable. Open a completed round’s fairness details to inspect its inputs and check the outcome.

Production boundary

Production requires server-controlled rounds and secret seeds, independent review and appropriate approvals. This demo does not provide those assurances.

Read the implementation notes →