Swap Base Out
Swaps tokens by specifying the output amount.
Instruction
Parameters
max_amount_in
u64
Maximum acceptable input token amount (slippage protection)
amount_out
u64
Desired amount of output token
Account Setup
1
Token program
SPL Token program
TOKEN_PROGRAM_ID
2
AMM info
AMM account
[program.toBuffer(), marketId.toBuffer(), "amm_associated_seed"]
3
AMM authority
AMM authority PDA
[Buffer.from("amm authority")]
4
AMM coin vault
Coin token vault
[program.toBuffer(), marketId.toBuffer(), "coin_vault_associated_seed"]
5
AMM PC vault
PC token (SOL) vault
[program.toBuffer(), marketId.toBuffer(), "pc_vault_associated_seed"]
6
User source
Source token account
Depends on swap direction
7
User destination
Destination token account
Depends on swap direction
8
User source owner
Transaction signer (User wallet)
-
9
Coin mint
Coin token mint
Provided by user
10
Platform tax WSOL account
Platform fee account
Platform WSOL address
11
CC* contribution WSOL account
Community fund WSOL
Associated account for fee destination
12
CC* contribution token account
Community fund token
Associated account for fee destination
CC - Community Contribution
Function Logic
Verifies the transaction is signed by the token owner
Checks that the AMM is in a valid state for swapping
Determines swap direction (Coin2PC or PC2Coin) based on input and output token accounts
Calculates required input amount before fees using constant product formula
Adjusts input amount to account for fees
Verifies the required input is less than the maximum specified (slippage check)
For SC Bonding Curve tokens, calculates fee distribution among:
Platform fee
Community contribution (community fund)
Token burning
Executes the swap with appropriate fee handling based on token type and swap direction
Updates AMM state data with swap information
Notes
Swap Base Out is useful when a user wants an exact output amount
Fee calculation differs based on token type and the token's configuration
For SC Bonding Curve tokens, fees are distributed according to the token's specified parameters
Burns are executed immediately during the swap transaction
This function performs more complex calculations than Swap Base In due to working backwards from the desired output
Swap Direction Setup
For selling tokens for SOL (Coin2PC):
User source = User's token account:
getAssociatedTokenAddress(tokenMint, userWallet, false)
User destination = User's SOL account:
getAssociatedTokenAddress(NATIVE_MINT, userWallet, false)
For buying tokens with SOL (PC2Coin):
User source = User's SOL account:
getAssociatedTokenAddress(NATIVE_MINT, userWallet, false)
User destination = User's token account:
getAssociatedTokenAddress(tokenMint, userWallet, false)
Example Usage
Last updated