USDC desk

One segment from first trade to graduation; the SDK sets the exact prices.1% feeGraduates at 20,000 USDC

← All configs

Drag across the chart, or focus it and use the arrow keys, to read the price at any point of the raise.1×4×First trade25%50%75%GraduationQuote raised toward graduationPrice vs first tradeSketch — SDK sets the exact start and end45% raised · 2.1×USDC desk curve: 45% raised · 2.1×

Try a buy

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

Price before you
Sketch
You pay, on average
Sketch
Price after you
Sketch
Left to graduation
55%

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.

Brief

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.

Pick this if

  • You want the raise and the chart denominated in dollars.
  • Your traders already hold USDC.

Leave it if

  • Your traders only hold SOL. They will have to swap before they can buy.
  • You wanted a badged stock quote. Pick that mint at deploy time only if it has a DBC token badge. Do not assume this USDC recipe is that badge.

How the money moves

  • The curve is one segment.
  • It finishes when 20,000 USDC has been put in. 25% of the supply is what gets paired into the new pool; the rest is what buyers can take along the curve (minus any vest or leftover).
  • The drawing is the shape of that single segment.
  • The SDK sets the exact start and end prices from those two numbers. 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
USDC
Token
SPL · 1,000,000,000 supply · 6 decimals
Graduation target
20,000 USDC
Supply paired at graduation
25%
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· USDC desk
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,
});