Price stays near the start until late, then turns up hard.1% fee12× · 30 → 360 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 2.83× the first trade, and 3.4× after you. Across that slice you pay about 3.1× on average. If the whole supply were priced along this curve, market cap moves from about 84.86 SOL to 102 SOL. A flat 1% trading fee sits on the swap and does not change the shape.
Quiet for most of the raise, then the price turns up hard into graduation.
Most of the money comes in while the price is still patient. Near the end the line turns up, so the last stretch is where a higher price gets discovered before a real pool exists. Early buyers are not asked to eat a wall. The finish is.
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";
// Finish line — 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: 30,
migrationMarketCap: 360,
liquidityWeights: [8, 6, 3, 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,
});