# NonfungiblePositionManager

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

Name: Kaia KLAYswap V3 Position NFT&#x20;

Symbol : Kaia-KLAYswap-V3-POS

## Code

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

## Address

* Cypress : [0xACAF168EE120fD4A48eb3E0E8864d4C9dA30D4Df](https://klaytnscope.com/account/0xACAF168EE120fD4A48eb3E0E8864d4C9dA30D4Df?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 %}
