Sketch Pad markSketch Pad
D

Docs

SPECIFICATION SHEET

1 · Overview

Every UTC day has a shape: mountain, W, stairs, cup, spike and 19 more. Coins launched on Sketch Pad are ordinary pump.fun coins, and the program samples each coin's price on chain all day. After midnight it scores how closely the day's chart drew the shape. A coin-day qualifies at 70% or more, with 50 traders through the Sketch router, enough volume and a real price range. Qualified coins share the day's payout from the pot; inside a coin, the traders share it by the volume they traded through Sketch.

Compromise, in plain words. pump.fun coins trade everywhere and have no transfer hook, so Sketch cannot see or tax trades on other venues. The chart and the score are on chain and count every trade. Only trades through the Sketch router count as traders and share the pot. Trade on Sketch to be in the drawing.

StageWhenWhoWhat happens
Launchany timethe devpump create_v2 by CPI, creator = the coin's Fees account; launch fee into the pot. The coin plays from the next day.
Draw00:00–24:00 UTCthe market + the keeperprice sampled into 144 ten-minute sub-windows; router trades counted per wallet
Scoreafter the day, 1 h windowanyonescore computes the published formula for each coin-day
Finalizeafter the score windowanyone≥ 1 qualified coin: 50% of the pot is reserved; none: the pot rolls
Claim7 d after finalizeanyone (pays the trader)each counted trader's share; the keeper pushes unclaimed ones halfway
Expireafter the claim windowanyonewhatever was not paid returns to the pot

2 · The day and its shape

day = floor(unix time / 86400). The shape of day d is u64_le(sha256("sketch" || u64_le(d))[0..8]) mod 24. It is known in advance by design: that is the game. The 24 templates are 48 points each (i8, −100..100), stored in the program; the catalogue draws them all.

3 · The sampler

sample is permissionless (the keeper sends it; the coin page has the same button). It reads q = log2(SOL reserves) − log2(token reserves) in Q16 from the pump curve, or from the coin's canonical PumpSwap pool after migration.

  • One stored value per 10-minute sub-window. The first reading of a sub-window is stored; later readings replace it only if they are strictly closer to the previous sub-window's value. A [pump, sample, dump] bundle stores a price nobody held, and the next honest reading undoes it: painting a point needs the price held, exposed to every seller.
  • sample must be alone in its transaction (other samples, ComputeBudget and System only).
  • Bucket = median of its 3 sub-windows (2 → mean, 1 → it); a bucket with no sample carries the previous one.

4 · The score (published formula)

Integer math in the program; the site runs the same function (the kit's mirror, bit for bit) on your trace and on every live chart.

  1. x = the 48 bucket values (Q16 log2 price), t = the day's template.
  2. Centre: x′i = 48·xi − Σx, t′i = 48·ti − Σt. A flat chart scores 0.
  3. Pearson r = Σ(x′t′) / √(Σx′² · Σt′²).
  4. z-normalise both series (Q12), DTW with a Sakoe-Chiba band of 3 buckets, cost |zx − zt|; D = the path cost at (47, 47).
  5. dtw = max(0, 1 − D / (48 × 0.6))  (0.6 z per point = no resemblance).
  6. score = ½ max(0, r) + ½ dtw.

Calibration on 48,000 random-walk days: a random chart reaches 70% on about 1.2% of coin-days; a chart drawn with 20% noise qualifies 97% of the time. A perfect drawing of any template, at any scale or offset, scores 100%.

5 · Qualifying

The first failing reason is recorded on chain:

#ReasonRule
1launched that daycoins play from the day after their launch
2too few samples≥ 36 of 48 buckets sampled
3price range too smallmax / min of the 48 buckets ≥ 1 + 20%
4shape not drawnscore ≥ 70%
5too few traders≥ 50 wallets with ≥ 0.05 SOL counted through the router
6volume too lowcounted router volume ≥ 5 SOL

6 · The pot

Each coin's pump.fun creator is its Fees account on Sketch. Anyone can collect: new creator fees split 50% to the pot, 30% to the dev, 20% to the treasury. Launch fees (max(0.02 SOL, 2.5% of the dev buy)) and donations go to the pot too. A day with qualified coins reserves 50% of the pot; a day without rolls it to tomorrow.

7 · The claim

For a counted wallet on a qualified coin-day:

claim = min( payout × wcoin / W × counted / Vcoin , payout × 5% , fees paid × 70% )

In plain words: the prize is a fee-back. A wallet gets at most 70% of the pump fees it paid on that coin-day, so for most traders the fee cap is what they receive.

wcoin = score × the coin's counted volume, W = the sum over qualified coins, counted = max(the wallet's buys, sells) that day (a round trip counts once). The fee cap means no wallet, not even the coin's dev with the creator-fee rebate, gets back what it paid in fees: washing never pays. Sums are floored; dust and capped remainders return to the pot at expire.

8 · Worked example

The pot holds 20 SOL. Today's shape is a W. Two coins qualify: A scores 82% with 30 SOL of counted volume, B scores 74% with 10 SOL. Payout = 50% of 20 = 10 SOL. wA = 0.82 × 30 = 24.6, wB = 7.4, W = 32. Coin A gets 10 × 24.6 / 32 = 7.69 SOL. A wallet that traded 1.5 SOL on A (and paid 0.019 SOL in pump fees) would get 7.69 × 1.5 / 30 = 0.38 SOL, capped at 5% of the payout (0.5 SOL) and at 70% of its fees: 0.013 SOL. The fee cap binds for small wallets; the rest returns to the pot.

The transactions: launch (dev) → trade through the router (traders) and sample (keeper) all day → score each coin-day → finalize → claim (anyone, paid to the trader) → expire → close_td / close_day / close_round return every rent to whoever paid it.

9 · Parameters (live from the config account)

ParameterValueMeaning

Params apply to coins launched and days opened after a change; a day's rules are frozen at its first activity.

10 · Program reference

Program id

AccountSeedsHolds
Config["config"]admin, treasury, day length, params, the vault's books and lifetime stats
Vault["vault"]pot + reserved payouts + the treasury share
Coin["coin", mint]dev, name, fee split, sampler state, stats
Fees["fees", mint]the coin's pump.fun creator (creator fees land here)
Round["round", day]the day's shape, rules, results, payout
Day["day", mint, day]144 samples, router totals, score
TraderDay["td", mint, day, wallet]a wallet's buys, sells, fees on one coin-day
InstructionWhoWhat
launchthe devpump create_v2 + optional dev buy, alone in its tx
sampleanyoneprice into today's Day under the sub-window rule
tradea traderthe router: pump / PumpSwap buy or sell by CPI, books the TraderDay
collect / unwrap_feesanyonecreator fees into the pot / dev / treasury split
claim_dev / pay_treasuryanyonepays the dev / the treasury only
donateanyoneSOL into the pot
score / finalize / expireanyonethe day's close
claimanyonepays a counted trader of a qualified coin-day
close_td / close_day / close_roundanyonerent back to whoever paid it
update_config / set_treasury / set_paused / propose_adminadminsee Admin powers

11 · Errors

CodeNameMessage

12 · Verify on chain

  1. Recompute today's shape: sha256 of "sketch" followed by the day number (u64 little endian), first 8 bytes as u64 LE, mod 24.
  2. Read any Day account (["day", mint, day]): 144 samples + a bitmap. Rebuild the 48 buckets with the median rule and run the formula above: you get the same score the program stored.
  3. Check the vault: lamports = rent floor + pot + reserved + treasury owed.
  4. Every claim transaction pays the TraderDay's own wallet, never a third party.
  5. The lifetime books hold: launch fees + pot from fees + donations = pot + reserved + paid out.

13 · Admin powers

THE ADMIN CAN

  • change params inside hard bounds (for coins launched and days opened afterwards)
  • pause launches (trading, sampling, scoring and claims keep working)
  • change the treasury address
  • hand the admin role over in two steps
  • close the pad: pause launches; every pot, claim and rent stays claimable by the same instructions

THE ADMIN CANNOT

  • move the pot, reserved claims or anyone's fees
  • change a day's rules after its first activity
  • score, qualify or pay a coin by hand
  • stop anyone from sampling, scoring, finalizing or claiming
  • change pump.fun's own admin powers over coins (pump can reassign creator fees)

14 · Risks

  • Only router trades share the pot; the chart counts every trade on every venue.
  • A held pump on a thin coin can paint a point. It is real trading, exposed to every seller: that is the game.
  • A random chart reaches 70% on about 1.2% of coin-days; it still needs 50 router traders and volume.
  • Liveness: if nobody samples, buckets carry forward (a flat chart does not qualify); if nobody scores inside the window, that coin-day misses the payout. Anyone can do both.
  • The program is upgradeable. pump.fun keeps admin powers over its coins.

15 · FAQ

How much can I win?
At most 70% of the pump fees your wallet paid on that coin that day, and at most 5% of the day's payout. Sketch is a fee-back prize for trading a coin that drew the shape, not a jackpot: a trader who paid 0.02 SOL in fees gets back up to 0.014 SOL.
Why do my trades on another app not count?
pump.fun coins have no transfer hook: the program only sees trades that go through it. The chart still moves.
Can I wash-trade my way into the pot?
No. A round trip counts once, and no wallet gets back more than 70% of the pump fees it paid.
I launched today. Why is my coin not in the drawing?
Coins play from the day after their launch, so nobody can launch into a shape half drawn.
Nobody qualified. Where is the money?
In the pot, for tomorrow. It only pays out on a day with a qualified coin.
Do I have to claim?
You can claim from Mine any time in the claim window; the keeper pushes unclaimed claims to your wallet halfway through it.