# MaverickV2BoostedPositionDynamic

**Inherits:** [IMaverickV2BoostedPosition](/technical-reference/maverick-v2/v2-contracts/maverick-v2-supplemental-contracts/interfaces/imaverickv2boostedposition.md), [BoostedPositionBase](/technical-reference/maverick-v2/v2-contracts/maverick-v2-supplemental-contracts/boostedpositionbase/boostedpositionbase.md)

BoostedPosition for movement-mode Maverick V2 AMM liquidity positions. This contract inherits ERC20 and a given user's BP balance represents their pro rata position in the boosted position.

Movement-mode bins can be merged in the V2 AMM. Before any action can be taken on this BP, the user must ensure that the underlying AMM bin has not been merged. If it has been merged, the user must first call `migrateBinLiquidityToRoot`.

### State Variables <a href="#state-variables" id="state-variables"></a>

#### binId <a href="#binid" id="binid"></a>

```solidity
uint32 private binId;
```

#### tokenAScale <a href="#tokenascale" id="tokenascale"></a>

```solidity
uint256 private immutable tokenAScale;
```

#### tokenBScale <a href="#tokenbscale" id="tokenbscale"></a>

```solidity
uint256 private immutable tokenBScale;
```

### Functions <a href="#functions" id="functions"></a>

#### constructor <a href="#constructor" id="constructor"></a>

Constructor does not do any validation of input paramters. This contract is meant to be deployed by a deployer contract and that contract does all of the paramter validations.

```solidity
constructor(
    string memory name_,
    string memory symbol_,
    IMaverickV2Pool pool_,
    uint8 kind_,
    uint32 binId_,
    uint256 tokenAScale_,
    uint256 tokenBScale_
) BoostedPositionBase(name_, symbol_, pool_, kind_, 1);
```

#### checkBinIsRoot <a href="#checkbinisroot" id="checkbinisroot"></a>

Checks to ensure bin is not merged.

```solidity
modifier checkBinIsRoot();
```

#### mint <a href="#mint" id="mint"></a>

Mints BP LP position to recipient. User has to add liquidity to BP contract before making this call as this mint function simply assigns any new liquidity that this BP possesses in the pool to the recipient. Accordingly, this function should only be called in the same transaction where liquidity has been added to a pool as part of a multicall or through a router/manager contract.

```solidity
function mint(address recipient) public checkBinIsRoot returns (uint256 deltaSupply);
```

#### burn <a href="#burn" id="burn"></a>

Burns BP LP positions and redeems the underlying A/B token to the recipient.

```solidity
function burn(address recipient, uint256 amount) public returns (uint256 tokenAOut, uint256 tokenBOut);
```

#### migrateBinLiquidityToRoot <a href="#migratebinliquiditytoroot" id="migratebinliquiditytoroot"></a>

Migrates all underlying movement-mode liquidity from a merged bin to the active parent of the merged bin. For Static BPs, this function is a no-op and never needs to be called.

```solidity
function migrateBinLiquidityToRoot() public;
```

#### getRatios <a href="#getratios" id="getratios"></a>

Array of relative pool bin LP balance of the bins in the BP.

```solidity
function getRatios() public pure returns (uint128[] memory ratios_);
```

#### getBinIds <a href="#getbinids" id="getbinids"></a>

Array of BP binIds.

```solidity
function getBinIds() public view checkBinIsRoot returns (uint32[] memory binIds_);
```

#### getTicks <a href="#getticks" id="getticks"></a>

Array of ticks where the underlying BP liquidity exists.

```solidity
function getTicks() public view checkBinIsRoot returns (int32[] memory ticks);
```

#### maverickV2AddLiquidityCallback <a href="#maverickv2addliquiditycallback" id="maverickv2addliquiditycallback"></a>

```solidity
function maverickV2AddLiquidityCallback(IERC20 tokenA, IERC20 tokenB, uint256 amountA, uint256 amountB, bytes calldata)
    external;
```

<br>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.mav.xyz/technical-reference/maverick-v2/v2-contracts/maverick-v2-supplemental-contracts/maverickv2boostedpositiondynamic.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
