Docs · Protocol
Security & verification
Check every claim yourself: the programs, their authorities, a quote's config, a launch's vault, and the events it emits.
The checklist
- The Backstock program 69H4…8Yzq ↗ is deployed and executable.
- The venue is the launch’s launchpad: Raydium LaunchLab LanM…J3uj ↗ then Raydium CPMM CPMM…KP1C ↗ (Backstock, StonkFun, bonk.fun, Raydium); pump.fun 6EF8…wF6P ↗ then PumpSwap pAMM…fXEA ↗; or Meteora DBC dbci…MaqN ↗ then DAMM v2 cpam…1sGG ↗. The launch’s
launchlab_platformnames it (a LaunchLab platform config, or the pump.fun / DBC program id). - A launch’s quote is enabled by its config at
["quote", quote_mint], which holds the raise bounds, the vault floor and the LaunchLab global config for that quote. Each change emitsQuoteConfigured. launch(orlaunch_venue) creates the coin and buys the bundle in one instruction of one transaction, so the launch transaction is the coin’s first trade. ItsLaunchedevent records the raise, the launch fee, the bundle’s quote and tokens and the vault’s quote.- The quote vault and token vault are owned by
["authority", launch]: only the program can sign for them, through the agent trades,collect_fees,payout_backers,claim_backer_fees,wind_down,admin_withdraw_vaultanddev_withdraw_vault. - The launch account’s
termshold the fee split, the payback rule, the vault floor and the agent limits you backed under. - The platform account’s
adminis the only key that can calladmin_withdraw_vault, and itsfee_recipientis where those withdrawals go; itsdev_authorityis the only key that can calldev_withdraw_vault, which pays the dev key itself. - Every vault movement is an event:
Trade(venue 0 = LaunchLab curve, 1 = CPMM, 2 = pump.fun curve, 3 = PumpSwap, 4 = DBC curve, 5 = DAMM v2),Graduated,CreatorFeesCollected,BackersPaid,BackerFeesClaimed,WoundDown,VaultWithdrawn(admin) andVaultWithdrawnByDev(dev key). Withdrawals are listed on the launch page and at/api/launches/:mint/activity?type=vault_withdrawn.
- 69H4…8Yzq
Program deployed
Program account
- 69H4…8Yzq
Upgrade authority
Couldn’t reach the RPC — check the program on the explorer
Mint and freeze authority
Each coin is created by its launchpad's venue with a fixed supply and the mint authority revoked; check its authorities on the explorer
Launch authority
One per launch, derived from the launch: owns its quote vault and token vault · withdrawals only by the admin key or the dev key, each an on-chain event
Terms frozen per launch
Creator-fee split, payback rule, agent limits, vault floor and launch fee, copied into each launch account at creation
Agent authority
Can only sign agent_buy, agent_sell and payout_backers, within each launch’s frozen limits; every trade is a Trade event
Verified quote mints
| Quote | Mint |
|---|---|
| SOL (WSOL) | So1111…111112 ↗ |
| USDC | EPjFWd…yTDt1v ↗ |
| SPYx | XsoCS1…BbDF2W ↗ |
| NVDAx | Xsc9qv…mx9qEh ↗ |
QQQx, TSLAx, AAPLx and MSTRx are enabled the same way. Compare any quote chip’s mint with the issuer’s published address before backing; the QuoteConfigured events are the authoritative list.
Derive the accounts yourself
import { PublicKey } from "@solana/web3.js";
import { getAssociatedTokenAddressSync, TOKEN_2022_PROGRAM_ID, TOKEN_PROGRAM_ID } from "@solana/spl-token";
const PROGRAM = new PublicKey("69H4mKjPcR3Ncsk8orfSDAx6UDWz98szmFm3L4qU8Yzq");
const pda = (...seeds: (Buffer | Uint8Array)[]) => PublicKey.findProgramAddressSync(seeds, PROGRAM)[0];
const launch = new PublicKey("<launch>");
const quoteMint = new PublicKey("<quote mint>");
const authority = pda(Buffer.from("authority"), launch.toBuffer()); // owns both vaults
const mint = pda(Buffer.from("mint"), launch.toBuffer()); // the coin
const quoteConfig = pda(Buffer.from("quote"), quoteMint.toBuffer());
// The coin's token program: Token-2022, except bonk.fun launches (SPL Token + Metaplex metadata).
const coinProgram = TOKEN_2022_PROGRAM_ID; // or TOKEN_PROGRAM_ID for a bonk.fun coin
const tokenVault = getAssociatedTokenAddressSync(mint, authority, true, coinProgram);
// quote vault: getAssociatedTokenAddressSync(quoteMint, authority, true, <the quote's token program>)Every instruction
Raise
- create_
launchCreatorCreate fee (SOL) → fee recipient; rent → the launch; opens the raise Opens a raise in one allowlisted quote asset (SOL, USDC or a tokenized stock), within that quote's raise bounds: min and max raise, per-wallet cap, deadline, optional whitelist, on the launchpad the creator picked (Backstock's own, or an enabled registry listing). Pays the flat SOL create fee, funds the rent for the launch's accounts, creates its quote vault, and freezes the launch fee, agent limits, creator-fee split, payback rule, vault floor and the venue's curve start into the launch. Fails if the platform's or the venue's terms changed after you signed.
- depositAnyone (whitelisted wallets, when the raise has a whitelist)Your quote → the launch's quote vault
Joins the raise as a backer, in the launch's quote asset. Deposits are clipped to the room left under the max raise and the per-wallet cap.
- cancel_
launchCreatorNothing — opens full refunds The creator can abort a raise before it launches. Every backer can then refund 100%.
- refundBackerYour deposit → you, in the quote asset
Returns the full deposit when the raise missed its minimum by the deadline, was cancelled, or met it but wasn't launched within 3 days of the deadline.
Launch and venue
- launchCreator once the minimum is met; anyone once the deadline passed or the raise is fullRaise → 1% launch fee → treasury; coin created on its LaunchLab platform; bundle buy + reserve → vault
For LaunchLab launchpads (Backstock's own, StonkFun, bonk.fun, Raydium), in one instruction: pays the launch fee in the quote asset, creates the coin on the launch's Raydium LaunchLab platform quoted in that asset (on Backstock's own, 1,000,000,000 supply, 79.31% of it sold on the curve), then makes the bundle buy from the raise at the opening price, before any public trade can exist. Refused if the platform's fee rates moved since creation. The bundle takes at most 75% of supply and never completes the curve. Its tokens and the unspent quote go into the vault; that total is what went in at launch, the base of the payback rule.
- launch_
venueCreator once the minimum is met; anyone once the deadline passed or the raise is fullRaise → 1% launch fee → treasury; coin created on pump.fun or Meteora DBC; bundle buy + reserve → vault The same as launch for pump.fun and Meteora launches: one instruction creates the coin on the venue and makes the bundle buy into the vault. The curve's start must match what the creator signed; the venue's fee rates are observed and re-recorded, refused only above the listing's caps. At most 75% of supply, never completing the curve.
- graduateAnyoneNothing — records the graduated pool
Once the venue has migrated the completed curve to its pool (Raydium CPMM, PumpSwap or Meteora DAMM v2; graduation, at the same price), records that pool on the launch so the vault agent and fee collection use it from then on.
Vault agent
- agent_
buyAgent authorityVault quote → the launch's curve or graduated pool; tokens → vault Buys with the vault's quote. No price limit: bounded by the window budget, the price-impact cap and the quote's vault floor, one agent trade per slot, and refused while agents are paused. Trades the curve before graduation and the pool after; fails cleanly while the pool is migrating or the quote's issuer has paused transfers.
- agent_
sellAgent authorityVault tokens → the launch's curve or graduated pool; all quote → vault Sells slowly into strength: only at least the band over the EMA, at a fill of at least the vault's average cost plus the band, within the price-impact cap per trade (and the window sell budget, on older launches that have one), one agent trade per slot. Every unit of quote it receives stays in the vault.
Fees and payback
- payout_
backersAgent authorityVault quote → backers' claimable balance Pays backers back once the vault's liquid quote is at least 5× what went in at launch: their principal first, then 15% of the vault per payout, at most one payout every 4h (the principal payout starts the clock too), never below the vault floor. Buying back dips comes first.
- collect_
feesAnyoneCreator fees → by the launch's split (default 75% vault, 15% buyback & burn, 10% backers; optional creator wallet) Claims the creator fee the LaunchLab platform has collected for the launch (and the CPMM pool's creator fee after graduation), in the quote asset, and splits it by the launch's split, frozen at creation. By default 75% becomes vault quote (agent capital), 15% goes to the buyback & burn wallet and 10% is credited to backers pro-rata. Creators get 0% by default; any creator share is set at creation and shown on the coin's page.
- collect_
venue_ feesAnyoneCreator fees → by the launch's split (default 75% vault, 15% buyback & burn, 10% backers; optional creator wallet) The same sweep for pump.fun and Meteora launches: claims the launch's creator fees from the pump.fun curve and PumpSwap pool, or its Meteora DBC pool and DAMM v2 positions, and splits them by the launch's split (by default 75% vault, 15% buyback, 10% backers). Creators get 0% by default; any creator share is set at creation and shown on the coin's page.
- claim_
backer_ feesBackerYour claimable quote → you Pays the backer's pro-rata share of everything credited so far: 10% of creator fees, payback from payout_backers and a wind-down payout, to their quote account. Claim any time; it never expires.
Vault withdrawals
- admin_
withdraw_ vaultPlatform admin key (a single key at launch; it is also the program's upgrade authority)Vault quote and tokens → fee recipient Withdraws any amount of a launch's vault quote and tokens to the platform fee recipient; it can't touch the pool's liquidity or backers' unclaimed credit. Every withdrawal emits VaultWithdrawn and is listed on the launch page.
- dev_
withdraw_ vaultDev key (a single key the admin sets)Vault quote and tokens → the dev key's own accounts The same withdrawal as admin_withdraw_vault, signed by the platform's single dev key instead of the admin key: quote and tokens go to the dev key's own token accounts. Works while the platform is paused. Every withdrawal emits VaultWithdrawnByDev and is listed on the launch page.
Platform admin
- initialize_
platformProgram upgrade authorityNothing — creates the platform config One-time setup: admin, fee recipient, agent authority and default params.
- update_
platformPlatform admin keyNothing — params for future launches Changes defaults for launches created afterwards, within the program's hard caps. Existing launches keep the terms frozen at their creation.
- set_
fee_ recipientPlatform admin keyNothing — where platform fees and admin vault withdrawals go Points launch fees, create fees, the platform's share of creator fees and admin vault withdrawals at a new recipient (dev-key withdrawals always go to the dev key).
- set_
agent_ authorityPlatform admin keyNothing — which key may call the agent instructions Rotates the vault agent's key. Whoever holds it can still only call agent_buy, agent_sell and payout_backers, within each launch's frozen limits.
- set_
dev_ authorityPlatform admin keyNothing — which key may call dev_withdraw_vault Sets, rotates or (with the default pubkey) disables the dev key, the one key besides the admin that can withdraw a vault.
- set_
launchlab_ platformPlatform admin keyNothing — which LaunchLab platform new coins launch under Points Backstock's own launchpad at its Raydium LaunchLab platform config, the one that sets the 0.5% platform fee, the 0.5% creator fee and the CPMM pool coins graduate to.
- add_
listingPlatform admin keyNothing — adds a launchpad to the registry Adds a launchpad (a LaunchLab platform config, pump.fun, or a Backstock Meteora DBC config) after checking it live: fee caps, the coin standard, who creates graduated pools. Only enabled listings can take new launches.
- update_
listingPlatform admin keyNothing — a listing's caps and switches Updates a registry listing's mutable fields (enabled, fee caps, label) after re-checking it live; its venue, key and coin standard never change.
- disable_
listingPlatform admin keyNothing — closes a launchpad to new launches Stops new launches on a listing. Launches already on it keep trading, graduating and collecting fees.
- add_
quotePlatform admin keyNothing — allowlists a quote asset Adds a quote asset after checking its mint on-chain: SPL Token or Token-2022, no transfer fee, no active transfer hook, accounts not frozen by default, transferable, and a matching LaunchLab config. Sets its raise target, raise bounds, per-wallet cap and vault floor.
- update_
quotePlatform admin keyNothing — a quote's settings for future launches Enables or disables a quote asset and re-sizes its raise target, bounds and vault floor. Launches already created keep the values frozen at their creation.
- propose_
adminPlatform admin keyNothing Starts a two-step admin handover.
- accept_
adminProposed adminNothing Completes the handover; the new key must sign.
Other
- begin_
wind_ downcrankerWrites launch, authority, quote_vault, token_vault Signed by cranker.
- create_
dbc_ configadminWrites admin, config Signed by admin.
- finish_
wind_ downcrankerWrites launch, authority, quote_vault, token_vault Signed by cranker.
- sample_
emaagentWrites launch Signed by agent.
What you still trust
- The upgrade authority. Check whether the program is upgradeable on the explorer; an upgrade could change any rule.
- The admin can withdraw any vault’s quote and tokens to the fee recipient with
admin_withdraw_vault(never what backers have already accrued), pause new launches and deposits, pause the agent, enable or re-size quotes, set the dev key, and change defaults for future launches, not the terms of existing ones. - The dev key, a single key, can withdraw any vault’s quote and tokens to its own wallet with
dev_withdraw_vault. Every one of its withdrawals is aVaultWithdrawnByDevevent on the launch page. - The agent operator decides when to trade and when to pay backers within the rules; it can’t break them, and it can’t send vault quote anywhere but the venue and the backers’ accumulator.
- The launchpad’s venue runs the curve, the graduated pool and the migration: Raydium (LaunchLab and CPMM), pump.fun (its curve and PumpSwap) or Meteora (DBC and DAMM v2), and sets its protocol fee. pump.fun’s admins can also reassign a coin’s creator fees and change fee schedules; StonkFun and bonk.fun decide what share of their creator fees they forward.
- The quote’s issuer can pause, freeze, and on xStocks move or burn tokens from any account, a vault included.