Provably fair · recipe v1
Fairness audit
Everything that decided Test League XPinsiders — who sat where, every card dealt, every tie — came from two numbers: a secret we locked in before any seat sold, and a public random number nobody could know until after the last seat sold. Both are revealed below, and we re-ran the whole battle from them just now.
✓ Verified — 5 of 5 checks pass
- ✓ The secret matches the fingerprint published before any seat sold. SHA-256 of the revealed secret equals the fingerprint shown on the battle page since creation.
- ✓ The public random number is the first one drawn after the last seat sold. Last seat sold at 2026-10-13T00:44:09.547Z; drand round 33016296 was published at 2026-10-13T00:44:12.000Z.
- ✓ The battle seed comes from the secret and the public number. HMAC-SHA256 of the recipe message with the secret as key equals the seed recorded at the run.
- ✓ Replaying the recipe gives exactly the pulls we recorded. 14 pulls re-dealt from the inputs above and compared one by one.
- ✓ The champion is the same. The replay's final winner is the champion we announced.
The inputs
- 1 · Fingerprint, published Oct 12, 2026, 8:03:35 PM ET
- SHA-256 of the secret, shown on the battle page before any seat sold.
- adc39533d83b8153565cb517dbbd4c4dc792be07ff7195aba5c1f78b00f9f202
- 2 · The secret, revealed after the battle ran
- ec4bf139fbc3845f188d6ae58a38506b124c7f2b36157c6b2fe07cef874ca0db
- 3 · The public random number
- The last seat sold at Oct 12, 2026, 8:44:09 PM ET. The first drand quicknet round published after that was round 33016296 ↗ at Oct 12, 2026, 8:44:12 PM ET. drand is run by an independent group of organisations; check the number at that link.
- 16dd8d3c56220037bbc80927ffbd4358975554712d161a27e64e93f587afe39b
- 4 · The battle seed
- HMAC-SHA256, key = the secret's 32 bytes, message =
xp-pack-battle:v1:cmv5x466r0001l606jg4d50vg:33016296:<public random number> - 1059db1bc2d71ba2732fbea8a73c9f1426c967cb8042ae435e475b6890bb5623
Players, in the order they took their seats
The engine is given the seats in this order. The seatingstream then shuffles them into the bracket: positions 1 & 2 meet in the first round, 3 & 4, and so on.
- #1shortbubble
- #2ravenclawchris
- #3xpjon
- #4izquierdo8990
- #5newbcollect
- #6hon88
- #7cobibarron
- #8zeusiswrath
- Bracket drawn
- 1xpjon
- 2izquierdo8990
- 3newbcollect
- 4zeusiswrath
- 5ravenclawchris
- 6shortbubble
- 7cobibarron
- 8hon88
Every pull
Each round, the round-N-dealstream shuffles that round's cards onto the players still in, in bracket order. Higher value goes through; a tie is settled by the round-N-tiebreak stream.
Round 1
xpjon · advances
Empoleon ex · NM · $0.65
TIE · coin → firstizquierdo8990
Empoleon ex · NM · $0.65
newbcollect · advances
Farigiraf ex · NM · $0.71
vszeusiswrath
Noivern ex · NM · $0.66
ravenclawchris
Hop's Zacian ex · NM · $0.70
vsshortbubble · advances
Team Rocket's Persian ex · NM · $0.71
cobibarron
Empoleon ex · NM · $0.65
vshon88 · advances
Noivern ex · NM · $0.66
Semi-final
xpjon
Alcremie ex · NM · $0.83
vsnewbcollect · advances
Iron Leaves ex · NM · $0.92
shortbubble · advances
Eiscue ex · NM · $1.09
TIE · coin → firsthon88
Eiscue ex · NM · $1.09
Final
newbcollect
Eiscue ex · NM · $1.09
vsshortbubble · champion
N's Zoroark ex · NM · $1.82
The pool, locked at creation
Values were frozen when the battle was created. Within each round, cards are listed in the order the engine shuffles them from.
Round 1
- 0Empoleon ex · NM$0.65
- 1Empoleon ex · NM$0.65
- 2Empoleon ex · NM$0.65
- 3Noivern ex · NM$0.66
- 4Noivern ex · NM$0.66
- 5Hop's Zacian ex · NM$0.70
- 6Team Rocket's Persian ex · NM$0.71
- 7Farigiraf ex · NM$0.71
Semi-final
- 0Alcremie ex · NM$0.83
- 1Iron Leaves ex · NM$0.92
- 2Eiscue ex · NM$1.09
- 3Eiscue ex · NM$1.09
Final
- 0Eiscue ex · NM$1.09
- 1N's Zoroark ex · NM$1.82
Check it yourself
- SHA-256 the secret (as text) and compare it with the fingerprint.
- Open the drand link and confirm the round's randomness, and that it was published after the last seat sold.
- Battle seed = HMAC-SHA256 with the secret's bytes as key over
xp-pack-battle:v1:<battle id>:<round>:<randomness>. - Each random stream is HMAC-SHA256(key = battle seed, message =
<label>:<counter>) for counter 0, 1, 2…, read as big-endian 32-bit numbers. Pick a number below n by rejecting draws at or above the largest multiple of n under 2³², then taking the remainder. - Shuffle with Fisher–Yates from the last position down: seats with "seating", each round's cards with "round-N-deal".
- Pair bracket positions 1&2, 3&4…; higher value advances; on a tie draw from "round-N-tiebreak" (0 = first player).
