SDK
AMM
Build swaps, LP actions, pool creation, and AMM-side creator-fee collection on DumpsterSwap.
SDK
AMM-side workflows
The AMM surface covers swaps, LP deposits and withdrawals, non-canonical pool creation, and AMM-side creator fee collection.
import { DumpsterClient } from '@dumpster-cash/dumpster-sdk';
const client = new DumpsterClient(connection);Load the pool state once
const tradeState = await client.accounts.fetchSwapTradeState(pool, wallet.publicKey);tradeState already contains:
- the decoded pool
- token program resolution for base and quote mints
- protocol fee recipient
- protocol fee ATA
- the user's base and quote ATAs
Buy from a pool
This path fits exact-output buys where the quote-side spend needs a hard cap.
import BN from 'bn.js';
const ix = await client.swap.buildBuyExactOut({
pool,
poolData: tradeState.pool,
userBaseAccount: tradeState.userBaseAccount!,
userQuoteAccount: tradeState.userQuoteAccount!,
protocolFeeRecipient: tradeState.protocolFeeRecipient!,
protocolFeeAccount: tradeState.protocolFeeAccount!,
user: wallet.publicKey,
baseAmountOut: new BN(5_000_000_000),
maxQuoteAmountIn: new BN(1_000_000_000),
baseTokenProgram: tradeState.baseTokenProgram,
quoteTokenProgram: tradeState.quoteTokenProgram,
});Convenience path:
const ix = await client.swap.buildBuyExactOutAutoResolve({
connection,
pool,
user: wallet.publicKey,
baseAmountOut: new BN(5_000_000_000),
maxQuoteAmountIn: new BN(1_000_000_000),
});Sell into a pool
This path fits exact-input sells where the quote-side output needs a floor.
const ix = await client.swap.buildSellExactIn({
pool,
poolData: tradeState.pool,
userBaseAccount: tradeState.userBaseAccount!,
userQuoteAccount: tradeState.userQuoteAccount!,
protocolFeeRecipient: tradeState.protocolFeeRecipient!,
protocolFeeAccount: tradeState.protocolFeeAccount!,
user: wallet.publicKey,
baseAmountIn: new BN(5_000_000_000),
minQuoteAmountOut: new BN(900_000_000),
baseTokenProgram: tradeState.baseTokenProgram,
quoteTokenProgram: tradeState.quoteTokenProgram,
});Add liquidity
Load the liquidity-state bundle before deposits and withdrawals.
const liquidityState = await client.accounts.fetchPoolLiquidityState(
pool,
wallet.publicKey,
);
const ix = await client.swap.buildDeposit({
pool,
poolData: liquidityState.pool,
userBaseAccount: liquidityState.userBaseAccount!,
userQuoteAccount: liquidityState.userQuoteAccount!,
userLpAccount: liquidityState.userLpAccount!,
user: wallet.publicKey,
lpTokenOut: new BN(1_000_000),
maxBaseIn: new BN(25_000_000_000),
maxQuoteIn: new BN(1_000_000_000),
baseTokenProgram: liquidityState.baseTokenProgram,
quoteTokenProgram: liquidityState.quoteTokenProgram,
});Withdraw liquidity
const ix = await client.swap.buildWithdraw({
pool,
poolData: liquidityState.pool,
userBaseAccount: liquidityState.userBaseAccount!,
userQuoteAccount: liquidityState.userQuoteAccount!,
userLpAccount: liquidityState.userLpAccount!,
user: wallet.publicKey,
lpTokenIn: new BN(1_000_000),
minBaseOut: new BN(20_000_000_000),
minQuoteOut: new BN(800_000_000),
baseTokenProgram: liquidityState.baseTokenProgram,
quoteTokenProgram: liquidityState.quoteTokenProgram,
});Create a non-canonical pool
Migration creates the canonical pool automatically. This builder is for intentionally creating a separate pool.
const ix = await client.swap.buildCreatePool({
index: 1,
baseMint,
quoteMint,
creator: wallet.publicKey,
creatorBaseAccount,
creatorQuoteAccount,
creatorLpAccount,
baseIn: new BN(100_000_000_000),
quoteIn: new BN(2_000_000_000),
coinCreator: wallet.publicKey,
});Collect AMM-side creator fees
const ix = await client.swap.buildClaimCreatorFees({
coinCreator: wallet.publicKey,
mint: tradeState.pool.quoteMint,
creatorTokenAccount,
});Before migration, creator-fee collection stays on the curve-side path.