Docs

How Enftees works

A memecoin launchpad where the creator fees do one thing: buy the floor of a Solana NFT collection and hand the NFTs to the coin's holders, or burn them. Coins launch on pump.fun; one Anchor program does the parts you would otherwise have to trust a wallet for.

How it works

  1. 01
    Launch
    You create a pump.fun coin from the Enftees launch page and pick a listed collection. One transaction does two things: pump.fun create with the coin's creator set to a router PDA derived from the mint, then Enftees register_coin, which checks the bonding curve really names that router as creator and locks in the collection and NFT policy.
  2. 02
    Trade
    People trade on the pump.fun curve, later on PumpSwap. pump.fun accrues creator fees for the coin's creator, which is the router. Only the program can sign for the router.
  3. 03
    Sweep
    Anyone calls claim_fees and harvest. The router pulls its fees from pump.fun and splits them 80% to the collection vault, 20% to the treasury. When a vault can afford a floor listing, the keeper calls sweep; the program only lets SOL out if a verified NFT comes in under the posted cap.
  4. 04
    Settle
    Each NFT is charged to the coin whose fees paid for it, and that coin's policy decides what happens: raffled to its holders, or burned. Both are permissionless to finish.

Fee split

Every lamport that reaches a router is split the same way, forever: 80% to the paired collection's vault, 20% to the protocol treasury. The split is a constant in the program. Nothing goes to the coin's creator directly; your upside as a creator is the coin.

The router is a system-owned PDA with seeds ["router", mint]. It is rent-funded at launch so tiny fee claims never fail, and it has no owner key.

What happens to the NFTs

Airdrop to holders

Each NFT goes to one holder of the coin, drawn at random with odds proportional to balance.

Burn

Each NFT is burned with the SPL token program. The collection's circulating supply shrinks for good.

Only fees earned by trading count. claim_fees measures how much the router gained during the CPI into pump.fun; only that amount is credited to the coin. SOL sent to a router or vault any other way is a donation: it still buys NFTs, but buys no say over them.

Burn money and raffle money never mix. A vault is shared by every coin paired with its collection, so one NFT can be paid for by several coins. A sweep only succeeds when every coin charged for it has the same policy.

The vault rule

A vault is a system-owned PDA (["vault", collection]) that holds SOL and can only turn it into NFTs of one collection. Every sweep must pass all of these checks in the same instruction, or it reverts:

SPEND
≤ floor cap, exactly 1 NFT in
NFT
verified member of the collection
TARGET
allow-listed marketplace + instruction only
ALLOW-LIST
48h timelock on any addition
SPLIT
80 / 20 vault / treasury
CAP TTL
1h, keeper-posted
SNAPSHOT
public 30m, re-openable
DRAW
future slot hash, pinned on request
CUSTODY
NFTs leave by raffle or burn
WITHDRAW
no instruction, on any vault
HARVEST
permissionless
PAIRING
fixed at launch, forever
POLICY
fixed at launch, no setter exists
ATTRIBUTION
by fees earned, not paid in
  • The marketplace program and the instruction discriminator must both be on the allow-list (Tensor / Magic Eden buy instructions).
  • The vault's token account for the NFT must go from 0 to 1, with no delegate or close authority set.
  • The NFT's Metaplex metadata must carry a verified collection equal to the listed collection.
  • SOL spent must be ≤ the floor cap and ≤ the caller's max. The cap is posted by the keeper and expires after an hour.
  • The vault must still be owned by the System Program afterwards, so no CPI can hijack it.

Raffles

  1. Open. The keeper snapshots holders (excluding the bonding curve, pool and protocol accounts), builds a Merkle tree of ticket ranges and calls open_raffle with the root and a link to the full list.
  2. Challenge. For 30 minutes the snapshot is public and no draw can happen. Anyone can fetch the list and recompute the root. A bad root can be replaced, which restarts the window.
  3. Draw. Anyone calls request_draw. The program pins the raffle to a slot 8 slots (~3s) in the future, whose hash does not exist yet.
  4. Resolve. Anyone calls resolve_draw. The program reads that slot's hash from the SlotHashes sysvar and derives the winning ticket from hash, root and prize address.
  5. Deliver. Anyone submits the winner's leaf and Merkle proof with claim_prize; the vault sends the NFT to the winner's token account.

If nobody resolves within ~512 slots the hash ages out of the sysvar; resolve_draw then re-pins to a fresh future slot and increments a public repin_count, so a raffle always settles and any withholding is visible.

Trust model

What we don't paper over:

  • Holder snapshot. The Merkle root is the keeper's word. The challenge window makes a bad root visible, but nothing on-chain rejects one.
  • Slot-hash randomness. Nobody can predict the hash at request time, but the leader of the pinned slot could skip their block to shift to the next slot's hash. For high-value collections, swap in Switchboard or ORAO VRF (same state machine, different resolve step).
  • Keeper discretion. The keeper picks which listing to buy, within the floor cap. It could buy the priciest listing under the cap.
  • Admin allow-list. The admin chooses which marketplace programs the vault may call. Every addition waits 48 hours before it works; disabling is instant.
  • Token standards. v1 sweeps classic Metaplex NFTs. pNFTs and Metaplex Core need extra transfer paths and are on the roadmap.

Programs & accounts

Enftees program
not deployed yet
pump.fun
6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
PumpSwap
pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA
Token Metadata
metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s
Config PDA
["config"]
Collection PDA
["collection", collection_key]
Vault PDA
["vault", collection]
Coin PDA
["coin", mint]
Router PDA
["router", mint]
Prize PDA
["prize", collection, id_le]

FAQ

Do I need the collection's permission?+

No. Collections are listed by the admin, and a listed collection is fair game for any coin. The vault buys on the open market at floor; the collection's team is not involved and receives nothing beyond normal royalties.

What happens after graduation?+

pump.fun migrates the coin to PumpSwap. The coin creator on PumpSwap is still the router PDA, so creator fees keep accruing to it (as wSOL). The keeper calls claim_fees against PumpSwap and unwrap_fees, then harvest, and the same 80/20 split keeps flowing.

Who is the keeper and what can it do?+

An operator key. It can post floor caps (expire after 1h), run sweeps through allow-listed marketplaces, and open raffles with a holder snapshot. It cannot move SOL out of a vault, cannot pick or re-roll a winner, and cannot stop a raffle from settling: anyone can request the draw, resolve it and deliver the NFT.

Can the vault be drained?+

Not by any key. SOL only leaves inside a sweep that provably brought a verified NFT in under the cap. NFTs only leave through a delivered raffle or a burn. The admin can pause sweeps or rotate the keeper, but there is no withdraw instruction. The admin could allow-list a malicious marketplace program, which is why every allow-list change waits 48 hours before it can be used.

Can a creator change what happens to the NFTs later?+

No. The policy is written into the coin account by register_coin and there is no instruction that writes it again. Same for the collection.

Can someone buy their way to an NFT by funding a vault?+

They can send SOL, and it will buy NFTs. It will not buy them the NFT. Only lamports that arrive through claim_fees (the launchpad paying creator fees) count as earned. Anything else is booked as a donation, which can top up a purchase but never owns it.

The vault is shared. Whose NFT is it?+

The coin whose earned fees covered most of the purchase. Every coin charged for one NFT must share the same policy, so an NFT is never burned that another coin's holders part-funded expecting a raffle.

Why does my coin show fees but the vault is empty?+

Fees sit in pump.fun's creator vault until someone calls claim_fees and harvest. The keeper does it every ten minutes; you can also press Harvest on the coin page.