Early wall

The first buys move the price; later buyers sit in one band.1% fee8× · 25 → 200 SOL mcap

← All configs

Drag across the chart, or focus it and use the arrow keys, to read the price at any point of the raise.8×1×3×5×7×8×First trade25%50%75%GraduationQuote raised toward graduationPrice vs first trade45% raised · 6.16×Early wall curve: 45% raised · 6.16×

Try a buy

Already raised Your buyLeft is the first trade. Right is graduation.

Price before you
5.74×
You pay, on average
5.95×
Price after you
6.16×
Left to graduation
55%

The raise is 35% full. You take the next 10%, leaving it 45% of the way to graduation. The price before you is 5.74× the first trade, and 6.16× after you. Across that slice you pay about 5.95× on average. If the whole supply were priced along this curve, market cap moves from about 143 SOL to 154 SOL. A flat 1% trading fee sits on the swap and does not change the shape.

Brief

The first buys move the price a lot. After that, a wide band pays nearly the same.

The left side of the chart is steep. The first buys do the price discovery, and then the line flattens so later buyers sit in a wider band around a similar price. Use it when you expect a rush at the open and you would rather that rush pay up than clear the whole curve at the starting price.

Pick this if

  • You want snipers to move the price, not to collect the cheap supply.
  • You want the middle of the raise to feel like one price band.

Leave it if

  • Your community arrives late and you do not want them staring at an already-jumped price.
  • You would rather charge a high fee for two minutes and keep the curve straight.

How the money moves

  • If the whole supply were priced at the first trade, the market cap would be about 25 SOL.
  • At graduation it is about 200 SOL, which is 8× the starting price. The trading fee stays at 1% for the whole curve. The fee does not add a volatility bump.
  • Trading fees this config assigns go to the launchpad fee-claimer, not the coin creator.
  • After graduation, 100% of the LP is permanently locked to the launchpad fee-claimer. It cannot be pulled. The launchpad wallet can update the token name and image.
  • Mint authority is not left open. Graduation uses Meteora's 1% migration-fee preset.
  • That slice comes out of the quote before it is paired into DAMM v2.
  • Launching a pool on this config does not charge an extra creation fee.

Numbers

Quote
SOL
Token
SPL · 1,000,000,000 supply · 6 decimals
Starting market cap
25 SOL
Graduation market cap
200 SOL
Price by graduation
8× the first trade
Trading fee
1% fee
Volatility fee
Off
Creator trading fee
None
LP after graduation
100% locked · 0% withdrawable
Team vest
None
Migration fee preset
1%
Metadata
Launchpad can update

A recipe is numbers you deploy as your own PoolConfig. It is not another pad's address.

Deploy this recipe

create-config.ts· Early wall
import { NATIVE_MINT } from "@solana/spl-token";
import { Keypair, PublicKey } from "@solana/web3.js";
import {
  ActivationType,
  BaseFeeMode,
  buildCurveWithLiquidityWeights,
  CollectFeeMode,
  DynamicBondingCurveClient,
  MigrationFeeOption,
  MigrationOption,
  TokenDecimal,
  TokenType,
  TokenAuthorityOption,
} from "@meteora-ag/dynamic-bonding-curve-sdk";

// Early wall — deploy a new PoolConfig. Fee claimer is your wallet.
// This does not point launches at another pad's config address.
const curveConfig = buildCurveWithLiquidityWeights({
  token: {
    tokenType: TokenType.SPLToken,
    tokenBaseDecimal: TokenDecimal.SIX,
    tokenQuoteDecimal: TokenDecimal.NINE,
    tokenAuthorityOption: TokenAuthorityOption.PartnerUpdateAuthority,
    totalTokenSupply: 1_000_000_000,
    leftover: 0,
  },
  fee: {
    baseFeeParams: {
      baseFeeMode: BaseFeeMode.FeeSchedulerLinear,
      feeSchedulerParam: {
        startingFeeBps: 100,
        endingFeeBps: 100,
        numberOfPeriod: 0,
        totalDuration: 0,
      },
    },
    dynamicFeeEnabled: false,
    collectFeeMode: CollectFeeMode.QuoteToken,
    creatorTradingFeePercentage: 0,
    poolCreationFee: 0,
    enableFirstSwapWithMinFee: false,
  },
  migration: {
    migrationOption: MigrationOption.MET_DAMM_V2,
    migrationFeeOption: MigrationFeeOption.FixedBps100,
    migrationFee: { feePercentage: 0, creatorFeePercentage: 0 },
  },
  liquidityDistribution: {
    partnerLiquidityPercentage: 0,
    partnerPermanentLockedLiquidityPercentage: 100,
    creatorLiquidityPercentage: 0,
    creatorPermanentLockedLiquidityPercentage: 0,
  },
  lockedVesting: {
    totalLockedVestingAmount: 0,
    numberOfVestingPeriod: 0,
    cliffUnlockAmount: 0,
    totalVestingDuration: 0,
    cliffDurationFromMigrationTime: 0,
  },
  activationType: ActivationType.Timestamp,
  initialMarketCap: 25,
  migrationMarketCap: 200,
  liquidityWeights: [1, 1, 2, 6, 8],
});

const config = Keypair.generate();
const partner = /* your launchpad wallet */ new PublicKey("YOUR_FEE_CLAIMER");

const createConfigTx = await client.partner.createConfig({
  config: config.publicKey,
  feeClaimer: partner,
  leftoverReceiver: partner,
  payer: partner,
  quoteMint: NATIVE_MINT,
  ...curveConfig,
});