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
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.
Pick your pair
A stock like NVDA, a stablecoin like USDC, SOL, or any token your community already holds.
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.
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
0Traded today
$0Dev wallets flagged
0Traded in total
$0Launch 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
Address lookup table
Raydium LaunchLab
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
mode: u8
name: string
symbol: string
uri: string
dev_share_bps: u16
vest_duration: u32
tranche_interval: u32
max_quote_in: u64
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
2 mint
3 config
["config"]4 quote_config
["quote", quote_mint]. Must exist and be enabled.5 tier_state
["tier_state", tier], tier as one byte.6 tier_quote
["tier_quote", tier, quote_mint]. Created by the first launch of that tier and quote.7 launch
["launch", mint]. Created here: it is what makes the token a Bond token.8 platform_config
["platform_config", tier_admin] with tier_admin = Bond PDA ["tier", tier]. The five addresses are listed below.9 collector
["collector"]. The LaunchLab pool creator.10 vault
["vault", mint]11 vault_base
12 vault_quote
13 creator_base
14 creator_quote
15 quote_mint
So11111111111111111111111111111111111111112.16 global_config
17 ll_authority
["vault_auth_seed"]18 pool_state
["pool", mint, quote_mint]19 base_vault
["pool_vault", pool_state, mint]20 quote_vault
["pool_vault", pool_state, quote_mint]21 metadata
["metadata", metadata_program, mint]22 event_authority
["__event_authority"]23 platform_fee_vault
[platform_config, quote_mint]24 creator_fee_vault
[collector, quote_mint]25 launchlab_program
LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj26 metadata_program
metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s27 token_program
TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA: the new token always uses it.28 quote_token_program
29 associated_token_program
ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL30 system_program
1111111111111111111111111111111131 rent
SysvarRent111111111111111111111111111111111Bundles 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
["pool", mint, quote_mint]Pool vaults
["pool_vault", pool, mint] and ["pool_vault", pool, quote_mint]platform_config
Platform fee vault
[platform_config, quote_mint]Creator fee vault
[collector, quote_mint], collector = Bond PDA ["collector"]Compute
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_onset 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
Raydium LaunchLab
Raydium CPMM
Migration target
Creator fee 0 %
Creator fee 0.5 %
Creator fee 1 %
Creator fee 1.5 %
Creator fee 2 %
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)
USDC
USD1
Other quotes
Token page
Mint address
Brand
Contact
X
Launch tool, bundler, bot, terminal or indexer: send us a message on X and we reply with anything else you need.