Bonding curve launches (Meteora DBC → DAMM v2)
A launch with mode: "dbc" puts the film’s token on a Meteora Dynamic
Bonding Curve. Fans buy along a published curve; the price rises with each
purchase. When fans have put in the funding goal, the curve graduates:
Meteora migrates it into a DAMM v2 pool whose liquidity is permanently
locked.
Graduation is the first funding tranche
Graduation unlocks three things on chain, with no admin key:
- Production budget.
budgetPercentof the raise (the DBC creator migration fee) becomes claimable by the creator (POST /api/fees/:mint/txwithkind: "budget"). - DAO treasury. The DAO’s token allocation is the curve’s fixed-supply
leftover. The config names the DAO’s native treasury as
leftover_receiver, so the tokens land there at graduation. Before the film is funded the treasury is empty, so no milestone tranche can be released. - Creator vesting. The creator’s tokens are DBC locked vesting, released by Meteora’s locker with the cliff measured from migration. A creator whose film never funds gets no tokens.
Who holds what
| Holder | |
|---|---|
| Mint / freeze authority | none (fixed supply) |
| Metadata | immutable |
| Pool creator (fees, budget, vesting) | the creator’s wallet (transfer_pool_creator in the creation tx) |
| Partner fee claimer | film.fun (DBC_PARTNER_FEE_CLAIMER, a multisig on mainnet) |
| DAMM v2 liquidity | 90 % creator position + 10 % film.fun position, both permanently locked |
| DAO | realm authority = governance; vote base = curve supply + creator vesting |
| Etch wallet | fee payer only |
Presets
| Preset | Price, last vs first backer | Curve fee |
|---|---|---|
| Steady raise | ≈ 1.5× | 1 % flat |
| Fan launch | ≈ 5× | 10 % → 1 % over 30 min (anti-sniper) |
| Custom | 1.2×–20× | 0.25 %–5 %, optional anti-sniper |
Fees: Meteora’s protocol takes 20 % of each curve trading fee; the creator and film.fun split the rest 50/50. After graduation the DAMM v2 pool charges 1 % (dynamic fee on), and LP fees go to the two locked positions.
Funding goal limits
| Cluster | SOL | USDC |
|---|---|---|
| mainnet | 10 – 5,000 | 750 – 500,000 |
| devnet | 0.5 – 5,000 | 50 – 500,000 |
The mainnet minimums are the thresholds at which Meteora’s own migration
keepers graduate pools automatically. On devnet (where Meteora runs no
keeper) Etch’s /api/cron/dbc-graduation does it.
Testing on devnet
npm run test:devnetwithDBC_E2E_FUNDERset runstests/dbc.devnet.test.ts. That covers config, pool, buys, DAO, graduation, a DAMM v2 trade and the claims, with throwaway wallets.scripts/dbc-api-e2e.mjsdrives the same lifecycle through the HTTP API of a running Etch (DBC_ENABLED=true). The phases are setup → launch → trade → graduate → claims → dao-propose → dao-finish. It includes a DAO proposal that releases the first milestone tranche from the treasury the curve funded.