Token launch pending Contract Revealed at launch
Design preview Not deployed

Robinball

One committed pot. One provable winner. Every 15 minutes.

Prize pot
ETH

Awaiting token launch

Network Robinhood Chain Mainnet 4663
Entry unit 10,000 BALL Equals one ticket
Winner share 100% default Actual share published per receipt
Settlement Merkle proven Permissionless proof

Total Burned Tokens

Total BALL burned
BALL

Awaiting token launch

01 / Your entry

Hold BALL.
Every full 10,000 counts.

At each published snapshot, every full 10,000 BALL held by an eligible address becomes one equal-odds ticket. No manual entry is required.

See the draw lifecycle
Check any address Read-only — no wallet connection
Pre-launch

You are entered automatically by holding BALL — nothing to connect or sign. Address search opens after launch.

Address balance
Tickets at next snapshot
Included in latest snapshot
Available after launch
Prizes received
— ETH
Example: 25,400 BALL = 2 tickets

The remaining 5,400 stays in your balance but does not add a third ticket.

02 / Draw lifecycle

A result you can replay, not just trust.

Robinball separates the participant commitment, external randomness, winner proof, and payout into observable steps.

  1. 01

    Snapshot

    Archive token balances at a known block and remove excluded system addresses.

    Off-chain indexer
  2. 02

    Commit

    Publish snapshotHash, ticketsRoot, ticket total, block, pot, and payout split.

    Published commitment
  3. 03

    Randomize

    Draw public drand randomness, produced only after the participant commitment exists.

    drand beacon
  4. 04

    Settle

    Publish the winning ticket range and Merkle proof. Anyone can re-verify it.

    Publicly verifiable
  5. 05

    Distribute

    An automated operator bot sends the winner's ETH prize and records the transaction in the round receipt.

    Operator payout
03 / Draw archive

Every round, one readable record.

Live receipts will appear here once the BALL token launches and the first draw settles.

Local fixture available
Round Status Snapshot block Tickets Winner Prize Inspect
Local fixture Not a live draw Committed demo 1,000 21 Pending randomness
04 / Local verifier

Move the index.
Find its owner.

This fixture uses the same 21-ticket Merkle commitment tested by the Solidity suite and the Node indexer. It is local test data, not a settled Robinball round.

commit-args.json
{
  "mode": "local fixture",
  "snapshotBlock": 1000,
  "totalTickets": "21",
  "snapshotHash":
    "0xb9e39bdb...a1cce5dc",
  "ticketsRoot":
    "0x094711e5...a0c2f64"
}
Random index 13
Local calculation
Range owner
0x7E5F...95Bdf
Tickets 13 through 17
  • Artifact headers agree
  • Ticket ranges are continuous
  • Index maps to exactly one range
  • Merkle proof matches the tickets root
05 / Trust model

Publicly auditable.
Precisely scoped.

What anyone can verify

  • The tickets root is published before the drand round.
  • Randomness is public drand, timestamped after the commit.
  • A valid Merkle range must contain the winning index.
  • Published snapshot and tickets match their committed hashes.

What the operator is trusted for

  • The snapshot honestly reflects balances at the block.
  • Excluding vault, treasury, LP, and operator addresses.
  • Paying each winner from the 2% sell-tax prize pot (buys burn BALL instead).
06 / FAQ

The short version.

Launch, entry, settlement, and verification details in plain language.

Is Robinball live?

Not yet. The interface is a design preview. Draws begin once the BALL token launches on Robinhood Chain with its official Uniswap v4 pool; from then on an automated operator bot runs a draw every 15 minutes and publishes a verifiable receipt for every round. Token and explorer links stay disabled until launch.

How are tickets calculated?

The indexer floors each eligible balance by the 10,000-token ticket unit. System addresses and configured treasury or liquidity addresses must be excluded before the Merkle commitment is published.

Where does randomness come from?

From drand, a public verifiable randomness beacon (the quicknet chain). Each draw commits its tickets root before the chosen drand round is produced, so the outcome cannot be known or ground at commit time. The round's signature lets anyone reproduce and verify the number.

Where does the prize pot come from?

Every swap of BALL through the official Uniswap v4 pool pays a 2% tax on its output side: on sells the tax is taken in ETH and fills the prize pot; on buys it is taken in BALL and burned to the dead address, permanently shrinking the supply. Both flows happen inside an on-chain v4 hook that anyone can inspect (every burn and every pot deposit emits an event). The pot is denominated in ETH and the hook address is published at launch.

How does a winner receive ETH?

The operator sends the ETH prize directly to the winner on Robinhood Chain and publishes the transaction hash in the round receipt, so anyone can confirm the payout on the explorer.

What does publicly auditable mean?

Anyone can compare published artifacts with the on-chain hashes, replay the range lookup, and verify a submitted Merkle proof. Snapshot integrity remains an operator trust boundary that must be checked against archived balances.

Is the 15-minute schedule enforced on-chain?

No. The 15-minute cadence is the intended product schedule, run by an automated operator bot, not a contract invariant. That scheduler and its monitoring service still need to be implemented and tested before launch.

Local fixture

Committed demo round

This record proves indexer and contract parity. It has no winner, randomness, prize, or live transaction.

Status
Committed demo
Snapshot block
1,000
Total holders
4
Total tickets
21
Snapshot hash
0xb9e39bdb8e535731f601fa9c384e979179a8a80d70ab98ba71c0f404a1cce5dc
Tickets root
0x094711e50013bcaee3551473ca621dd1d458dd6ba65bf8b88bbcc4781a0c2f64
Snapshot Ticket ranges