# NonfungiblePositionManager

Wraps Bonsaiswap V3 positions in the ERC721 non-fungible token interface

### Functions[​](https://docs.uniswap.org/contracts/v3/reference/periphery/NonfungiblePositionManager#functions) <a href="#functions" id="functions"></a>

#### constructor[​](https://docs.uniswap.org/contracts/v3/reference/periphery/NonfungiblePositionManager#constructor) <a href="#constructor" id="constructor"></a>

```solidity
  function constructor(
  ) public
```

#### positions[​](https://docs.uniswap.org/contracts/v3/reference/periphery/NonfungiblePositionManager#positions) <a href="#positions" id="positions"></a>

```solidity
  function positions(
    uint256 tokenId
  ) external view returns (uint96 nonce, address operator, address token0, address token1, uint24 fee, int24 tickLower, int24 tickUpper, uint128 liquidity, uint256 feeGrowthInside0LastX128, uint256 feeGrowthInside1LastX128, uint128 tokensOwed0, uint128 tokensOwed1)
```

Returns the position information associated with a given token ID.

Throws if the token ID is not valid.

**Parameters:**[**​**](https://docs.uniswap.org/contracts/v3/reference/periphery/NonfungiblePositionManager#parameters)

| Name      | Type    | Description                                      |
| --------- | ------- | ------------------------------------------------ |
| `tokenId` | uint256 | The ID of the token that represents the position |

**Return Values:**[**​**](https://docs.uniswap.org/contracts/v3/reference/periphery/NonfungiblePositionManager#return-values)

| Name                       | Type    | Description                                                                      |
| -------------------------- | ------- | -------------------------------------------------------------------------------- |
| `nonce`                    | uint96  | The nonce for permits                                                            |
| `operator`                 | address | The address that is approved for spending                                        |
| `token0`                   | address | The address of the token0 for a specific pool                                    |
| `token1`                   | address | The address of the token1 for a specific pool                                    |
| `fee`                      | uint24  | The fee associated with the pool                                                 |
| `tickLower`                | int24   | The lower end of the tick range for the position                                 |
| `tickUpper`                | int24   | The higher end of the tick range for the position                                |
| `liquidity`                | uint128 | The liquidity of the position                                                    |
| `feeGrowthInside0LastX128` | uint256 | The fee growth of token0 as of the last action on the individual position        |
| `feeGrowthInside1LastX128` | uint256 | The fee growth of token1 as of the last action on the individual position        |
| `tokensOwed0`              | uint128 | The uncollected amount of token0 owed to the position as of the last computation |
| `tokensOwed1`              | uint128 | The uncollected amount of token1 owed to the position as of the last computation |

#### mint[​](https://docs.uniswap.org/contracts/v3/reference/periphery/NonfungiblePositionManager#mint) <a href="#mint" id="mint"></a>

```solidity
  function mint(
    struct INonfungiblePositionManager.MintParams params
  ) external returns (uint256 tokenId, uint128 liquidity, uint256 amount0, uint256 amount1)
```

Creates a new position wrapped in a NFT

Call this when the pool does exist and is initialized. Note that if the pool is created but not initialized a method does not exist, i.e. the pool is assumed to be initialized.

**Parameters:**[**​**](https://docs.uniswap.org/contracts/v3/reference/periphery/NonfungiblePositionManager#parameters-1)

| Name     | Type                                          | Description                                                                  |
| -------- | --------------------------------------------- | ---------------------------------------------------------------------------- |
| `params` | struct INonfungiblePositionManager.MintParams | The params necessary to mint a position, encoded as `MintParams` in calldata |

**Return Values:**[**​**](https://docs.uniswap.org/contracts/v3/reference/periphery/NonfungiblePositionManager#return-values-1)

| Name        | Type    | Description                                             |
| ----------- | ------- | ------------------------------------------------------- |
| `tokenId`   | uint256 | The ID of the token that represents the minted position |
| `liquidity` | uint128 | The amount of liquidity for this position               |
| `amount0`   | uint256 | The amount of token0                                    |
| `amount1`   | uint256 | The amount of token1                                    |

#### tokenURI[​](https://docs.uniswap.org/contracts/v3/reference/periphery/NonfungiblePositionManager#tokenuri) <a href="#tokenuri" id="tokenuri"></a>

```solidity
  function tokenURI(
    uint256 tokenId
  ) public view returns (string)
```

Returns a URI describing a particular token ID

**Parameters:**[**​**](https://docs.uniswap.org/contracts/v3/reference/periphery/NonfungiblePositionManager#parameters-2)

| Name      | Type    | Description                                             |
| --------- | ------- | ------------------------------------------------------- |
| `tokenId` | uint256 | The ID of the token that represents the minted position |

**Return Values:**[**​**](https://docs.uniswap.org/contracts/v3/reference/periphery/NonfungiblePositionManager#return-values-2)

A base64 string with the URI data.

#### baseURI[​](https://docs.uniswap.org/contracts/v3/reference/periphery/NonfungiblePositionManager#baseuri) <a href="#baseuri" id="baseuri"></a>

```solidity
  function baseURI(
  ) public returns (string)
```

#### increaseLiquidity[​](https://docs.uniswap.org/contracts/v3/reference/periphery/NonfungiblePositionManager#increaseliquidity) <a href="#increaseliquidity" id="increaseliquidity"></a>

```solidity
  function increaseLiquidity(
    struct INonfungiblePositionManager.IncreaseLiquidityParams params
  ) external returns (uint128 liquidity, uint256 amount0, uint256 amount1)
```

Increases the amount of liquidity in a position, with tokens paid by the `msg.sender`

**Parameters:**[**​**](https://docs.uniswap.org/contracts/v3/reference/periphery/NonfungiblePositionManager#parameters-3)

| Name     | Type                                                       | Description                                                         |
| -------- | ---------------------------------------------------------- | ------------------------------------------------------------------- |
| `params` | struct INonfungiblePositionManager.IncreaseLiquidityParams | tokenId The ID of the token for which liquidity is being increased, |

**Return Values:**[**​**](https://docs.uniswap.org/contracts/v3/reference/periphery/NonfungiblePositionManager#return-values-3)

| Name        | Type    | Description                                          |
| ----------- | ------- | ---------------------------------------------------- |
| `liquidity` | uint128 | The new liquidity amount as a result of the increase |
| `amount0`   | uint256 | The amount of token0 to achieve resulting liquidity  |
| `amount1`   | uint256 | The amount of token1 to achieve resulting liquidity  |

#### decreaseLiquidity[​](https://docs.uniswap.org/contracts/v3/reference/periphery/NonfungiblePositionManager#decreaseliquidity) <a href="#decreaseliquidity" id="decreaseliquidity"></a>

```solidity
  function decreaseLiquidity(
    struct INonfungiblePositionManager.DecreaseLiquidityParams params
  ) external returns (uint256 amount0, uint256 amount1)
```

Decreases the amount of liquidity in a position and accounts it to the position

**Parameters:**[**​**](https://docs.uniswap.org/contracts/v3/reference/periphery/NonfungiblePositionManager#parameters-4)

| Name     | Type                                                       | Description                                                         |
| -------- | ---------------------------------------------------------- | ------------------------------------------------------------------- |
| `params` | struct INonfungiblePositionManager.DecreaseLiquidityParams | tokenId The ID of the token for which liquidity is being decreased, |

**Return Values:**[**​**](https://docs.uniswap.org/contracts/v3/reference/periphery/NonfungiblePositionManager#return-values-4)

| Name      | Type    | Description                                                  |
| --------- | ------- | ------------------------------------------------------------ |
| `amount0` | uint256 | The amount of token0 accounted to the position's tokens owed |
| `amount1` | uint256 | The amount of token1 accounted to the position's tokens owed |

#### collect[​](https://docs.uniswap.org/contracts/v3/reference/periphery/NonfungiblePositionManager#collect) <a href="#collect" id="collect"></a>

```solidity
  function collect(
    struct INonfungiblePositionManager.CollectParams params
  ) external returns (uint256 amount0, uint256 amount1)
```

Collects up to a maximum amount of fees owed to a specific position to the recipient

**Parameters:**[**​**](https://docs.uniswap.org/contracts/v3/reference/periphery/NonfungiblePositionManager#parameters-5)

| Name     | Type                                             | Description                                                     |
| -------- | ------------------------------------------------ | --------------------------------------------------------------- |
| `params` | struct INonfungiblePositionManager.CollectParams | tokenId The ID of the NFT for which tokens are being collected, |

recipient The account that should receive the tokens, amount0Max The maximum amount of token0 to collect, amount1Max The maximum amount of token1 to collect

**Return Values:**[**​**](https://docs.uniswap.org/contracts/v3/reference/periphery/NonfungiblePositionManager#return-values-5)

| Name      | Type    | Description                            |
| --------- | ------- | -------------------------------------- |
| `amount0` | uint256 | The amount of fees collected in token0 |
| `amount1` | uint256 | The amount of fees collected in token1 |

#### burn[​](https://docs.uniswap.org/contracts/v3/reference/periphery/NonfungiblePositionManager#burn) <a href="#burn" id="burn"></a>

```solidity
  function burn(
    uint256 tokenId
  ) external
```

Burns a token ID, which deletes it from the NFT contract. The token must have 0 liquidity and all tokens must be collected first.

**Parameters:**[**​**](https://docs.uniswap.org/contracts/v3/reference/periphery/NonfungiblePositionManager#parameters-6)

| Name      | Type    | Description                              |
| --------- | ------- | ---------------------------------------- |
| `tokenId` | uint256 | The ID of the token that is being burned |

#### \_getAndIncrementNonce[​](https://docs.uniswap.org/contracts/v3/reference/periphery/NonfungiblePositionManager#_getandincrementnonce) <a href="#getandincrementnonce" id="getandincrementnonce"></a>

```solidity
  function _getAndIncrementNonce(
  ) internal returns (uint256)
```

#### getApproved[​](https://docs.uniswap.org/contracts/v3/reference/periphery/NonfungiblePositionManager#getapproved) <a href="#getapproved" id="getapproved"></a>

```solidity
  function getApproved(
  ) public view returns (address)
```

Returns the account approved for `tokenId` token. Requirements:

* `tokenId` must exist.

#### \_approve[​](https://docs.uniswap.org/contracts/v3/reference/periphery/NonfungiblePositionManager#_approve) <a href="#approve" id="approve"></a>

```solidity
  function _approve(
  ) internal
```

Overrides \_approve to use the operator in the position, which is packed with the position permit nonce
