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.
| # | Address | Tickets |
|---|
Raffle forged
Commitment — publish this before the settlement block
Post the descriptor (or the commitment below) publicly — X, Discord, the event page — before block is mined. Anyone can then re-verify the draw with the entries you publish. A commitment that appears only after the settlement block proves nothing.
Forged · prize ·
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.
Air-gapped path — paste the settlement block hash by hand
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.
Winners
Full derivation (re-verify 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.
Recomputed derivation
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.
Payout plan — total
Pay each row from your wallet (scan the QR or copy the
pearl: URI). Totals are exact to the grain — the rows always sum to the prize.
Honest limits
- No PRL ever moves through this page. It forges commitments, draws winners, verifies draws, and plans payouts — prize custody and the actual sends stay with the organizer's own wallet.
- Fairness is a commitment protocol, not code: Pearl has no smart contracts, so nothing on-chain enforces the draw. The guarantee is that the descriptor must be published before the settlement block — anyone can then check the entriesHash and redo the SHA-256 draw by hand. A commitment that appears only after the settlement block proves nothing.
- The beacon is only as unpredictable as the settlement block. Use a block far enough out that no entrant (including the organizer) can influence or predict its hash; the app enforces a ≥ 4-block lead at forge time.
- Blockbook is a third-party read source. For the draw that decides real money, confirm the settlement
block hash with your own
pearldnode (getblockhash) or a Blockbook you trust — the air-gapped paste path exists for exactly this. - No draw runs without the settlement block hash and a matching entry list. If either is missing or tampered, the app refuses — it never invents a winner.
- Block countdowns assume the 194-second target block time; real block times vary.