Slabpad

Docs

How the pot buys a card

Every coin launched on Slabpad sends 100% of its creator fees into one pot. The pot buys graded trading cards one after another, never on a timer: the moment it holds the price of the card the devs voted for, that card is bought, a verifiable random number picks one ticket, and the dev who owns that ticket takes the slab. Then the next card.

1 FEES2 WEIGHT3 VOTE4 BUY + DRAW Every creator fee ofevery coin, into one pot sqrt of what your coinsbrought since the last card Most weight = the nextcard the pot buys Bought at once; the oracle'snumber picks one ticket

01Epochs, not rounds

An epoch is the time between two purchases. Exactly one epoch is open at any moment. There is no clock: an epoch ends when its card is bought, and the next one opens in the same instruction.

Epoch stateWhat is trueWhat anyone can do
OpenFees are coming in. Every collect adds weight and a ticket for the coin's dev. Devs vote. The card can be bought once the pot holds its price and the epoch reached its minimum age (so every draw has time to gather devs).Collect fees into the pot, vote (devs with weight), launch coins, fill the leading lot once the pot holds its price.
FilledThe card is in the epoch's vault; the pot paid exactly its price. Tickets are frozen. The next epoch is already open.Request the draw.
DrawingThe program committed its own randomness account to the oracle.Settle the draw with the winning ticket once the oracle revealed.
SettledThe winner is written into the epoch.The winner claims the card. It never expires.
ClaimedThe slab is in the winner's wallet. The physical card is redeemed at Collector Crypt.Close the epoch's tickets and weight accounts to return their rent.

02Weight: the square root of what you brought

Every collect moves a coin's waiting creator fees into the pot and credits them to the coin's dev in the open epoch. The dev's weight is isqrt(contribution in lamports). The growth of his weight becomes one ticket: a range of numbers [start, end) on the epoch's ribbon. Ranges are contiguous; the ribbon's length is the sum of all weights.

03The vote

Up to 8 lots are on the mat. Each is a real tokenized slab (a Collector Crypt programmable NFT) with a fixed price, grade, cert number, set and year. A new lot goes live only after a public notice of 24 h, a delisting takes effect only after the same notice (after it, the lot can no longer be voted for, bought or lead), and nothing about a listed lot can be edited.

A dev votes with his whole current weight. A re-vote moves all of it. When new fees raise his weight, the tally of the lot he voted for follows (the keeper passes that lot with every collect). The leader is the lot with the most weight in the open epoch; a tie goes to the lower lot number; with no votes at all, the lowest live lot leads. Tallies restart every epoch.

04The fill

As soon as the pot holds the leader's price, the epoch is at least 1 h old and it has tickets, anyone who holds that exact slab may call fill_card: in one instruction the slab moves into the epoch's vault (a Token Metadata transfer, as Collector Crypt slabs are programmable NFTs) and the pot pays exactly the price to whoever delivered it. In practice the keeper operator buys the slab on the market with its own money and is repaid by the fill, or the seller fills directly. If nobody delivers, the pot keeps growing; nothing is lost.

The program checks the mint, one-of-one supply, zero decimals, the token standard and that the vault received exactly one token. A fake card, a copy or a partial list of the live lots is refused.

05The draw

After a fill anyone requests the draw: the program commits its own Switchboard On-Demand randomness account (its PDA is the only authority, so nobody can bring or re-commit a randomness account). Once the oracle reveals, settle_draw computes r = u64_le(value[0..8]) mod tickets_total; the ticket with start ≤ r < end wins, and its dev is written as the winner. Draws run in epoch order. If the oracle stays silent past the draw timeout, the draw can be requested again with a fresh seed.

06Launching a coin

The launch creates the coin on pump.fun with the coin's own fee address (a program address with no key) as its creator, plus your optional first buy, in one transaction. The launch fee is 2.5% of the first buy actually spent, paid to the pad's treasury. Your first buy pays pump's normal trading fee; the creator share of it goes to the pot like every later trade.

07A worked example

The pot holds 2.00 SOL after the last card. The leading lot costs 3.60 SOL. Three devs trade their coins this epoch:

DevFees his coins broughtWeight = isqrt(lamports)Share of the ribbon
Ada1.00 SOL31,62258.5%
Bo0.40 SOL20,00037.0%
Cy0.006 SOL2,4494.5%
Total1.406 SOL54,071100%

Pot = 2.00 + 1.406 = 3.406 SOL: short of 3.60 by 0.194 SOL. The next 0.194 SOL of fees tops it up (and adds weight to whoever's coins bring it); the keeper delivers the slab in the next seconds, the pot pays 3.60 SOL, the new epoch opens with the remainder. The oracle reveals a value whose first 8 bytes read as, say, 18,446,744,073,709,000,000; mod 54,071 = r. The ticket holding r wins. With linear weight Cy would have 0.4%; with the square root he holds 4.5%.

08The transactions

Button on the siteInstructionSignerEffect
Consign coinlaunchyoupump create_v2 with the fee address as creator + first buy; launch fee to the treasury. Must be alone in its transaction.
Move in (coin row, Mine)collectanyonepump collect_creator_fee into the coin's fee address, everything above rent into the pot; weight + ticket for the dev.
Votevotea dev with weighthis whole weight onto the lot; a re-vote moves it.
Deliver the slabfill_cardwhoever holds the leader's slabslab into the vault, price out of the pot, next epoch opens.
Request / settle the drawrequest_draw, settle_drawanyonecommit the randomness, then pick the winning ticket.
Claim (draw, Mine)claim_cardthe winnerthe slab from the vault to the winner.
Claim everything (Mine)claim_card, collect, close_ticket, close_dev_epochyoucards you won, fees of your coins, rent of finished tickets you paid for.

09Parameters

ParameterValue nowMainnet default · boundsWhat it does

Reading the live config.

10Program

Program id · (explorer). Anchor 0.31.

AccountSeedsHolds
Config["config"]admin, treasury, params, open epoch, next draw, pot booked, totals, randomness account
Pot["pot"]system account holding the pot
Fees["fees", mint]the coin's pump creator (no key)
Coin["coin", mint]dev, launch time, fees total, collects, name, ticker
Epoch["epoch", id]state, tickets total, devs, the card (mint, price, title, grade), the draw (randomness, seed slot, value, r, winner)
DevEpoch["devep", epoch, dev]contribution, weight, tickets, vote
Ticket["ticket", epoch, seq]dev, coin, range [start, end)
Candidate["cand", idx]the lot: slab mint, price, grade, cert, title, set, year, image, notice times, tally
Card vault["cardvault", epoch]owns the epoch's slab until the claim
VRF authority["vrf"]the only authority of the pad's randomness account

11Errors

Rendered from the program's IDL: what the site shows when the program refuses a transaction.

CodeNameMessage

12Verify on chain

13Admin powers

The admin canThe admin cannot
List a lot (with its price, within the price bounds) after a public notice; delist a live lot after the same notice.Edit a listed lot, list without notice, or fill a card that is not leading.
Change parameters within their bounds (they apply to future coins, listings and epochs).Move the pot, a weight, a vote, a ticket or a card. Pick a winner.
Pause new launches; set the treasury (launch fees); set a treasury cut of creator fees (default 0, at most 10%, copied into each coin at launch).Change the cut of a coin that already launched. Stop collects, fills, draws or claims.
Create the pad's randomness account once; replace it only while the waiting draw timed out unrevealed.Re-roll a revealed draw.

14Risks

15FAQ

Does the team keep any cards?

No. A card leaves the vault only to the drawn winner, who must be a dev with a ticket in that epoch.

Why can the pot hold the price and still wait?

Every epoch has a minimum age before its card can be bought. Without it, the first dev to bring fees after a purchase could fill the next card alone and win it with certainty. During the wait, fees keep adding tickets for everyone.

What if the leading lot changes right before the fill?

The fill must name the lot that leads at that moment, with every live lot passed so the program can check. A fill for any other lot is refused.

Do my old tickets count for the next card?

No. Weight is per epoch. Fees collected after a fill count for the new epoch.

Can I increase my chance?

Only by bringing more fees, and the square root damps it: four times the fees for twice the weight.

Who pays the rent of tickets?

Whoever runs the collect (usually the keeper). It comes back to that payer when the tickets are closed after the draw.