Pearl Raffle

provably-fair PRL raffles · the lottery vault

Forge the raffle

The organizer commits to the prize, the settlement block (a future block whose hash is the unpredictable beacon), and the weighted entries. The descriptor is tamper-evident: changing anything after forging changes the hash. Publish the descriptor before the settlement block — that is what makes the draw provably fair.

Entries — one <address> <tickets> per line

Tickets are whole entry counts (weights). Commas work too. Lines starting with # are ignored. Duplicate addresses merge. Every address must be a Pearl v1 Taproot address (prl1p…).

Validated

No list validated yet.

Track the raffle

Reload a descriptor to re-derive it, re-check the entry commitment, and count down to the settlement block. Once the settlement block is mined, grab its hash for the draw.

Draw the winners

With the settlement block hash in hand, the draw is a pure function: winnerIndex = uint256(SHA-256("raffle-draw:v1:⟨descriptorHash⟩:⟨blockHash⟩:⟨round⟩")) mod totalTickets, mapped onto the weighted ticket ranges. No secrets, no randomness you must trust — anyone can redo every step by hand.

Verify a draw

The standalone verifier. Paste anyone's descriptor, their entry list, and the settlement block hash — the app recomputes the commitment and the full draw locally. If the entries were altered after forging, verification refuses loudly.

Payout plan

Honest scope: this page never moves PRL. Prize custody stays with the organizer — the plan below splits the exact prize across the round winners (remainder grains go to round 1), and exports a CSV plus pearl: payment URIs with QR codes so you can pay out from your own wallet.

Honest limits