A steady climb — each buyer pays a little more than the last.Fee 50% → 1%3.6× · 50 → 180 SOL mcap
Already raised Your buyLeft is the first trade. Right is graduation.
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.
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.
A recipe is numbers you deploy as your own PoolConfig. It is not another pad's address.
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,
});