Skip to content
Mainnet

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

  1. The Backstock program 69H4…8Yzq ↗ is deployed and executable.
  2. 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_platform names it (a LaunchLab platform config, or the pump.fun / DBC program id).
  3. 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 emits QuoteConfigured.
  4. launch (or launch_venue) creates the coin and buys the bundle in one instruction of one transaction, so the launch transaction is the coin’s first trade. Its Launched event records the raise, the launch fee, the bundle’s quote and tokens and the vault’s quote.
  5. 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_vault and dev_withdraw_vault.
  6. The launch account’s terms hold the fee split, the payback rule, the vault floor and the agent limits you backed under.
  7. The platform account’s admin is the only key that can call admin_withdraw_vault, and its fee_recipient is where those withdrawals go; its dev_authority is the only key that can call dev_withdraw_vault, which pays the dev key itself.
  8. 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) and VaultWithdrawnByDev (dev key). Withdrawals are listed on the launch page and at /api/launches/:mint/activity?type=vault_withdrawn.
  • Program deployed

    Program account

    69H4…8Yzq
  • Upgrade authority

    Couldn’t reach the RPC — check the program on the explorer

    69H4…8Yzq
  • 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

Read live from mainnet on the server; each tile links to the account.

Verified quote mints

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

TypeScript · @solana/web3.js
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.

Vault exitsAgent trades on the launch’s venue (its curve, then its graduated pool), payout_backers (to backers, principal first), wind_down (all vault quote to backers), admin_withdraw_vault (platform admin key → fee recipient) and dev_withdraw_vault (the single dev key → its own accounts). Each one is an on-chain event shown on the launch page.

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 a VaultWithdrawnByDev event 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.
Checking indexerAgent online· tick 74,604Mainnet