Verify: BPG chase the ace grw3tz — BPG chase the ace grw3tz — round 51
Conducted by BPG Test Dept NV grw3tz · drawn Nov 3, 2026 10:02 AM PST
Winning ticket
#102
of 2 eligible tickets · prize $2.00
- ✓ The ticket list below matches the fingerprint frozen when sales closed (after payments were reconciled)
- ✓ The revealed secret matches the fingerprint published before sales opened
- ✓ Recomputing the drawing gives the same winning ticket
| Drawing | DRW-001647 |
|---|---|
| Eligible tickets (M) | 2 |
| Eligible set fingerprint | d14bb3e88a7efa91e19c10dac8354fd01cff7cba274ff47a0e78850363fcff90 |
| Sales closed | 2026-11-03 18:02:33 UTC |
| Method | GBC-RNG-v1 · NONE — demo stand-in for a lab-certified RNG service (test draws only) |
| Published fingerprint | ad0f2cbad8545386b66fa96501f646a437bb58471cff35fece18518ee0653383 |
| Revealed secret | 3df22d64a32d2ee4d773dedb637df669550b0538ac844fb9e35d9637164d0504 |
| RNG service | DEMO_CERTIFIED_RNG |
| RNG output | 0768551eda69182f78a4ccc0a1cc48da0d80ebebffde401be68606f72bd91507 |
| RNG receipt | 3b37758c8b1450645108a32151f6da81ba4381fa468347d3e0cf1ba6c551a541 |
Check it yourself (Python 3)
import hashlib, hmac
seed = bytes.fromhex("3df22d64a32d2ee4d773dedb637df669550b0538ac844fb9e35d9637164d0504")
assert hashlib.sha256(seed).hexdigest() == "ad0f2cbad8545386b66fa96501f646a437bb58471cff35fece18518ee0653383"
ref = "DRW-001647"
# Eligible ticket numbers frozen after sales closed and payments were reconciled
ranges = [(101, 102)]
setHash = hashlib.sha256("\n".join(f"{a}-{b}" for a, b in ranges).encode()).hexdigest()
assert setHash == "d14bb3e88a7efa91e19c10dac8354fd01cff7cba274ff47a0e78850363fcff90"
m = sum(b - a + 1 for a, b in ranges)
randomness = "0768551eda69182f78a4ccc0a1cc48da0d80ebebffde401be68606f72bd91507" # the RNG service output above
limit = ((1 << 48) // m) * m
used = set()
for rank in range(1, 1 + 1): # selection 1, then alternates / further prizes
c = 0
while True:
part = f"{rank}|" if rank > 1 else ""
msg = f"GBC-RNG-v1|{ref}|{m}|{setHash}|{randomness}|{part}{c}".encode()
v = int.from_bytes(hmac.new(seed, msg, hashlib.sha256).digest()[:6], "big")
c += 1
if v >= limit or (v % m + 1) in used:
continue
k = v % m + 1
used.add(k)
break
for a, b in ranges:
if k <= b - a + 1:
print("selection", rank, "ticket", a + k - 1)
break
k -= b - a + 1
# (a prize raffle with "one prize per person" also skips a buyer's other tickets — the server applies that rule from the frozen data)