Anti-snipe open

A steady climb — each buyer pays a little more than the last.Fee 50% → 1%3.6× · 50 → 180 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.3.6×1×2×3×3.6×First trade25%50%75%GraduationQuote raised toward graduationPrice vs first trade45% raised · 2.17×Anti-snipe open curve: 45% raised · 2.17×

Try a buy

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

Price before you
1.91×
You pay, on average
2.04×
Price after you
2.17×
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 1.91× the first trade, and 2.17× after you. Across that slice you pay about 2.04× on average. If the whole supply were priced along this curve, market cap moves from about 95.5 SOL to 109 SOL. The trading fee fades with time, so this walk only shows the price.

Brief

The curve is easy. The fee is the wall: expensive for two minutes, then normal.

The price path is a straight climb on purpose, so the chart is not the trick. The fee is. It opens at 50% and fades to 1% over two minutes, and it can tick up again if price lurches. Whoever hits the first seconds pays for it. People who wait pay the fee you actually wanted.

Pick this if

  • Your open gets botted and you want that rush to be expensive.
  • You still want a readable curve once the fee has faded.

Leave it if

  • Your buyers are a small group you already trust, and a 50% open fee will just scare them.
  • You need the price itself to jump in the first buys, not the fee.

How the money moves

  • If the whole supply were priced at the first trade, the market cap would be about 50 SOL.
  • At graduation it is about 180 SOL, which is 3.6× the starting price.
  • The trading fee opens at 50% and falls faster at first, then eases to 1% over 120 seconds.
  • A second fee can tick up when price moves fast, then cool off. Meteora caps that extra at 20% of the minimum base fee.
  • 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
50 SOL
Graduation market cap
180 SOL
Price by graduation
3.6× the first trade
Trading fee
Fee 50% → 1%
Volatility fee
On
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· Anti-snipe open
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";

// Anti-snipe open — 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.FeeSchedulerExponential,
      feeSchedulerParam: {
        startingFeeBps: 5000,
        endingFeeBps: 100,
        numberOfPeriod: 60,
        totalDuration: 120,
      },
    },
    dynamicFeeEnabled: true,
    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: 50,
  migrationMarketCap: 180,
  liquidityWeights: [1, 1, 1, 1],
});

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,
});