documentation
how jpegged.fun works. creator fees are routed to a non-redirectable vault; NFT holders can burn items for a pro-rata share. this page covers the lifecycle, the math, the pipeline, and the custodial parts.
overview
jpegged.fun is a pump.fun launchpad. tokens arrive with generated NFTs. trading fees that token earns become that collection's redeemable floor.
this is not a promise — it's a consequence of where the fees are pointed on-chain, and of arithmetic.
who this is for:
- creators — describe a theme, get rendered art, and launch a token backed by its fee stream.
- holders — mint via token burns, monitor the rising floor, and redeem at will.
- traders — view hard backing numbers beside market prices to clearly see premium or discount.
the core mechanic
pump.fun routes creator fees to a specific address. unlike standard launchpads, jpegged.fun designates the collection's vault as the creator.
because the creator field is fixed at token creation, neither deployers nor jpegged.fun can redirect funds. the only account that can ever claim is the vault itself.
lifecycle of a collection
- generate — a theme prompt becomes a trait taxonomy. rendered as single images. status: generating → ready.
- launch — a coin is created with the vault as creator. launcher signs; jpegged.fun never holds keys. status: ready → live.
- trade — bonding curve buys/sells accrue fees to the vault's fee PDA. status: live → graduated.
- mint — holders burn token supply to claim unminted NFTs. burning is a supply sink.
- redeem — burn an NFT to receive vault ÷ circulating SOL. no deadlines or expiry.
the vault
exactly one vault exists per collection. it is set as the pump.fun coin creator and holds all backing.
sha256(masterSecret ‖ "|vault|" ‖ collectionId). database compromises reveal nothing spendable.two balances, one number. backing exists as SOL in the vault and unswept fees in the pump PDA.
| component | counted in the floor |
|---|---|
| vault balance (minus rent reserve) | counted |
| unswept fees (net of platform cut) | counted |
| rent reserve (0.0015 SOL) | not counted |
| mint proceeds | n/a — burns tokens, pays no SOL |
backed floor math
the backed floor is the amount of SOL one NFT is worth if you burn it right now.
- vaultLamports — vault SOL in lamports, minus the reserve.
- unsweptNet — fees still in the pump PDA, net of the platform cut.
- circulating — minted and unredeemed NFTs.
numbers are read live from the chain. the database stores no prices, so a stale floor is not a failure mode here.
| vault (SOL) | circulating | backed floor (SOL) |
|---|---|---|
| 3 | 24 | 0.1250 |
| 6 | 24 | 0.2500 |
| 12 | 24 | 0.5000 |
| 24 | 24 | 1.0000 |
the redemption invariant
removing one NFT removes exactly its pro-rata vault share, making the number a floor rather than a queue.
the floor remains mathematically unchanged post-redemption.
implications:
- monotonically non-decreasing — redemptions leave it flat; sweeps raise it.
- order does not matter — no bank runs; waiting is never punished.
- closed-end fund NAV — the gap between backed floor and market floor is a premium/discount.
- last NFT — at c=1, the holder gets the entire remaining vault.
fees, in full
three places value is taken, none hidden.
| fee | who | effect |
|---|---|---|
| pump.fun trading fee | protocol | none — never enters vault |
| creator fee | vault | raises floor |
| platform fee (20%) | jpegged.fun | remaining 80% raises it |
the pump program sets the creator rate. the platform cut applies at sweep time and is already deducted from UI displays.
the art pipeline
generated in two passes: design taxonomy, then render.
- taxonomy design — a model builds the base subject, ordered trait layers, weighted values, and prompt clauses.
- trait draw — draw traits weighted per layer. rarity for an item is the product of its chosen values' probabilities. rejects duplicates.
- render — items rendered as single images from assembled prompts, under a $1 ceiling per collection.
launching a token
a single transaction creates the coin and optionally executes a creator buy atomically. jpegged.fun never holds the keys that pay for it.
fields:
creator— set to collection vault. unchangeable.name / symbol— creator chosen.uri— pump-compatible metadata JSON.devBuySol— optional atomic buy to prevent front-running.mintPriceTokens— token burn cost for an NFT.
minting by burning
minting burns tokens permanently rather than costing SOL. the vault is fed by trading fees alone.
- prepare — reserve item, build burn tx, check balance upfront to prevent wallet simulation failures.
- sign and submit — wallet signs. burn must land before item assignment.
- confirm — verify confirmation, then assign the item.
sweeping fees
moves fees from pump PDA to vault. it is permissionless — anyone may trigger a sweep on any collection.
- vault signs, caller pays ~0.000005 SOL network fee.
- platform cut (20%) is appended atomically here.
- does not change floor math; only changes where SOL sits for immediate payout.
- graduated collections must sweep from both curve and AMM programs.
redeeming an NFT
holder gives up NFT for pro-rata vault SOL.
- sweep first — pull pending fees to ensure payout is against true balance.
- compute the share — calculate
floor(backedFloor × 10⁹)lamports. verify ownership/redeemed status. - pay and retire, atomically — item marked redeemed, SOL sent. floor remains unchanged.
a worked example
a 24-item collection accumulating 12 SOL over its lifetime:
| event | vault (SOL) | circulating | backed floor |
|---|---|---|---|
| launch | 0 | 0 | — |
| 24 minted | 0 | 24 | 0.0000 |
| fees swept +12 | 12 | 24 | 0.5000 |
| redeem | 11.5 | 23 | 0.5000 |
| sweep +2.3 | 13.8 | 23 | 0.6000 |
| redeem | 13.2 | 22 | 0.6000 |
architecture
a next.js app router app. no economics are persisted: the database records what exists — every price is derived at read time.
| layer | choice |
|---|---|
| app | next.js, app router (force-dynamic economics) |
| ui | tailwind, terminal aesthetic |
| chain | pump-sdk, web3.js, helius RPC |
| data | postgres / storage, birdeye |
| art | taxonomy model, image diffusion, sharp |
source layout:
lib/pump/— tx building, curve state.lib/vault/— floor math, sweep construction.lib/art/— taxonomy, compositing.lib/market.ts— live economics.app/api/— route handlers.
HTTP API
JSON routes. tx builders return base64-encoded unsigned strings. PATCH confirms signatures before state changes.
| method | endpoint | purpose |
|---|---|---|
| GET | /api/status | checks integrations |
| GET | /api/collections | live economics for all collections |
| POST | /api/collections/generate | start art pipeline |
| GET | /api/collections/generate | poll progress |
| GET | /api/collections/[slug] | derived economics for one collection |
| GET | /api/collections/[slug]/items | items with rarity/ownership |
| PATCH | /api/collections/[slug]/cover | replace cover |
| POST | /api/collections/[slug]/launch | build create(+buy) tx |
| PATCH | /api/collections/[slug]/launch | confirm launch signature |
| POST | /api/collections/[slug]/mint | reserve item, build burn tx |
| PATCH | /api/collections/[slug]/mint | verify burn, assign item |
| POST | /api/collections/[slug]/sweep | sweep creator fees |
| PATCH | /api/collections/[slug]/sweep | confirm sweep |
| POST | /api/collections/[slug]/redeem | burn NFT, pay share |
| GET | /api/portfolio | wallet items and redeemable value |
| GET | /api/claim | pending creator fees |
trust model & known gaps
what you do not have to trust:
- fee accrual (enforced by pump.fun).
- where swept fees go (only vault can claim).
- the launcher's keys (user signs).
- published numbers (checkable independently).
what you do have to trust, today:
- vault custody (v1) — vaults are server-held keypairs. an anchor program replacement is intended for trustlessness.
- off-chain NFT custody — minting records ownership via burn signature, but the NFT is not on-chain yet (metaplex core planned).
- no marketplace layer — market floor null until listings exist.
- mainnet-only testing — devnet paths cannot be tested end-to-end without real SOL.
glossary
| term | meaning |
|---|---|
| backed floor | vault balance plus unswept net fees, divided by circulating NFTs. |
| market floor | lowest current ask (null without marketplace). |
| premium / discount | market relative to backed floor. |
| vault | the per-collection account holding all backing. |
| fee PDA | where pump.fun accrues fees pre-sweep. |
| sweep | moving fees from PDA to vault (permissionless). |
| circulating | minted, unredeemed NFTs. |
| mint price | token burn cost for an NFT. |
| graduation | curve completion migrating token to AMM. |
| rarity score | probability product of item traits. |