polyfoxDocs

๐ŸŽŸ๏ธ Daily raffle

Every $1 you trade on Polyfox earns a raffle ticket. Winners are drawn every day through Megapot, an audited on-chain prize pool โ€” how tickets, draws, prizes and verification work.

Trade to earn tickets, and win every day. Every $1 of volume you trade through Polyfox โ€” copies, market orders, limit orders and Auto Trade alike โ€” earns one raffle ticket for that day. When the day ends, winners are drawn and their prizes are paid through Megapot, an on-chain prize pool where apps give away chances to win up to $209,787 every day.

In 10 seconds

  • 1 ticket per $1 traded, counted per UTC day. Buys and sells, taker and maker, all count.
  • Winners are drawn after each day ends (UTC). The draw is weighted by tickets: more volume, better odds โ€” but every ticket can win.
  • Prizes are paid through Megapot, an independent, audited prize pool. Payouts go straight to your wallet.
  • Every draw is verifiable. Our draw is commit-reveal; Megapot's prizes use Pyth Entropy. Tap Verify the draw on any day.
  • No opt-in, no fee, nothing to activate. Just trade.

How it works

  1. Trade. Each confirmed fill adds its dollar volume to your day. Tickets are whole dollars: $17.80 of volume is 17 tickets. Your standing updates within minutes of a fill confirming on-chain.
  2. Watch the board. Open ๐ŸŽŸ๏ธ Daily raffle in the app. Your own place and ticket count sit at the top, the leaderboard shows the top traders of the day, and the day chips let you browse the last week.
  3. The day ends, the draw runs. A few minutes after 00:00 UTC โ€” so trades from the last minutes still count โ€” the draw picks the winners for that day. Their names appear under Winners on that day's board.
  4. Prizes are paid. Winners receive their prize through Megapot, directly to their Polyfox wallet.

Tickets

  • 1 ticket per $1 of volume. Volume is the notional of each fill, before fees. A $250 copy is 250 tickets; a $0.90 trade is 0 tickets on its own, but it still adds to your daily total.
  • Every trade counts. Copy trades, market and limit orders, Auto Trade, buys and sells, and fills where you were the taker or the maker.
  • Per day, in UTC. Tickets belong to the day the trade matched on Polymarket, and the day is measured in UTC. There is no carry-over: each day is a fresh draw.
  • Nothing to activate. Every Polyfox user is in, automatically, from their first trade.

How winners are chosen

The draw is weighted by tickets and provably fair:

  • Before the day starts, Polyfox generates a secret seed and publishes its sha256 commitment. You can see the commitment on the raffle page from the first minute of the day, before any trade has been made โ€” so the seed cannot be chosen to suit a result.
  • After the day ends, the seed is revealed together with the exact ticket list the draw ran over, and the winners are computed from them: for each prize, sha256(seed:day:n) picks a ticket among all tickets still in the draw, and that ticket's owner wins. A user can win at most once per day.
  • Because the commitment was public before trading started, the ticket list is published, and the algorithm is deterministic, anyone can recompute the winners and get the same answer โ€” see Verify a draw yourself.

Tap Verify the draw on any day's board to see that day's commitment, your own entrant key and, once drawn, the seed and a link to the round's data.

Verify a draw yourself

Every drawn round publishes everything the draw used, at a public, unauthenticated URL keyed by the day's Megapot round number (180 = 2026โ€‘09โ€‘20, +1 per UTC day):

https://polyfox.co/api/volume-raffle/rounds/<roundId>

The Verify the draw panel links straight to it. The response contains:

  • round.seedHash โ€” the commitment published before the day started, and round.seed โ€” the secret revealed after the draw. Check sha256(seed) == seedHash.
  • entries โ€” the ticket list the draw ran over, in draw order: each line has a position, an entrant key and its tickets. Entries are sorted by tickets descending, then by entrant key, and only users with at least one ticket are listed โ€” so you can also check the list itself is honestly ordered.
  • winnerCount โ€” how many picks the draw makes (currently 3), and winners โ€” who won, each with their entrant key.

Entrant keys are sha256("<day>:<your user id>"): opaque to everyone else, different every day, and shown to you in the Verify the draw panel so you can find your own line and confirm your ticket count. No user ids ever appear in the data.

To replay the draw, walk the entries once per pick: take sha256("<seed>:<day>:<n>") as a big integer (n = 0, 1, 2โ€ฆ), reduce it modulo the tickets still in the pool, and find the entry whose cumulative ticket count first exceeds that number. Remove it from the pool and repeat. The script below does exactly that with Node.js (no dependencies):

// verify-raffle.mjs โ€” usage: node verify-raffle.mjs <roundId>
import { createHash } from "node:crypto";

const sha256 = (s) => createHash("sha256").update(s).digest("hex");
const roundId = process.argv[2];
const r = await (await fetch(`https://polyfox.co/api/volume-raffle/rounds/${roundId}`)).json();
if (r.round?.status !== "drawn") throw new Error(`round ${roundId} is ${r.round?.status ?? "missing"}`);

console.log("commitment ok:", sha256(r.round.seed) === r.round.seedHash);

const pool = r.entries.map((e) => ({ ...e, tickets: BigInt(e.tickets) }));
const picked = [];
for (let n = 0; n < r.winnerCount && pool.length > 0; n += 1) {
  const total = pool.reduce((sum, e) => sum + e.tickets, 0n);
  const pick = BigInt(`0x${sha256(`${r.round.seed}:${r.day}:${n}`)}`) % total;
  let cumulative = 0n;
  const at = pool.findIndex((e) => (cumulative += e.tickets) > pick);
  picked.push(pool.splice(at, 1)[0].entrant);
}
const published = r.winners.map((w) => w.entrant);
console.log("winners ok:", JSON.stringify(picked) === JSON.stringify(published));

Save it, run node verify-raffle.mjs 180 (or any drawn round), and both lines should print true. If you want to check your own standing too, find the line in entries whose entrant matches the key shown in the app.

Prizes and Megapot

Prizes are paid through Megapot, an on-chain prize pool on Base that lets apps give away chances to win large daily prizes. It is independent from Polyfox, audited by three independent firms, and backed by Dragonfly, Coinbase Ventures and Bankless Ventures.

What a winning ticket pays

Every Megapot prize is $5 or more. On top of that floor, each winning ticket has a chance at every larger tier:

PrizeChance per winning ticket
$5 or moreEvery winner
$10 or more1 in 8
$20 or more1 in 90
$200 or more1 in 1,050
$2,000 or more1 in 14,250
Jackpot โ€” $209,787 on the day of writing1 in 142,500

The tiers are cumulative: a ticket that hits "$200 or more" has also cleared the $10 and $20 tiers. The prize pool and the exact odds are Megapot's and change from day to day; the current figures are always on megapot.io.

  • Why prizes differ. The random number generated for each draw decides the size of each prize separately, so two winners on the same day can receive different amounts.
  • Verifiably random. Megapot's draw uses a random number from Pyth Entropy, which secures over $8 billion of on-chain volume. The number and the resulting winners are recorded permanently on Base; anyone can check the result, and nothing can be changed after the fact.
  • When you are paid. Megapot settles once per day, shortly after its drawing. Your prize is delivered directly to your Polyfox wallet โ€” there is nothing to claim in the bot, and Polyfox never holds the prize on your behalf. The amount shows up next to each winner in the app once Megapot has settled; until then the winners list shows a dash.

The details

  • Draw timing. Days run 00:00โ€“23:59:59 UTC. The draw waits a short grace period after midnight so trades matched in the last minutes are still credited, then runs automatically.
  • Ties. Standings are ordered by tickets, then by entrant key, and the draw walks tickets in that same order โ€” so the leaderboard, the published entries and the draw can never disagree. Your exact volume is never published; only whole tickets are.
  • Zero tickets, no entry. If your day's volume rounds to 0 tickets, you are not in that day's draw. If fewer traders have tickets than there are prizes, fewer winners are drawn.
  • Frozen at draw time. The published ticket list is written in the same transaction as the draw. A fill that reaches us after the draw may still raise your count on the live leaderboard, but it was not โ€” and could not have been โ€” part of that day's draw.
  • History. The app shows the last 7 days. Older draws remain verifiable through the public round results, keyed by Megapot's round number.
  • Nothing is spent. Tickets are earned, never bought. There is no fee for the raffle and it does not change the cost of your trades.

What this program is not

  • It is not a reason to trade more than you otherwise would. Tickets follow your trading; trade your plan.
  • It is not a guaranteed return. Most days most participants do not win. Prediction-market positions can lose their entire value regardless of the raffle.
  • It is not run by Polymarket. The raffle is a Polyfox program, and the prizes are paid by Megapot. Neither is affiliated with Polymarket.

Open Polyfox

Last updated on

On this page