Documentation Index
Fetch the complete documentation index at: https://docs.orca.so/llms.txt
Use this file to discover all available pages before exploring further.
Adjusting Position Liquidity
- Rust
- TypeScript Kit
- TypeScript Legacy
1. Overview of Adjusting Liquidity
The SDK functions for increasing or decreasing liquidity work similarly, enabling you to modify the liquidity of an existing position. You can specify the liquidity directly or provide amounts of token A or token B to increase or decrease liquidity. With these functions, you can:- Increase liquidity to potentially earn more fees as trading volume grows.
- Decrease liquidity to reduce exposure or withdraw profits.
2. Getting Started Guide
Adjusting Liquidity in a Position
Adjusting liquidity in an existing position can be done as follows:- RPC Client: Use a Solana RPC client to interact with the blockchain.
- Position Mint: Provide the mint address of the NFT representing your position. This NFT serves as proof of ownership of the position you want to adjust.
- Liquidity Parameters: Choose how you want to adjust liquidity. You only need to provide one of these parameters, and the function will compute the others in the returned quote based on the current price of the pool and the price range of the position:
liquidity: Specify the liquidity value to add or remove.tokenA: Specify the amount of token A to add or withdraw.tokenB: Specify the amount of token B to add or withdraw.
- Slippage tolerance: Set the maximum slippage tolerance (optional, defaults to 1%). Slippage refers to the difference between the expected token amounts added or removed when adjusting liquidity and the actual amounts that are ultimately deposited or withdrawn. A lower slippage tolerance reduces the risk of depositing or withdrawing more or fewer tokens than intended, but it may lead to failed transactions if the market moves too quickly.
- Funder: This can be your wallet, which will fund the pool initialization. If a funder is not specified, the default wallet will be used. You can configure the default wallet through the SDK.
- Create Instructions: Use the appropriate function to generate the necessary instructions.
3. Usage example
You are creating a bot to manage investors’ funds and want to optimize returns. Such a bot could rebalance liquidity based on market signals to maintain a specific target price range or to optimize fee collection during periods of high volatility.4. Next steps
After adjusting liquidity, you can:- Monitor Performance: Track your adjusted position to evaluate its performance and earned fees.
- Harvest Rewards: Collect any earned fees and rewards without closing your position.
- Make Further Adjustments: Depending on market conditions, continue to adjust liquidity as needed to maximize returns or manage risk.
1. Overview of Adjusting Liquidity
The SDK functions for increasing or decreasing liquidity work similarly, enabling you to modify the liquidity of an existing position. You can specify the liquidity directly or provide amounts of token A or token B to increase or decrease liquidity. With these functions, you can:- Increase liquidity to potentially earn more fees as trading volume grows.
- Decrease liquidity to reduce exposure or withdraw profits.
2. Getting Started Guide
Adjusting Liquidity in a Position
Adjusting liquidity in an existing position can be done as follows:- RPC Client: Use a Solana RPC client to interact with the blockchain.
- Position Mint: Provide the mint address of the NFT representing your position. This NFT serves as proof of ownership of the position you want to adjust.
- Liquidity Parameters: Choose how you want to adjust liquidity. You only need to provide one of these parameters, and the function will compute the others in the returned quote based on the current price of the pool and the price range of the position:
liquidity: Specify the liquidity value to add or remove.tokenA: Specify the amount of token A to add or withdraw.tokenB: Specify the amount of token B to add or withdraw.
- Slippage tolerance: Set the maximum slippage tolerance (optional, defaults to 1%). Slippage refers to the difference between the expected token amounts added or removed when adjusting liquidity and the actual amounts that are ultimately deposited or withdrawn. A lower slippage tolerance reduces the risk of depositing or withdrawing more or fewer tokens than intended, but it may lead to failed transactions if the market moves too quickly.
- Funder: This can be your wallet, which will fund the pool initialization. If a funder is not specified, the default wallet will be used. You can configure the default wallet through the SDK.
- Create Instructions: Use the appropriate function to generate the necessary instructions.
3. Usage example
You are creating a bot to manage investors’ funds and want to optimize returns. Such a bot could rebalance liquidity based on market signals to maintain a specific target price range or to optimize fee collection during periods of high volatility.4. Next steps
After adjusting liquidity, you can:- Monitor Performance: Track your adjusted position to evaluate its performance and earned fees.
- Harvest Rewards: Collect any earned fees and rewards without closing your position.
- Make Further Adjustments: Depending on market conditions, continue to adjust liquidity as needed to maximize returns or manage risk.
increase_liquidity and decrease_liquidity to allow users to modify their position’s liquidity.
The SDK also provides quote functions (ex. increaseLiquidityQuoteByInputToken, decreaseLiquidityQuoteByLiquidity) to help estimate the tokenIn/Out from the liquidity operation.
Using Whirlpool Client
Use thePosition class from the WhirlpoolClient to fetch and manage your liquidity. Read below for more on the relationship between quote and the transaction.
The Manual Way
For each instruction, calculate the following values:- liquidityAmount - The total amount of liquidity you would like to deposit/withdraw into your position.
- tokenMax A, B (increase_liquidity) - The maximum amount of token X to add to the position. Note the value here is shifted by the decimal places of the token.
- tokenMin A, B (decrease_liquidity) - The minimum amount of token X to withdraw from the position. Note the value here is shifted by the decimal places of the token.
Getting a Quote
The Typescript SDK provides several quote functions to help generate an estimate based on common user input values.Increase liquidity quote by input token amount
Given a desired amount of input token (A or B), you can use the quote utility functionincreaseLiquidityQuoteByInputTokenWithParams to calculate the liquidityAmount and other tokenMax value required to deposit the desired amount of token into the position.
The quote amount will differ based on the current price (tick) and the desired tick boundaries for the position. The price environment may change from the time of quote to the actual processing of the increase_liquidity ix. Use the slippage tolerance to adjust the quote values to balance your risk of ix failure and total tokens to deposit.
Decrease liquidity quote by input token amount
Given the liquidity amount, use thedecreaseLiquidityQuoteByLiquidityWithParams util function to get an estimate on what’s the minimum token A & B you can expect from the decrease_liquidity instruction call.
Like increase_liquidity, use the slippage tolerance to adjust the quote values to balance your risk of ix failure and total tokens to deposit.
Other Parameters
- whirlpool - PublicKey of the whirlpool the position is a part of
- position - PublicKey of the position address. Derivable from PDAUtil.getPosition.
- positionTokenAccount - Associated token address of the position token on the user’s wallet.
- tokenOwnerAccount A, B - Associated token address of the tokenA,B on the user’s wallet.
- tokenVaults A, B - PublicKey of the token vaults for this
- tickArrayLower, Upper - Lower & upper tick-array accounts that contains the tick indices for the lower, upper bound of the position
- positionAuthority - The address that hosts the position token. This authority must sign the transaction.
Sample Code
Increase liquidity example
Decrease liquidity example
Common Errors
LiquidityZero(0x177c) - Provided liquidity amount is zero.LiquidityTooHigh(0x177d) - Provided liquidity exceeds u128::max.TokenMaxExceeded(0x1781) - The required token to perform this operation exceeds the user defined amount in increase_liquidity.TokenMinSubceeded(0x1782) - The required token to perform this operation subceeds the user defined amount in decrease_liquidity.TickNotFound(0x1779) - The provided tick array accounts do not contain the tick specified in the position.ConstraintRaw(0x7d3) - TokenVault, TokenAccount mints does not match the values in the provided whirlpool.
