One segment from first trade to graduation; the SDK sets the exact prices.1% feeGraduates at 20,000 USDC
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 drawing is a sketch of the shape, so the × marks are the shape, not a quoted multiple. Your buy puts in about 2,000 USDC. A flat 1% trading fee sits on the swap and does not change the shape.
One segment, priced in USDC. The graduation line is 20,000 dollars, not a SOL target.
Same kind of single-segment curve, priced in USDC instead of SOL. Traders bring dollars, and the graduation line does not move when SOL does. A stock or other RWA quote is a different mint: it only works on DBC if that mint has a token badge. This recipe is the USDC shape.
A recipe is numbers you deploy as your own PoolConfig. It is not another pad's address.
import { Keypair, PublicKey } from "@solana/web3.js";
import {
ActivationType,
BaseFeeMode,
buildCurve,
CollectFeeMode,
DynamicBondingCurveClient,
MigrationFeeOption,
MigrationOption,
TokenDecimal,
TokenType,
TokenAuthorityOption,
} from "@meteora-ag/dynamic-bonding-curve-sdk";
// USDC desk — deploy a new PoolConfig. Fee claimer is your wallet.
// This does not point launches at another pad's config address.
const curveConfig = buildCurve({
token: {
tokenType: TokenType.SPLToken,
tokenBaseDecimal: TokenDecimal.SIX,
tokenQuoteDecimal: TokenDecimal.SIX,
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,
percentageSupplyOnMigration: 25,
migrationQuoteThreshold: 20000,
});
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: new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),
...curveConfig,
});