XPcollect
← Test League XPinsiders

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.

  1. #1shortbubble
  2. #2ravenclawchris
  3. #3xpjon
  4. #4izquierdo8990
  5. #5newbcollect
  6. #6hon88
  7. #7cobibarron
  8. #8zeusiswrath
  1. Bracket drawn
  2. 1xpjon
  3. 2izquierdo8990
  4. 3newbcollect
  5. 4zeusiswrath
  6. 5ravenclawchris
  7. 6shortbubble
  8. 7cobibarron
  9. 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

    izquierdo8990

    Empoleon ex · NM · $0.65

    TIE · coin → first
  • newbcollect · advances

    Farigiraf ex · NM · $0.71

    zeusiswrath

    Noivern ex · NM · $0.66

    vs
  • ravenclawchris

    Hop's Zacian ex · NM · $0.70

    shortbubble · advances

    Team Rocket's Persian ex · NM · $0.71

    vs
  • cobibarron

    Empoleon ex · NM · $0.65

    hon88 · advances

    Noivern ex · NM · $0.66

    vs

Semi-final

  • xpjon

    Alcremie ex · NM · $0.83

    newbcollect · advances

    Iron Leaves ex · NM · $0.92

    vs
  • shortbubble · advances

    Eiscue ex · NM · $1.09

    hon88

    Eiscue ex · NM · $1.09

    TIE · coin → first

Final

  • newbcollect

    Eiscue ex · NM · $1.09

    shortbubble · champion

    N's Zoroark ex · NM · $1.82

    vs

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

  1. 0Empoleon ex · NM$0.65
  2. 1Empoleon ex · NM$0.65
  3. 2Empoleon ex · NM$0.65
  4. 3Noivern ex · NM$0.66
  5. 4Noivern ex · NM$0.66
  6. 5Hop's Zacian ex · NM$0.70
  7. 6Team Rocket's Persian ex · NM$0.71
  8. 7Farigiraf ex · NM$0.71

Semi-final

  1. 0Alcremie ex · NM$0.83
  2. 1Iron Leaves ex · NM$0.92
  3. 2Eiscue ex · NM$1.09
  4. 3Eiscue ex · NM$1.09

Final

  1. 0Eiscue ex · NM$1.09
  2. 1N's Zoroark ex · NM$1.82

Check it yourself

  1. SHA-256 the secret (as text) and compare it with the fingerprint.
  2. Open the drand link and confirm the round's randomness, and that it was published after the last seat sold.
  3. Battle seed = HMAC-SHA256 with the secret's bytes as key over xp-pack-battle:v1:<battle id>:<round>:<randomness>.
  4. 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.
  5. Shuffle with Fisher–Yates from the last position down: seats with "seating", each round's cards with "round-N-deal".
  6. Pair bracket positions 1&2, 3&4…; higher value advances; on a tie draw from "round-N-tiebreak" (0 = first player).
Download the audit (JSON)