Features

The bonding curve

Free to launch

Dreams is built on a dynamic bonding curve. Creating a coin is free — no LP funding is required from the deployer. Every coin starts trading the instant it's deployed, with price discovered along the curve as buys and sells come in.

With this mechanism, creators can buy as much of their own supply as they want at launch via an optional dev buy, which also helps protect against snipers grabbing the early float.

Because there is no separate “bootstrap” step, you can read a coin's live liquidity the instant it exists — straight off its on-chain curve state:

read-curve.ts
import { getDbcClient } from "@/lib/meteora"
import { PublicKey } from "@solana/web3.js"

const client = getDbcClient()

// Every coin trades from block one — read its live curve by mint.
const pool = await client.state.getPoolByBaseMint(new PublicKey(mint))
const { quoteReserve, baseReserve, isMigrated } = pool.account

console.log("SOL in pool:    ", Number(quoteReserve) / 1e9)   // 9 decimals
console.log("tokens on curve:", Number(baseReserve) / 1e6)    // 6 decimals
console.log("graduated?      ", Boolean(isMigrated))

Graduation

Once a coin accumulates enough liquidity along the curve, it graduates: liquidity migrates into a DAMM v2 pool and the coin trades as a standard AMM pair from then on. Trading never stops — the handoff happens on-chain in the background.

A coin graduates once the SOL raised on its curve reaches the launch config's migration threshold. You can derive a live progress bar from the same two values:

graduation-progress.ts
import { getDbcClient, fetchConfigDetails } from "@/lib/meteora"
import { PublicKey } from "@solana/web3.js"

const client = getDbcClient()
const pool = await client.state.getPoolByBaseMint(new PublicKey(mint))

if (pool.account.isMigrated) {
  console.log("Graduated — now a DAMM v2 pair.")
} else {
  const config = await fetchConfigDetails() // launch config defaults
  const raised = Number(pool.account.quoteReserve) / 1e9 // SOL so far
  const target = config!.migrationQuoteThresholdSol      // SOL to graduate
  const progress = Math.min(1, raised / target)

  console.log(`${raised.toFixed(1)} / ${target.toFixed(1)} SOL`)
  console.log(`${(progress * 100).toFixed(1)}% to graduation`)
}

The flywheel spans both phases

Flywheel Mode keeps buying back and burning before and after graduation. Pre-graduation it claims curve fees and buys on the curve; post-graduation it claims LP fees and buys on the DAMM v2 pool. See Flywheel Mode.

LP breakdown

As more SOL flows into a coin's pool, its market cap scales while the proportion of supply left in the pool falls. A simplified view of how that scales:

Pool SOLPool valueSupply in poolApprox. market cap
35$5,250100%$5,250
115$17,25030.4%$56,700
300$45,00011.7%$385,000
600$90,0005.8%$1.55M
1,000$150,0003.5%$4.28M
2,000$300,0001.8%$16.6M

That progression is just arithmetic on the two reserves. As SOL flows in, the spot price — and market cap — climb while the share of supply still sitting in the pool falls toward zero:

curve-snapshot.ts
import { HUMAN_TOKEN_SUPPLY, BASE_DECIMALS, QUOTE_DECIMALS } from "@/lib/meteora"

// Progressive liquidity: derive market cap + remaining float from reserves.
export function curveSnapshot(
  quoteReserve: bigint, // lamports of SOL in the pool
  baseReserve: bigint,  // raw token units still on the curve
  solPriceUsd: number,
) {
  const solInPool = Number(quoteReserve) / 10 ** QUOTE_DECIMALS
  const tokensInPool = Number(baseReserve) / 10 ** BASE_DECIMALS

  // Spot price = SOL per token (simplified constant-product view).
  const priceUsd = (solInPool / tokensInPool) * solPriceUsd

  return {
    poolValueUsd: solInPool * solPriceUsd,
    supplyInPool: tokensInPool / HUMAN_TOKEN_SUPPLY, // 1.0 -> 0 as it sells
    marketCapUsd: priceUsd * HUMAN_TOKEN_SUPPLY,
  }
}

// 300 SOL raised, ~117M tokens left, SOL at $150 -> the row above:
curveSnapshot(300n * 10n ** 9n, 117_000_000n * 10n ** 6n, 150)
// { poolValueUsd: 45000, supplyInPool: 0.117, marketCapUsd: 384615 }

Figures are illustrative and assume a SOL price of $150; the live curve uses Meteora's weighted math (via swapQuote), so on-chain numbers depend on market conditions.

Running on $DREAM