XPcollect
← 151 BATTLE!!

Provably fair · recipe v1

Fairness audit

Everything that decided 151 BATTLE!! — 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-15T22:20:31.899Z; drand round 33099823 was published at 2026-10-15T22:20:33.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. 30 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 15, 2026, 4:56:09 PM ET
SHA-256 of the secret, shown on the battle page before any seat sold.
d99beee2461453c42d882b5c9ebd953410985b23acbe268d48b6469df0245174
2 · The secret, revealed after the battle ran
ba4ab85b9e046b5a48596b6787ae05c5dcf107e35834ac8eb3a14197ce1ad6c9
3 · The public random number
The last seat sold at Oct 15, 2026, 6:20:31 PM ET. The first drand quicknet round published after that was round 33099823 ↗ at Oct 15, 2026, 6:20:33 PM ET. drand is run by an independent group of organisations; check the number at that link.
0e28e445b0aa5df226460f689c0f7994b685e23f51533e5cdd4c1c9e7c13d930
4 · The battle seed
HMAC-SHA256, key = the secret's 32 bytes, message = xp-pack-battle:v1:cmva0qooz0001l006mvroy5eg:33099823:<public random number>
3025b16b740047f9ea54b0022f301f2c49d6b5ef41ead9039bba6ac69cbbebcf

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. #1jstuhmer1109
  2. #2kfactor89
  3. #3ravenclawchris
  4. #4jman3310
  5. #5gummyy444
  6. #6miyakoordori
  7. #7kingkrabby
  8. #8ipho3nix
  9. #9ogaogre
  10. #10atmc
  11. #11vrock
  12. #12hidden87
  13. #13bloodvein
  14. #14tyguy
  15. #15shortbubble
  16. #16jbueno26
  1. Bracket drawn
  2. 1jman3310
  3. 2ipho3nix
  4. 3atmc
  5. 4miyakoordori
  6. 5jstuhmer1109
  7. 6vrock
  8. 7ravenclawchris
  9. 8bloodvein
  10. 9gummyy444
  11. 10jbueno26
  12. 11tyguy
  13. 12ogaogre
  14. 13shortbubble
  15. 14kfactor89
  16. 15hidden87
  17. 16kingkrabby

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

  • jman3310 · advances

    Bill's Transfer · NM · $2.38

    ipho3nix

    Jynx ex · NM · $1.31

    vs
  • atmc · advances

    Arbok ex · NM · $1.58

    miyakoordori

    Kangaskhan ex · NM · $1.09

    vs
  • jstuhmer1109

    Blastoise ex · NM · $2.13

    vrock · advances

    Daisy's Help · NM · $2.81

    vs
  • ravenclawchris

    Ninetales ex · NM · $2.15

    bloodvein · advances

    Giovanni's Charisma · NM · $4.02

    vs
  • gummyy444 · advances

    Jynx ex · NM · $5.37

    jbueno26

    Venusaur ex · NM · $1.25

    vs
  • tyguy

    Zapdos ex · NM · $1.59

    ogaogre · advances

    Basic Psychic Energy · NM · $4

    vs
  • shortbubble · advances

    Wigglytuff ex · NM · $1.56

    kfactor89

    Golem ex · NM · $1.21

    vs
  • hidden87

    Alakazam ex · NM · $1.93

    kingkrabby · advances

    Switch · NM · $2.31

    vs

Round 2

  • jman3310 · advances

    Giovanni's Charisma · NM · $14.42

    atmc

    Mr. Mime · NM · $13.01

    vs
  • vrock · advances

    Kangaskhan ex · NM · $6.02

    bloodvein

    Erika's Invitation · NM · $5.55

    vs
  • gummyy444

    Wigglytuff ex · NM · $7.19

    ogaogre · advances

    Charizard ex · NM · $8.02

    vs
  • shortbubble

    Mew ex · NM · $6.67

    kingkrabby · advances

    Erika's Invitation · NM · $16.64

    vs

Semi-final

  • jman3310

    Machoke · NM · $20.43

    vrock · advances

    Poliwhirl · NM · $33.62

    vs
  • ogaogre

    Mew ex - 205/165 (151 Metal Card) · NM · $24.67

    kingkrabby · advances

    Alakazam ex · NM · $58.08

    vs

Final

  • vrock · champion

    Zapdos ex · NM · $82.64

    kingkrabby

    Psyduck · NM · $59.12

    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. 0Kangaskhan ex · NM$1.09
  2. 1Golem ex · NM$1.21
  3. 2Venusaur ex · NM$1.25
  4. 3Jynx ex · NM$1.31
  5. 4Wigglytuff ex · NM$1.56
  6. 5Arbok ex · NM$1.58
  7. 6Zapdos ex · NM$1.59
  8. 7Alakazam ex · NM$1.93
  9. 8Blastoise ex · NM$2.13
  10. 9Ninetales ex · NM$2.15
  11. 10Switch · NM$2.31
  12. 11Bill's Transfer · NM$2.38
  13. 12Daisy's Help · NM$2.81
  14. 13Basic Psychic Energy · NM$4
  15. 14Giovanni's Charisma · NM$4.02
  16. 15Jynx ex · NM$5.37

Round 2

  1. 0Erika's Invitation · NM$5.55
  2. 1Kangaskhan ex · NM$6.02
  3. 2Mew ex · NM$6.67
  4. 3Wigglytuff ex · NM$7.19
  5. 4Charizard ex · NM$8.02
  6. 5Mr. Mime · NM$13.01
  7. 6Giovanni's Charisma · NM$14.42
  8. 7Erika's Invitation · NM$16.64

Semi-final

  1. 0Machoke · NM$20.43
  2. 1Mew ex - 205/165 (151 Metal Card) · NM$24.67
  3. 2Poliwhirl · NM$33.62
  4. 3Alakazam ex · NM$58.08

Final

  1. 0Psyduck · NM$59.12
  2. 1Zapdos ex · NM$82.64

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)