Skip to main content
Every draw can be checked by anyone, with no account and no key.

In your browser

On a campaign’s page, each drawn draw has a Verify in your browser button that runs every check and shows the result. It runs on Prizerail’s own site, though, so for a check that doesn’t trust us, run the script yourself.

With the script

It needs Node.js 18 or later and nothing else:
The script is short and readable, with the hashing written out so there’s nothing to install. It tests its own keccak256 against published values first, then:
  • checks that the prize table’s weights add up to its rolls
  • recomputes the winner list fingerprint
  • recomputes every winner’s random value, roll and prize, and compares each with the proof
It prints ✓ for a check that passes, ✗ for one that fails, and i for something the math can’t settle, such as where the random value came from. It exits 0 only if nothing failed.

With a library

To cross-check with a library you already trust, viem’s keccak256(encodeAbiParameters(…)) with the types in How a draw is decided gives the same values.

What a check proves

A passing check proves the prizes follow from the locked list and the random value, exactly as published. It doesn’t prove who should be on the list: the partner chooses the winners by its own rules.
Random values marked mock are test randomness from the test environment. They can’t be checked independently, and real campaigns never use them: in a test draw, that the list locked before the random value existed rests on Prizerail’s own timestamps. Real draws use onchain random values (Pyth Entropy through the Prizerail contract on Base), which are requested only after the lock and can be checked against the chain.