← Back to dfv.fun

The raffle

Ten thousand tickets at 100 USDC. One hundred winners drawn by Chainlink VRF. Sell the lot and that is a Rolex plus ninety-nine cash prizes of 4,000 USDC — a smaller round pays smaller prizes and gives far better odds, and below 5,000 tickets there is no watch at all. When the last ticket sells, the draw happens on its own. Nobody can stop it, delay it, or choose who wins.

The DFV cat in red glasses over the Singapore skyline at dusk, beside the words: onchain raffle with Chainlink VRF on Ethereum mainnet, for Token 2049 Singapore.

This round

0 of 10,000 tickets sold (0.0%) · 10,000 left

Ticket price
100.00
USDC
In the pot
0
USDC collected so far
Round
#1
rounds run back to back

If the round drew right now

Winners
100
Each cash winner gets
4,000.00 USDC
The Rolex
Awarded
Chance per ticket
1 in 100

Shown for a full round of 10,000 tickets. Once the raffle opens, this panel is calculated from the tickets actually sold, by the same arithmetic the contract uses.

Enter

Preview. This is exactly how entering will work. The buttons are switched off until the contract is deployed and audited — there is nothing yet for them to send a transaction to.

Buying takes two transactions: approving the exact USDC these tickets cost, then the purchase itself. The approval is never unlimited, and this page can send no other transaction of any kind.

What you win depends on how many tickets sell

There are always 100 winners — or as many as there are tickets, if fewer. What changes is the size of each prize. The prize pool is always 40.8% of whatever was collected, so a smaller round means smaller prizes and much better odds. Every figure below is the contract's own arithmetic, not a marketing estimate.

Tickets sold In the pot The Rolex Winners Each cash winner gets Odds
499 or fewer—noround is cancelled80.00 USDC refunded—
50050,000no100204.00 USDC1 in 5
1,000100,000no100408.00 USDC1 in 10
5,000500,000yes1001,939.39 USDC1 in 50
10,0001,000,000yes1004,000.00 USDC1 in 100
The Rolex needs 5,000 tickets. The watch is awarded only once the pot reaches 500,000 USDC. Below that the entire prize budget is paid as cash instead — there is money to win, but no watch.
A cancelled round hands back more than a small round that draws. Below 500 tickets nobody can draw the round at all: it is cancelled and every ticket takes back 80 of the 100 USDC it cost. A round that does draw pays back 40.8% on average. So crossing 500 tickets lowers what a ticket is worth on average, and raises what it might win. We would rather you knew that before buying than worked it out afterwards.

Who is in this round

Every ticket bought, by wallet. Read from Ethereum mainnet and refreshed hourly — this is the chain's own record, not ours.

Wallet Tickets Share of the round
0x0103…17501100.00%

Holding several tickets gives several independent chances, and one wallet can win more than once.

How a round works

Tickets
10,000
100 USDC each
Winners
100
1 watch + 99 cash
Cash prize
4,000
USDC each, if it sells out
Odds
1 in 100
per ticket, if it sells out

It draws itself

The moment the last ticket sells, or six months after the first one, the draw triggers. Anyone can trigger it, and a keeper does it automatically — so it does not depend on us being awake, or willing.

Nobody picks the winners

Chainlink VRF produces the randomness with a proof that is checked on-chain before the contract can use it. We deliberately do not use block data, which a miner could re-roll.

There is no admin

No owner, no pause, no upgrade, no withdrawal function. The house address is fixed at deployment and no code path sends USDC anywhere else. Nothing can be changed afterwards — including by us.

You can always take your prize

Prizes are paid out in batches automatically, but if that ever stops, a winner can pull their own prize directly from the contract at any time. It does not expire.

Where the money goes

40.8% of everything collected is paid back out as prizes — the watch plus the ninety-nine cash prizes. The rest is the house's. That share is fixed in the contract and cannot be changed.

This holds whether the round fills or not. A round that sells nine thousand tickets pays the same 40.8%, scaled down, so nobody gains from a round failing to fill. The number of winners stays at 100 either way, so in a smaller round each prize is smaller and your chance of taking one is better. Below 500 tickets the round is cancelled instead and buyers take back 80% of what they paid.

Be clear-eyed about this. A raffle is not an investment. Most tickets win nothing, and the expected return on a ticket is less than what you paid for it. Only buy what you are happy to lose.

It has already been run, with real money

Before opening, we ran a complete round on Ethereum mainnet at one fifty-thousandth of the size — real USDC, real Chainlink VRF randomness, our own money. Two thousand tickets, one hundred winners, every prize delivered, nothing left in the contract.

See the rehearsal, transaction by transaction →

What review this code has had

Pre-audit — Olympix. Automated security detection over the contract, run twice: once on the original code, then again on the repairs. Six findings the first time, every one fixed — and the second pass earned its keep by catching a defect inside one of those fixes.

No full third-party audit has been carried out. We would rather tell you that than let you assume otherwise. What exists instead: the source is verified on Etherscan, so you can read every line before you enter; 48 unit tests and 43 adversarial ones; seven invariants held across roughly 500,000 random sequences of calls; and two complete rehearsals on mainnet with real money.

The scan reports and the full test and design documentation are available on request from the DFV DAO: deeepfckingvalue@gmail.com