EliteGachaEliteGacha← back to the draws
Seedless on-chain verifier

Don't trust us. Recompute it.

There is no operator seed to trust. A draw is two public things: the hash of a close block we committed to before it was mined, and the Merkle root of every holder's balance at that block. The roll is just keccak256 of the block hash — so the winner is fixed and public the instant the block lands. This page re-runs the whole computation in your browser, the same code the contract verifies on-chain.

try #1, #2, #3

What we cannot do

×
Influence the roll

The roll is keccak256 of a close block we committed to before it was mined — its hash didn't exist yet, so it can't be ground.

×
Withhold or re-roll

There is NO operator seed. Nothing is revealed, so there is nothing to withhold or quietly re-roll if the result is unfavorable.

×
Swap in a different holder set

The snapshot's Merkle root is published on-chain; anyone recomputes it from real balances at the close block.

×
Pay the wrong winner

settle() is permissionless and verifies a Merkle proof that the winner's weight interval covers the roll — the contract pays exactly that address.

Reference implementation

Copy-paste. Run it locally with Node ≥ 20, no dependencies — same answer as this page.

// no seed, no secret — everything is public on-chain data
import { keccak_256 } from "@noble/hashes/sha3";

// roll = keccak256(abi.encodePacked(bytes32 closeBlockHash, uint256 drawId))
// offset = roll mod totalWeight
// winner = the holder whose [cumBefore, cumBefore + weight) covers offset,
//          in the snapshot sorted by address; proven on-chain by a Merkle proof
//          of keccak256(keccak256(abi.encode(addr, cumBefore, weight)))
Hold $ELITE. Win the slabs.demo draws — live draws arrive with the contracts