# IMaverickV2Position

**Inherits:** [INft](https://docs.mav.xyz/technical-reference/maverick-v2/v2-contracts/maverick-v2-supplemental-contracts/positionbase/inft), [IMigrateBins](https://docs.mav.xyz/technical-reference/maverick-v2/v2-contracts/maverick-v2-supplemental-contracts/base/imigratebins), [IPayableMulticall](https://docs.mav.xyz/technical-reference/maverick-v2/v2-contracts/maverick-v2-common-contracts/base/ipayablemulticall), [IChecks](https://docs.mav.xyz/technical-reference/maverick-v2/v2-contracts/maverick-v2-supplemental-contracts/base/ichecks)

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

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

Mint NFT that holds liquidity in a Maverick V2 Pool. To mint liquidity to an NFT, add liquidity to bins in a pool where the add liquidity recipient is this contract and the subaccount is the tokenId. LiquidityManager can be used to simplify minting Position NFTs.

```solidity
function mint(address recipient, IMaverickV2Pool pool, uint32[] memory binIds) external returns (uint256 tokenId);
```

#### unSafeBurn <a href="#unsafeburn" id="unsafeburn"></a>

Burns the specified token without removing liquidity. Once tokenId is burned, it will no longer be possible to remove liquidity.

```solidity
function unSafeBurn(uint256 tokenId) external;
```

#### setTokenIdData <a href="#settokeniddata" id="settokeniddata"></a>

Overwrites tokenId pool/binId information for a given data index.

```solidity
function setTokenIdData(uint256 tokenId, uint256 index, IMaverickV2Pool pool, uint32[] memory binIds) external;
```

#### setTokenIdData <a href="#settokeniddata-1" id="settokeniddata-1"></a>

Overwrites entire pool/binId data set for a given tokenId.

```solidity
function setTokenIdData(uint256 tokenId, PositionPoolBinIds[] memory data) external;
```

#### appendTokenIdData <a href="#appendtokeniddata" id="appendtokeniddata"></a>

Append new pool/binIds data array to tokenId.

```solidity
function appendTokenIdData(uint256 tokenId, IMaverickV2Pool pool, uint32[] memory binIds) external;
```

#### getTokenIdData <a href="#gettokeniddata" id="gettokeniddata"></a>

Get array pool/binIds data for a given tokenId.

```solidity
function getTokenIdData(uint256 tokenId) external view returns (PositionPoolBinIds[] memory);
```

#### getTokenIdData <a href="#gettokeniddata-1" id="gettokeniddata-1"></a>

Get value from array of pool/binIds data for a given tokenId.

```solidity
function getTokenIdData(uint256 tokenId, uint256 index) external view returns (PositionPoolBinIds memory);
```

#### tokenIdDataLength <a href="#tokeniddatalength" id="tokeniddatalength"></a>

Length of array of pool/binIds data for a given tokenId.

```solidity
function tokenIdDataLength(uint256 tokenId) external view returns (uint256 length);
```

#### removeLiquidity <a href="#removeliquidity" id="removeliquidity"></a>

Remove liquidity from tokenId for a given pool. User can specify arbitrary bins to remove from for their subaccount in the pool even if those bins are not in the tokenIdData set.

```solidity
function removeLiquidity(
    uint256 tokenId,
    address recipient,
    IMaverickV2Pool pool,
    IMaverickV2Pool.RemoveLiquidityParams memory params
) external returns (uint256 tokenAAmount, uint256 tokenBAmount);
```

#### removeLiquidityToSender <a href="#removeliquiditytosender" id="removeliquiditytosender"></a>

Remove liquidity from tokenId for a given pool to sender. User can specify arbitrary bins to remove from for their subaccount in the pool even if those bins are not in the tokenIdData set.

```solidity
function removeLiquidityToSender(
    uint256 tokenId,
    IMaverickV2Pool pool,
    IMaverickV2Pool.RemoveLiquidityParams memory params
) external returns (uint256 tokenAAmount, uint256 tokenBAmount);
```

#### tokenIdPositionInformation <a href="#tokenidpositioninformation" id="tokenidpositioninformation"></a>

NFT asset information for a given range of pool/binIds indexes. This function only returns the liquidity in the pools/binIds stored as part of the tokenIdData, but it is possible that the NFT has additional liquidity in pools/binIds that have not been recorded.

```solidity
function tokenIdPositionInformation(uint256 tokenId, uint256 startIndex, uint256 stopIndex)
    external
    view
    returns (PositionFullInformation[] memory output);
```

#### tokenIdPositionInformation <a href="#tokenidpositioninformation-1" id="tokenidpositioninformation-1"></a>

NFT asset information for a given pool/binIds index. This function only returns the liquidity in the pools/binIds stored as part of the tokenIdData, but it is possible that the NFT has additional liquidity in pools/binIds that have not been recorded.

```solidity
function tokenIdPositionInformation(uint256 tokenId, uint256 index)
    external
    view
    returns (PositionFullInformation memory output);
```

#### getRemoveParams <a href="#getremoveparams" id="getremoveparams"></a>

Get remove paramters for removing a fractional part of the liquidity owned by a given tokenId. The fractional factor to remove is given by proporationD18 in 18-decimal scale.

```solidity
function getRemoveParams(uint256 tokenId, uint256 index, uint256 proportionD18)
    external
    view
    returns (IMaverickV2Pool.RemoveLiquidityParams memory params);
```

### Events <a href="#events" id="events"></a>

#### PositionClearData <a href="#positioncleardata" id="positioncleardata"></a>

```solidity
event PositionClearData(uint256 indexed tokenId);
```

#### PositionSetData <a href="#positionsetdata" id="positionsetdata"></a>

```solidity
event PositionSetData(uint256 indexed tokenId, uint256 index, PositionPoolBinIds newData);
```

### Errors <a href="#errors" id="errors"></a>

#### PositionDuplicatePool <a href="#positionduplicatepool" id="positionduplicatepool"></a>

```solidity
error PositionDuplicatePool(uint256 index, IMaverickV2Pool pool);
```

### Structs <a href="#structs" id="structs"></a>

#### PositionPoolBinIds <a href="#positionpoolbinids" id="positionpoolbinids"></a>

```solidity
struct PositionPoolBinIds {
    IMaverickV2Pool pool;
    uint32[] binIds;
}
```

#### PositionFullInformation <a href="#positionfullinformation" id="positionfullinformation"></a>

```solidity
struct PositionFullInformation {
    PositionPoolBinIds poolBinIds;
    uint256 amountA;
    uint256 amountB;
    uint256[] binAAmounts;
    uint256[] binBAmounts;
    int32[] ticks;
    uint256[] liquidities;
}
```

<br>
