add_liquidity

Deposit base and quote into a constant-product pool and mint LP tokens representing proportional ownership of pool reserves. Supports first liquidity (pool creation path) and subsequent adds (must be proportional to current reserves). Emits a LiquidityAddedEvent for indexers/analytics.


Arguments

pub struct AddLiquidityArgs {
    pub base_amount: u64,       // user intends to deposit (base)
    pub quote_amount: u64,      // user intends to deposit (quote)
    pub min_base_amount: u64,   // post-slippage minimum actually deposited (base)
    pub min_quote_amount: u64,  // post-slippage minimum actually deposited (quote)
}

Semantics

  • On initialization (first liquidity): deposits set the initial reserves and define the starting price quote/base.

  • On subsequent adds: deposits must respect the current price to keep x·y=k invariant; the program will clamp to proportional amounts and ensure >= min_* bounds.


Required Accounts

#
Name
Writable
Seeds / Constraints

0

config

["global_config"] (PDA)

1

payer

2

base_mint

Owner == SPL Token program

3

quote_mint

Owner == SPL Token program

4

curve_pool

["pool", base_mint] under TRADERSDEX_CURVE_PROGRAM, seeds::program = TRADERSDEX_CURVE_PROGRAM

5

pool

init_if_needed; ["pool", base_mint, quote_mint] (PDA)

6

lp_mint

init_if_needed; ["lp_mint", pool] (PDA); mint::authority = pool

7

base_vault

init_if_needed; ["vault", pool, base_mint]; token::authority = pool

8

quote_vault

init_if_needed; ["vault", pool, quote_mint]; token::authority = pool

9

user_base_account

mint == base_mint, owner == payer

10

user_quote_account

mint == quote_mint, owner == payer

11

user_lp_account

ATA created/verified in handler

12

token_program

Must equal SPL Token program ID

13

associated_token_program

14

system_program

15

launchpad_cap

If required: ["launchpad_cap"] under TRADERSDEX_CURVE_PROGRAM and must be signer

16

token_creator

Validated if needed

Event

#[event]
pub struct LiquidityAddedEvent {
    pub pool: Pubkey,
    pub provider: Pubkey,
    pub base_amount: u64,
    pub quote_amount: u64,
    pub lp_tokens_minted: u64,
    pub total_lp_supply: u64,
    pub base_reserve_after: u64,
    pub quote_reserve_after: u64,
    pub is_initial: bool,
    pub timestamp: i64,
}

Emitted after successful add; indexers can use it to track LP behavior and TVL changes.


Last updated