For builders

The Launchpad for Builders.

Launch the token of what you're building. Get paid up to 2 % of every trade, not by dumping.

Three things that make launches unfair. Bond fixes them.

Creators paid nothing

When fees pay creators nothing, bundling their own launch and dumping becomes the business model. Bond pays creators fairly.

Bundled launches

Paid on every trade, a creator is rewarded by the trading, not by the dump. Fewer bundles, fairer launches.

One pair only

Pair with anything: stocks like NVDA, stablecoins like USDC, SOL or any token.

Starts like pump

Same starting market cap, same curve shape. Every chart feels familiar from the first trade.

01

Paid by your fees

You set a creator fee from 0 to 2 % at launch. It is paid to you on every buy and sell, on the curve and after graduation on Raydium.

On every trade

Your fee comes in with each buy and sell, claimable any time from your creator dashboard, to the lamport.

Fewer bundles

Paid by the trading, a builder has no reason to bundle the launch and dump on buyers.

After graduation too

On Raydium you are paid first: any fee up to 1.9 % stays exactly the same, and the liquidity is locked forever.

How a launch works

1

Set a fair fee

You choose the creator fee at launch. It is paid to you on every buy and sell, so you are rewarded by the trading, not by dumping.

2

Pick your pair

A stock like NVDA, a stablecoin like USDC, SOL, or any token your community already holds.

3

Trade on the curve

Same starting market cap and same curve shape as pump, on a real Raydium bonding curve. Your fees are claimable any time.

4

Graduate to Raydium

When the curve fills, Raydium moves the token to its own pool and the liquidity is locked forever. Your fee keeps going there.

Bonding curve

4%

filled

Starts at

28 SOL

Curve

Like pump

Then

Raydium

02

Pair with anything

Price your token in what your users already hold.

SOL

The default. Native SOL.

Stablecoins

USDC, USDT and USD1, for launches priced in dollars.

Stocks and tokens

Tokenized stocks like NVDA or TSLA (xStocks and Backpack, whose issuers can pause or upgrade them), or any token your community holds.

03

A curve traders already know

Same starting market cap and exactly the same curve shape as pump, on a real Raydium bonding curve.

Same start

About 28 SOL of market cap, or the same value in dollars for other pairs.

Same shape

Every chart behaves the way traders expect, from the first trade to graduation.

A real Raydium launch and its own address

Real graduation

GMGN, Axiom and Jupiter show the bonding bar, then Migrated. On Raydium the liquidity is locked forever.

Ends in bond

Launches made on bond.rip get an address ending in bond whenever one is ready, instantly, with no grinding on your side.

Questions builders ask

What happens to my fee after graduation?

The Raydium pool charges 0.2 % for Raydium and 1.9 % for the creator side. You are paid first: any fee up to 1.9 % stays exactly the same, and a 2 % fee becomes 1.9 %. Bond only takes what is left.

When can I claim my fees?

Any time, from your creator dashboard, on the curve and after graduation. They are paid in the pair's asset.

Why start like pump?

Traders know pump's curve. Same starting market cap, about 28 SOL, and the same curve shape, so the chart behaves the way they expect and the first buyers get in early.

Where will traders see my token?

Everywhere Raydium launches show up. GMGN, Axiom and Jupiter display its bonding bar, then Migrated once it graduates.

The numbers, live

Launches

0

Traded today

$0

Dev wallets flagged

0

Traded in total

$0

Launch what you're building

Set your fee, pick your pair, launch in a minute.

Launch a token →

Looking for the other side?

For traders →

Build on Bond

The Launchpad for Builders is open to the tools builders use. How launch tools, bundlers and bots create Bond tokens with one instruction, and what terminals and indexers need to recognise them (jump there).

Launch with the Bond program

Call the Bond program's launch instruction, not LaunchLab's initialize_v2. One instruction creates the token, its Raydium LaunchLab curve under the PlatformConfig of the creator-fee tier you pick, its Launch account in the Bond program and the optional dev buy.

The token is a Bond token from its first slot. It is listed on bond.rip. Its creator claims that token's creator fees at bond.rip/creator. It uses Bond's standard curve: 1 billion supply, 793.1 million sold on the curve, graduation at 85 SOL raised on SOL pairs (the same value in USD on other quotes). Its liquidity is locked when it graduates to Raydium CPMM.

Bond program

FuLFQxK2mSwArxUsdw3VyPnwdJZ6ytvBzYx4dkAVTbaS

Address lookup table

BrcHyNH6nZFcdgKQAQJTaTkYXMSgFC8i2GCD6tFBaq4u

Raydium LaunchLab

LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj

The IDL is the compact file Bond's app builds its own transactions from: each instruction has its discriminator, its accounts in order (w marks a writable account, s a signer, fixed programs carry their address) and its arguments.

Arguments

In this order, Borsh-encoded after the 8-byte discriminator (strings as a u32 length then the bytes, integers little-endian).

tier: u8

0 to 4: a creator fee of 0, 0.5, 1, 1.5 or 2 % of volume. Traders pay it on top of the 1 % platform fee (Raydium 0.25 %, Bond 0.75 %).

mode: u8

0 for Normal. 1 is Tech dev (a dev buy of 1 to 5 % of the supply held in a vesting vault): it is switched off on-chain today, so use 0.

name: string

1 to 32 bytes (UTF-8).

symbol: string

1 to 10 bytes.

uri: string

1 to 200 bytes: the token's Metaplex JSON (name, symbol, description, image). Host the JSON and its image on IPFS: terminals show IPFS logos.

dev_share_bps: u16

0 to 500. The dev buy as an exact share of the supply (500 = 5 %, 50 million tokens), bought on the curve inside the instruction and sent to the creator. 0 means no dev buy.

vest_duration: u32

0 in Normal. Tech dev only: 86 400 to 31 536 000 seconds (1 to 365 days).

tranche_interval: u32

0 in Normal. Tech dev only: at least 3 600 seconds and at most vest_duration / 6.

max_quote_in: u64

The most the dev buy may cost, in the quote's base units (lamports for SOL). The launch fails if the buy costs more; creator_quote must hold enough to pay it.

Signers and mint address

Two signatures: the creator and a new mint keypair. Another wallet may pay the transaction fee, but the creator still signs and pays the rent. LaunchLab creates the mint (SPL Token, 6 decimals), so the address must be fresh.

Any address works: the program does not check it. Bond's app uses an address ending in "bond" when it has one ready, which is only cosmetic, and a "bond" address you grind yourself works the same.

Launch tools can also take one of Bond's pooled "bond" addresses through the partner API, with a Bearer key from Bond (ask us on X). POST /api/partner/v1/reserve holds an address for 3 minutes, POST /api/partner/v1/sign adds the mint's signature to your launch transaction (Normal mode; Bond never broadcasts it), and GET /api/partner/v1/status shows the pool and your quota.

Accounts, in IDL order

PDA ["a", b] is the program address of those seeds: strings as UTF-8, addresses as their 32 bytes, the tier as one byte. Bond PDAs are under the Bond program, LaunchLab PDAs under LaunchLab.

1 creator

Signer, writable. The creator wallet: pays the rent of the new accounts and becomes the token's creator on Bond.

2 mint

Signer, writable. The new mint keypair (it must not exist yet).

3 config

Bond PDA ["config"]

4 quote_config

Bond PDA ["quote", quote_mint]. Must exist and be enabled.

5 tier_state

Bond PDA ["tier_state", tier], tier as one byte.

6 tier_quote

Bond PDA ["tier_quote", tier, quote_mint]. Created by the first launch of that tier and quote.

7 launch

Bond PDA ["launch", mint]. Created here: it is what makes the token a Bond token.

8 platform_config

LaunchLab PDA ["platform_config", tier_admin] with tier_admin = Bond PDA ["tier", tier]. The five addresses are listed below.

9 collector

Bond PDA ["collector"]. The LaunchLab pool creator.

10 vault

Bond PDA ["vault", mint]

11 vault_base

Associated token account of vault for the mint (SPL Token). Used in Tech dev only; pass it anyway.

12 vault_quote

Associated token account of vault for quote_mint (quote token program). Tech dev only; pass it anyway.

13 creator_base

Associated token account of creator for the mint (SPL Token). Created by the instruction when there is a dev buy.

14 creator_quote

A token account of quote_mint owned by creator, usually its associated token account. It must exist; for SOL it holds wrapped SOL.

15 quote_mint

The quote mint, for example wrapped SOL So11111111111111111111111111111111111111112.

16 global_config

The quote's LaunchLab GlobalConfig, as stored in quote_config (field global_config, bytes 73 to 105 of the account).

17 ll_authority

LaunchLab PDA ["vault_auth_seed"]

18 pool_state

LaunchLab PDA ["pool", mint, quote_mint]

19 base_vault

LaunchLab PDA ["pool_vault", pool_state, mint]

20 quote_vault

LaunchLab PDA ["pool_vault", pool_state, quote_mint]

21 metadata

Metaplex PDA ["metadata", metadata_program, mint]

22 event_authority

LaunchLab PDA ["__event_authority"]

23 platform_fee_vault

LaunchLab PDA [platform_config, quote_mint]

24 creator_fee_vault

LaunchLab PDA [collector, quote_mint]

25 launchlab_program

LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj

26 metadata_program

metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s

27 token_program

SPL Token TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA: the new token always uses it.

28 quote_token_program

SPL Token or Token-2022, as stored in quote_config.

29 associated_token_program

ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL

30 system_program

11111111111111111111111111111111

31 rent

SysvarRent111111111111111111111111111111111

Bundles and first-block buys

Put the launch first. Buys follow in separate transactions of the same bundle, so in the same slot, or after the launch instruction in the same transaction when the size allows. With the lookup table a launch alone takes about 950 to 1 100 of the 1 232 bytes, so a buy rarely fits beside it.

Buys go straight to Raydium LaunchLab (buy_exact_in or buy_exact_out): the Bond program is not in the buy path. Every account of a buy is known before the launch lands, so buys can be built and signed in advance. The pool is the LaunchLab PDA ["pool", mint, quote_mint].

Important: the LaunchLab pool creator of a Bond token is Bond's collector, not the creator's wallet. The creator fee vault of a buy is therefore derived from the collector, and the platform config is the tier's. A buy built with the creator's wallet or another config fails.

Pool

LaunchLab PDA ["pool", mint, quote_mint]

Pool vaults

LaunchLab PDA ["pool_vault", pool, mint] and ["pool_vault", pool, quote_mint]

platform_config

The tier's PlatformConfig (listed below)

Platform fee vault

LaunchLab PDA [platform_config, quote_mint]

Creator fee vault

LaunchLab PDA [collector, quote_mint], collector = Bond PDA ["collector"]

Compute

Bond's app sets a 600 000 compute unit limit on the launch transaction.

The launch carries 31 accounts: compile it as a v0 transaction with Bond's lookup table, and size its priority fee or tip so it lands before your buys. A buy that runs first fails, because the pool does not exist yet.

Example (TypeScript)

With @solana/kit, in Normal mode. This exact code is tested against the instruction Bond's app builds.

import { AccountRole, address, getAddressEncoder, getProgramDerivedAddress,
  getU16Encoder, getU32Encoder, getU64Encoder, type Address } from "@solana/kit";

const BOND = address("FuLFQxK2mSwArxUsdw3VyPnwdJZ6ytvBzYx4dkAVTbaS");
const LAUNCHLAB = address("LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj");
const METADATA = address("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s");
const ATA = address("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL");
const TOKEN = address("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");

const A = (a: Address) => getAddressEncoder().encode(a);
const pda = async (program: Address, ...seeds: (string | Uint8Array)[]) =>
  (await getProgramDerivedAddress({ programAddress: program, seeds }))[0];
const ata = (owner: Address, mint: Address, tokenProgram: Address) =>
  pda(ATA, A(owner), A(tokenProgram), A(mint));
const str = (s: string) => {
  const b = new TextEncoder().encode(s);
  return [...getU32Encoder().encode(b.length), ...b];
};

type IdlAccount = { name: string; address?: string; w?: number; s?: number };

export async function bondLaunchIx(p: {
  creator: Address; mint: Address; // both sign the transaction
  quote: Address; quoteTokenProgram: Address; globalConfig: Address;
  tier: number; name: string; symbol: string; uri: string;
  devShareBps: number; maxQuoteIn: bigint;
}) {
  const idl = await (await fetch("https://bond.rip/api/idl")).json();
  const def = idl.instructions.find((i: { name: string }) => i.name === "launch");
  const t = Uint8Array.of(p.tier);
  const collector = await pda(BOND, "collector");
  const platformConfig = await pda(LAUNCHLAB, "platform_config", A(await pda(BOND, "tier", t)));
  const pool = await pda(LAUNCHLAB, "pool", A(p.mint), A(p.quote));
  const vault = await pda(BOND, "vault", A(p.mint));
  const accounts: Record<string, Address> = {
    creator: p.creator,
    mint: p.mint,
    config: await pda(BOND, "config"),
    quote_config: await pda(BOND, "quote", A(p.quote)),
    tier_state: await pda(BOND, "tier_state", t),
    tier_quote: await pda(BOND, "tier_quote", t, A(p.quote)),
    launch: await pda(BOND, "launch", A(p.mint)),
    platform_config: platformConfig,
    collector,
    vault,
    vault_base: await ata(vault, p.mint, TOKEN),
    vault_quote: await ata(vault, p.quote, p.quoteTokenProgram),
    creator_base: await ata(p.creator, p.mint, TOKEN),
    creator_quote: await ata(p.creator, p.quote, p.quoteTokenProgram),
    quote_mint: p.quote,
    global_config: p.globalConfig,
    ll_authority: await pda(LAUNCHLAB, "vault_auth_seed"),
    pool_state: pool,
    base_vault: await pda(LAUNCHLAB, "pool_vault", A(pool), A(p.mint)),
    quote_vault: await pda(LAUNCHLAB, "pool_vault", A(pool), A(p.quote)),
    metadata: await pda(METADATA, "metadata", A(METADATA), A(p.mint)),
    event_authority: await pda(LAUNCHLAB, "__event_authority"),
    platform_fee_vault: await pda(LAUNCHLAB, A(platformConfig), A(p.quote)),
    creator_fee_vault: await pda(LAUNCHLAB, A(collector), A(p.quote)),
    quote_token_program: p.quoteTokenProgram,
  };
  const data = Uint8Array.from([
    ...def.discriminator,
    p.tier,
    0, // mode: Normal
    ...str(p.name), ...str(p.symbol), ...str(p.uri),
    ...getU16Encoder().encode(p.devShareBps),
    ...getU32Encoder().encode(0), // vest_duration
    ...getU32Encoder().encode(0), // tranche_interval
    ...getU64Encoder().encode(p.maxQuoteIn),
  ]);
  return {
    programAddress: BOND,
    accounts: def.accounts.map((a: IdlAccount) => ({
      address: a.address ? address(a.address) : accounts[a.name],
      role: a.s
        ? a.w ? AccountRole.WRITABLE_SIGNER : AccountRole.READONLY_SIGNER
        : a.w ? AccountRole.WRITABLE : AccountRole.READONLY,
    })),
    data,
  };
}

// The transaction: a 600 000 compute unit limit and a priority fee, the creator's quote
// account (idempotent create; for SOL, wrap max_quote_in into it), then bondLaunchIx.
// Compile it as a v0 message with Bond's lookup table and sign with creator and mint.

Launching on LaunchLab directly with Bond's configs

Anyone can call LaunchLab's initialize_v2 with one of Bond's PlatformConfigs, without the Bond program. Such a pool becomes a Bond token once it is adopted: the Bond program's adopt(tier) instruction (anyone can call it) creates its Launch account. Bond's keeper adopts every such pool within minutes, and a tool can put adopt right after initialize_v2 in the same transaction. What to know:

  • The creator Bond pays is the pool's LaunchLab creator, fixed when the pool is created: pass the dev's wallet as creator. Bond's configs set LaunchLab's own creator fee to 0 and charge the whole fee (Bond's 0.75 % plus the tier's creator fee) into the tier's shared vault, so the creator is paid only through Bond, after adoption.
  • Fees from before adoption are credited at adoption from Raydium's per-pool counter. In rare cases (counter reset by Raydium, surplus already swept) they come through a public 24 h catch-up instead.
  • The curve (supply, amount sold, raise, start market cap) is whatever the tool sets, not Bond's standard curve; adoption does not change it.
  • At graduation it migrates exactly like a Bond launch, as Bond's PlatformConfig sets: the tier's CPMM config, 100 % of the LP locked, the Fee Key NFT and the CPMM pool creator going to Bond's collector. Pools that graduated before adoption are adopted too, and their post-graduation creator fees are paid from then on.
  • Never create such a pool with amm_fee_on set to BothToken (Bond's launch uses QuoteToken): its base-side creator fees after graduation cannot be handled, so the pool can never be adopted.
  • With a quote Bond has not enabled, adoption waits until Bond enables that quote.
  • No cap on the dev buy, no Tech dev vault, and no pooled "bond" address (Bond's partner API only co-signs the launch instruction).

The launch instruction stays the simplest path: the token is a Bond token from its first slot, with Bond's standard curve.

For terminals and indexers

Every Bond token is a Raydium LaunchLab pool created under one of the PlatformConfig addresses below. Map them to Bond to show the launchpad on your terminal, aggregator or indexer.

Programs and PlatformConfig per tier

Bond program

FuLFQxK2mSwArxUsdw3VyPnwdJZ6ytvBzYx4dkAVTbaS

Raydium LaunchLab

LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj

Raydium CPMM

CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C

Migration target

Raydium CPMM, LP locked at graduation

Creator fee 0 %

Published at launch

Creator fee 0.5 %

Published at launch

Creator fee 1 %

Published at launch

Creator fee 1.5 %

Published at launch

Creator fee 2 %

Published at launch

The pool's platform_config field identifies the tier. These five addresses are fixed and never rotated; each is named Bond with the website https://bond.rip. A Bond token also has its Launch account in the Bond program (PDA ["launch", mint]). Anyone can create a LaunchLab pool under these configs directly, so count only pools that have a Launch account.

Quote mints and links

SOL (wrapped)

So11111111111111111111111111111111111111112

USDC

EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v

USD1

USD1ttGY1N17NEEHLmELoaybftRBUSErhqYiQzvEmuB

Other quotes

Any token Raydium LaunchLab supports (it has a LaunchLab GlobalConfig): xStocks, Backpack stocks, USDT and more

Token page

https://bond.rip/t/{address}

Mint address

Any address. Many end in bond, which is only cosmetic: never use the suffix to recognise a Bond token.

Brand

Name

Bond

Brand colour

#9B90FF

Logo

Bond mark, for light backgroundsFor light backgrounds: 16 px, 64 px, SVG
Bond mark, for dark backgroundsFor dark backgrounds: 16 px, 64 px, SVG

Contact

X

@bonddotrip

Launch tool, bundler, bot, terminal or indexer: send us a message on X and we reply with anything else you need.