# NonfungiblePositionManager

해당 컨트랙트는  ERC721 대체 불가능한 토큰 인터페이스의 KLAYswap V3 포지션을 wrapping합니다.

## Code

Github Link: (Will be updated after official launch)<br>

## Address

* Cypress : [0x51D233B5aE7820030A29c75d6788403B8B5d317B](https://scope.klaytn.com/account/0x51D233B5aE7820030A29c75d6788403B8B5d317B?tabId=txList)

## Events, Read-Only Functions, and State-Changing Functions

{% tabs %}
{% tab title="Events" %}

## Events

**IncreaseLiquidity**

```solidity
event IncreaseLiquidity(
    uint256 indexed tokenId, 
    uint128 liquidity, 
    uint256 amount0, 
    uint256 amount1
);
```

포지션 NFT에 대한 유동성 증가 시 발생 또한 토큰이 발행될 때 방출됩니다.

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

<table><thead><tr><th width="170.66666666666666">Name</th><th width="116">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>tokenId</code></td><td>uint256</td><td>The ID of the token for which liquidity was increased</td></tr><tr><td><code>liquidity</code></td><td>uint128</td><td>The amount by which liquidity for the NFT position was increased</td></tr><tr><td><code>amount0</code></td><td>uint256</td><td>The amount of token0 that was paid for the increase in liquidity</td></tr><tr><td><code>amount1</code></td><td>uint256</td><td>The amount of token1 that was paid for the increase in liquidity</td></tr></tbody></table>

**DecreaseLiquidity**

```solidity
event DecreaseLiquidity(
    uint256 indexed tokenId, 
    uint128 liquidity, 
    uint256 amount0, 
    uint256 amount1
);
```

포지션 NFT에 대한 유동성 감소 시 발생

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

<table><thead><tr><th width="159.66666666666666">Name</th><th width="113">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>tokenId</code></td><td>uint256</td><td>The ID of the token for which liquidity was decreased</td></tr><tr><td><code>liquidity</code></td><td>uint128</td><td>The amount by which liquidity for the NFT position was decreased</td></tr><tr><td><code>amount0</code></td><td>uint256</td><td>The amount of token0 that was accounted for the decrease in liquidity</td></tr><tr><td><code>amount1</code></td><td>uint256</td><td>The amount of token1 that was accounted for the decrease in liquidity</td></tr></tbody></table>

**Collect**

```solidity
event Collect(
    uint256 indexed tokenId, 
    address recipient,
    uint256 amount0, 
    uint256 amount1,
    uint256 reward
);
```

포지션 NFT에 대한 토큰이 수집될 때 발생합니다. \
보고된 금액은 반올림 동작으로 인해 이체된 금액과 정확히 일치하지 않을 수 있습니다.

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

<table><thead><tr><th width="147.66666666666666">Name</th><th width="120">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>tokenId</code></td><td>uint256</td><td>포지션 NFT ID</td></tr><tr><td><code>recipient</code></td><td>address</td><td>수집된 토큰을 받은 계정의 주소</td></tr><tr><td><code>amount0</code></td><td>uint256</td><td>수집된 포지션에 빚진 token0의 양</td></tr><tr><td><code>amount1</code></td><td>uint256</td><td>수집된 포지션에 빚진 token1의 양</td></tr></tbody></table>
{% endtab %}

{% tab title="Parameter Structs" %}

## Parameter Structs

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

```solidity
struct MintParams {
    address token0;
    address token1;
    uint24 fee;
    int24 tickLower;
    int24 tickUpper;
    uint256 amount0Desired;
    uint256 amount1Desired;
    uint256 amount0Min;
    uint256 amount1Min;
    address recipient;
    uint256 deadline;
}
```

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

```solidity
struct IncreaseLiquidityParams {
   uint256 tokenId;
   uint256 amount0Desired;
   uint256 amount1Desired;
   uint256 amount0Min;
   uint256 amount1Min;
   uint256 deadline;
}
```

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

```solidity
struct DecreaseLiquidityParams {
    uint256 tokenId;
    uint128 liquidity;
    uint256 amount0Min;
    uint256 amount1Min;
    uint256 deadline;
}
```

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

```solidity
struct CollectParams {
    uint256 tokenId;
    address recipient;
    uint128 amount0Max;
    uint128 amount1Max;
}
```

{% endtab %}

{% tab title="Read-Only Functions" %}

## Read-Only Functions

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

<pre class="language-solidity"><code class="lang-solidity"><strong>function positions(
</strong>    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
)
</code></pre>

주어진 토큰 ID와 관련된 위치 정보를 반환합니다.&#x20;

토큰 ID가 유효하지 않은 경우 throw.

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

<table><thead><tr><th width="161">Name</th><th width="152.66666666666666">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>tokenId</code></td><td>uint256</td><td>포지션을 나타내는 토큰의 ID</td></tr></tbody></table>

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

<table><thead><tr><th width="209.66666666666663">Name</th><th width="101">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>nonce</code></td><td>uint96</td><td>permit에 대한 nonce 값</td></tr><tr><td><code>operator</code></td><td>address</td><td>지출이 승인된 주소</td></tr><tr><td><code>token0</code></td><td>address</td><td>특정 풀에 대한 token0의 주소</td></tr><tr><td><code>token1</code></td><td>address</td><td>특정 풀에 대한 token1의 주소</td></tr><tr><td><code>fee</code></td><td>uint24</td><td>풀과 관련된 수수료</td></tr><tr><td><code>tickLower</code></td><td>int24</td><td>위치에 대한 틱 범위의 하단</td></tr><tr><td><code>tickUpper</code></td><td>int24</td><td>위치에 대한 틱 범위의 상단</td></tr><tr><td><code>liquidity</code></td><td>uint128</td><td>포지션의 유동성</td></tr><tr><td><code>feeGrowthInside0LastX128</code></td><td>uint256</td><td>개별 포지션에 대한 마지막 조치를 기준으로 token0의 수수료 증가</td></tr><tr><td><code>feeGrowthInside1LastX128</code></td><td>uint256</td><td>개별 포지션에 대한 마지막 조치를 기준으로 token1의 수수료 증가</td></tr><tr><td><code>tokensOwed0</code></td><td>uint128</td><td>마지막 계산 시점의 위치에 대한 미수금된 token0의 양</td></tr><tr><td><code>tokensOwed1</code></td><td>uint128</td><td>마지막 계산 시점의 위치에 대한 미수금된 token1의 양</td></tr></tbody></table>

#### positionRewards <a href="#positions" id="positions"></a>

```solidity
function positionRewards(uint256 tokenId)
external
view
returns (
    uint256 rewardGrowthInsideLastX128,
    uint128 reward,
    uint128 fee0Sum,
    uint128 fee1Sum,
    uint128 rewardSum
);
```

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

<table><thead><tr><th width="137.66666666666666">Name</th><th width="106">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>tokenId</code></td><td>uint256</td><td>포지션을 나타내는 토큰의 ID</td></tr></tbody></table>

**Return Values:**

<table><thead><tr><th width="209.66666666666663">Name</th><th width="101">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>rewardGrowthInsideLastX128</code></td><td>uint256</td><td>개별 포지션에 대한 마지막 행동에 따른 보상 증가</td></tr><tr><td><code>reward</code></td><td>uint128</td><td>미수령 보상 금액</td></tr><tr><td><code>fee0Sum</code></td><td>uint128</td><td>token0의 누적 수수료</td></tr><tr><td><code>fee1Sum</code></td><td>uint128</td><td>token1의 누적 수수료</td></tr><tr><td><code>rewardSum</code></td><td>uint128</td><td>적립된 리워드 금액</td></tr></tbody></table>

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

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

tokenId 토큰에 대해 승인된 계정을 반환합니다.&#x20;

요구 사항: 토큰 ID가 있어야 합니다.

#### 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)
```

특정 토큰 ID를 설명하는 URI를 반환합니다.

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

<table><thead><tr><th width="136.66666666666666">Name</th><th width="100">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>tokenId</code></td><td>uint256</td><td>발행된 포지션을 나타내는 토큰의 ID</td></tr></tbody></table>

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

URI 데이터가 포함된 base64 문자열입니다.

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

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

{% endtab %}

{% tab title="State-Changing Functions" %}

## **State-Changing Functions**

#### 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
)
```

NFT로 래핑된 새 포지션을 생성합니다.&#x20;

풀이 존재하고 초기화될 때 이것을 호출하십시오. 풀이 생성되었지만 초기화되지 않은 경우 메서드가 존재하지 않습니다. 즉, 풀이 초기화된 것으로 간주됩니다.

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

<table><thead><tr><th width="126.66666666666666">Name</th><th width="238">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>params</code></td><td><code>struct INonfungiblePositionManager.MintParams</code></td><td>calldata에서 MintParams로 인코딩된 위치를 생성하는 데 필요한 매개변수</td></tr></tbody></table>

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

<table><thead><tr><th width="142.66666666666666">Name</th><th width="134">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>tokenId</code></td><td>uint256</td><td>발행된 포지션을 나타내는 토큰의 ID</td></tr><tr><td><code>liquidity</code></td><td>uint128</td><td>이 포지션의 유동성 양</td></tr><tr><td><code>amount0</code></td><td>uint256</td><td>token0의 수량</td></tr><tr><td><code>amount1</code></td><td>uint256</td><td>token1의 수량</td></tr></tbody></table>

#### 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
)
```

`msg.sender`가 지불한 토큰으로 포지션의 유동성을 높입니다.

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

<table><thead><tr><th width="120.66666666666666">Name</th><th width="233">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>params</code></td><td><code>struct INonfungiblePositionManager.IncreaseLiquidityParams</code></td><td>calldata에서 IncreaseLiquidityParams로 인코딩된 포지션의 유동성을 증가시키는 데 필요한 매개변수</td></tr></tbody></table>

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

<table><thead><tr><th width="144.66666666666666">Name</th><th width="104">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>liquidity</code></td><td>uint128</td><td>증가에 따른 새로운 유동성 양</td></tr><tr><td><code>amount0</code></td><td>uint256</td><td>유동성을 달성하기 위한 token0의 양</td></tr><tr><td><code>amount1</code></td><td>uint256</td><td>유동성을 달성하기 위한 token1의 양</td></tr></tbody></table>

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

<pre class="language-solidity"><code class="lang-solidity">function decreaseLiquidity(
<strong>    struct INonfungiblePositionManager.DecreaseLiquidityParams params
</strong>) external returns (uint256 amount0, uint256 amount1)
</code></pre>

포지션의 유동성을 줄여 포지션에 반영

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

<table><thead><tr><th width="130.66666666666666">Name</th><th width="231">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>params</code></td><td><code>struct INonfungiblePositionManager.DecreaseLiquidityParams</code></td><td>calldata에서 IncreaseLiquidityParams로 인코딩된 포지션의 유동성을 줄이는 데 필요한 매개변수</td></tr></tbody></table>

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

<table><thead><tr><th width="129.66666666666666">Name</th><th width="120">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>amount0</code></td><td>uint256</td><td>포지션의 빚진 토큰에 해당하는 token0의 양</td></tr><tr><td><code>amount1</code></td><td>uint256</td><td>포지션의 빚진 토큰에 해당하는 token1의 양</td></tr></tbody></table>

#### 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)
```

수령인에게 지불해야 하는 최대 금액의 수수료를 징수합니다.

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

<table><thead><tr><th width="143.66666666666666">Name</th><th width="241">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>params</code></td><td><code>struct INonfungiblePositionManager.CollectParams</code></td><td>calldata에서 CollectParams로 인코딩된 수집에 필요한 매개변수</td></tr></tbody></table>

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

<table><thead><tr><th width="136.66666666666666">Name</th><th width="138">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>amount0</code></td><td>uint256</td><td>token0에서 징수된 수수료 금액</td></tr><tr><td><code>amount1</code></td><td>uint256</td><td>token1에서 징수된 수수료 금액</td></tr></tbody></table>

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

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

NFT 계약에서 토큰 ID를 삭제하는 토큰 ID를 소각합니다. \
토큰은 유동성이 0이어야 하며 모든 토큰이 먼저 수집되어야 합니다.

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

<table><thead><tr><th width="140.66666666666666">Name</th><th width="134">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>tokenId</code></td><td>uint256</td><td>소각되는 토큰의 ID</td></tr></tbody></table>
{% endtab %}
{% endtabs %}


---

# 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.klayswap.com/kr/developer/contract/v3/nonfungiblepositionmanager.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.
