Skip to content

Meteora DBC

Meteora DBC (Bonding Curve)

Virtual pools with migration support. Provides pool fetch, pricing, and swap instructions with referral support.

Overview

  • Class: MeteoraDBC
  • Swap: MeteoraDBCSwap
  • Helpers: fetch_virtual_pool, price_from_sqrt, find_pool

Quickstart

from CobraRouter.CobraRouter.router.meteoraDBC.meteora import MeteoraDBC
from solders.keypair import Keypair

dbc = MeteoraDBC(async_client)
pool, state = await dbc.fetch_state(mint)
price = await dbc.get_price(pool, async_client)

# Buy SOL->token
sig = await dbc.swap.buy(state, int(0.005 * 1e9), 1, keypair)

# Sell 50%
sig = await dbc.swap.sell(state, 50, keypair, slippage_pct=5)

API

from solders.keypair import Keypair
from solders.pubkey import Pubkey

class MeteoraDBC:
    async def fetch_state(self, mint: str | Pubkey) -> tuple[str | None, dict | str]: ...
    async def buy(self, mint: str, sol_amount: float, fee_sol: float = 0.00001) -> str | None: ...
    async def sell(self, mint: str, percentage: float, fee_sol: float = 0.00001) -> str | None: ...
    async def close(self) -> None: ...

class MeteoraDBCSwap:
    async def buy(self, state: dict, amount_in: int, min_amount_out: int, keypair: Keypair, quote_mint: Pubkey | str = "So111...12", fee_sol: float = 0.00001, referral_ata: Pubkey | None = None, return_instructions: bool = False): ...
    async def sell(self, state: dict, pct: float, keypair: Keypair, slippage_pct: float = 5.0, fee_sol: float = 0.00001, quote_mint: str = "So111...12", referral_ata: Pubkey | None = None, return_instructions: bool = False): ...

Note

fetch_state returns (pool_addr, state); state["is_migrated"] == 1 signals migration. buy wraps SOL to WSOL ATA; sell closes WSOL to SOL. return_instructions=True returns instruction list.

Pricing

get_price(pool, ctx) returns a float price computed from sqrt price and decimals.