Helpful?
Burn Position
Context
To liquidate a position, the burn functionality can be invoked. The funds in the position will be withdrawn and all the information of the underlying token will be cleared. Burning the position is a cost effective way to exit as a liquidity provider.
Setup
See the setup guide
Guide
Below is a step-by-step guide to burn a position.
1. Import and define IPositionManager
import {IPositionManager} from "v4-periphery/src/interfaces/IPositionManager.sol";
// inside a contract, test, or foundry script:
IPositionManager posm = IPositionManager(<address>);
2. Encode Actions
To burn a position, one action is required:
- burn operation - clears position entirely, withdrawing funds
import {Actions} from "v4-periphery/src/libraries/Actions.sol";
bytes memory actions = abi.encodePacked(Actions.BURN_POSITION);
3. Encode Parameters
bytes[] memory params = new bytes[](1);
The BURN_POSITION
action requires the following parameters:
Parameter | Type | Description |
---|---|---|
tokenId | uint256 | position identifier |
amount0Min | uint128 | the minimum amount of currency0 liquidity msg.sender is expecting to get back |
amount1Min | uint128 | the minimum amount of currency1 liquidity msg.sender is expecting to get back |
hookData | bytes | arbitrary data that will be forwarded to hook functions |
params[0] = abi.encode(tokenId, amount0Min, amount1Min, hookData);
4. Submit Call
The entrypoint for all liquidity operations is modifyLiquidities()
uint256 deadline = block.timestamp + 60;
posm.modifyLiquidities(
abi.encode(actions, params),
deadline
);