BananaTap · Provably Fair

Every tap is decided by a secret daily seed that is committed to before the day starts and revealed the next day. Nobody, including us, can pick or change a result after seeing who taps.

Today

Loading…

Verify a tap

Seeds are revealed after the day ends (UTC). Pick a past day, paste the wallet, and either list its taps or check one tap number.

How a tap is decided

  1. Daily seed. At 00:00 UTC the server draws 32 random bytes, seed, and publishes commit = SHA-256(seed). The seed stays secret until the day is over.
  2. Your tap's seed. Your n-th tap of the day uses tapSeed = HMAC-SHA256(key = seed, message = "tap:<wallet>:<day>:<n>").
  3. Random stream. Block i = SHA-256(tapSeed || i) (i as a 4-byte big-endian integer, i = 0, 1, 2…), read as unsigned 32-bit big-endian integers. nextInt(n) rejects values ≥ 2³² − (2³² mod n) and returns v mod n; nextFloat() is v / 2³².
  4. The result, in this order: nothing = nextFloat() < 0.40; roll = nextInt(100000) → rarity table; xpRoll = nextInt(100) → XP table. If nothing is true the rarity roll is ignored. The banana's looks come from the same stream afterwards (re-rolled only if its DNA already exists; rarity never changes).
Roll (of 100,000)RarityRoll (of 100)Pass XP
0 – 54,999Common0 – 49+5
55,000 – 79,999Uncommon50 – 79+10
80,000 – 91,999Rare80 – 94+20
92,000 – 97,499Epic95 – 99+50 (crit)
97,500 – 99,499Ultra Rare
99,500 – 99,899Legendary
99,900 – 99,989Mythic
99,990 – 99,999Cosmic

Tap XP is capped at 110 a day and Elite Pass holders get +10%; both apply after the roll. You can redo every step with any SHA-256 / HMAC library. Raw data: /fair/<day>, /fair/taps?day=&wallet=, /fair/verify?day=&wallet=&idx=.

What this proves

If a day's seed is ever missing after that day, treat it as a broken promise.