# PositionMigrator

해당 컨트랙트는 V3 포지션을 마이그레이션합니다. 이 컨트랙트는 포지션에 예치된 자산을 예치하고 새로운 포지션에 예치하는 데 도움이 됩니다.

## Code

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

## Address

* Cypress : [0x8e9F6988363E262560f23a918920A3eEFcC49Ffa](https://klaytnscope.com/account/0x8e9F6988363E262560f23a918920A3eEFcC49Ffa?tabId=internalTx)

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

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

## Events

**MigratePosition**

```solidity
event MigratePosition(
    address user, 
    address token0, 
    address token1, 
    uint24 fee, 
    uint256 burnId, 
    uint256 mintId
)
```

**Parameters:**

<table><thead><tr><th width="134.66666666666666">Name</th><th width="128">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>user</code></td><td>address</td><td>user 주소</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>fee </td></tr><tr><td><code>burnId</code></td><td>uint256</td><td>migrate 한 포지션의 tokenId</td></tr><tr><td><code>mintId</code></td><td>uint256</td><td>새로 발급된 포지션의 tokenId</td></tr></tbody></table>

**Zap**

```solidity
event Zap(
    address user, 
    address token0, 
    address token1, 
    uint24 fee, 
    uint256 amount, 
    bool zeroForOne, 
    uint256 tokenId
)
```

**Parameters:**

<table><thead><tr><th width="160.66666666666666">Name</th><th width="115">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>user</code></td><td>address</td><td>user 주소</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>fee </td></tr><tr><td><code>amount</code></td><td>uint256</td><td>예치할 amount</td></tr><tr><td><code>zeroForOne</code></td><td>bool</td><td>token0으로 예치시  : <code>true</code><br>token1으로 예치시   : <code>false</code></td></tr><tr><td><code>tokenId</code></td><td>uint256</td><td>새로 발급된 포지션의 tokenId</td></tr></tbody></table>

1
{% endtab %}

{% tab title="Parameter Structs" %}

## Parameter Struct

**MigrationParams**

```solidity
struct MigrationParams {
    uint256 tokenId;
    // Burn
    uint256 burnAmount0Min;
    uint256 burnAmount1Min;
    // Swap
    address tokenIn;
    uint256 swapAmountIn;
    uint256 swapAmountOutMin;
    // Mint
    int24 tickLower;
    int24 tickUpper;
    uint256 mintAmount0Min;
    uint256 mintAmount1Min;
    uint256 deadline;
    bool compoundFee;
}
```

**Parameters:**

<table><thead><tr><th width="211.66666666666666">Name</th><th width="103">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>tokenId</code></td><td>uint256</td><td>Migrate 할tokenId</td></tr><tr><td><code>burnAmount0Min</code></td><td>uint256</td><td>인출시 받게될 token0의 최소값</td></tr><tr><td><code>burnAmount1Min</code></td><td>uint256</td><td>인출시 받게될 token0의 최소값</td></tr><tr><td><code>tokenIn</code></td><td>address</td><td>교환할 token의 주소</td></tr><tr><td><code>swapAmountIn</code></td><td>uint256</td><td>교환할 token amount</td></tr><tr><td><code>swapAmountOutMin</code></td><td>uint256</td><td>교환으로 받게될 token의 최소값</td></tr><tr><td><code>tickLower</code></td><td>int24</td><td>새로 예치할 포지션의 최소 tick</td></tr><tr><td><code>tickUpper</code></td><td>int24</td><td>새로 예치할 포지션의 최대 tick</td></tr><tr><td><code>mintAmount0Min</code></td><td>uint256</td><td>새로 예치할 포지션에서 예치될 token0 최소값</td></tr><tr><td><code>mintAmount1Min</code></td><td>uint256</td><td>새로 예치할 포지션에서 예치될 token1 최소값</td></tr><tr><td><code>deadline</code></td><td>uint256</td><td>deadline</td></tr><tr><td><code>compoundFee</code></td><td>bool</td><td>fee를 누적하여 예치할 지 여부</td></tr></tbody></table>

**ZappingParams**

```solidity
struct ZappingParams {
    contract IUniswapV3Pool pool;
    uint256 amount;
    int24 tickLower;
    int24 tickUpper;
    bool zeroForOne;
    uint256 mintAmount0Min;
    uint256 mintAmount1Min;
    uint256 tokenId;    
    uint256 deadline;
}
```

**Parameters:**

<table><thead><tr><th width="211.66666666666666">Name</th><th width="135">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>pool</code></td><td><code>contract IUniswapV3Pool</code></td><td>예치할 pool 주소</td></tr><tr><td><code>amount</code></td><td>uint256</td><td>예치할 token amount</td></tr><tr><td><code>tickLower</code></td><td>int24</td><td>새로 예치할 포지션의 최소 tick</td></tr><tr><td><code>tickUpper</code></td><td>int24</td><td>새로 예치할 포지션의 최대 tick</td></tr><tr><td><code>zeroForOne</code></td><td>bool</td><td>예치할 token이 token0인지 여부</td></tr><tr><td><code>mintAmount0Min</code></td><td>uint256</td><td>예치할 포지션에서 예치될 token0 최소값</td></tr><tr><td><code>mintAmount1Min</code></td><td>uint256</td><td>예치할 포지션에서 예치될 token1 최소값</td></tr><tr><td><code>tokenId</code></td><td>uint256</td><td>Zap 으로 예치할 tokenId<br>첫 예치시 '0'</td></tr><tr><td><code>deadline</code></td><td>uint256</td><td>deadline</td></tr></tbody></table>
{% endtab %}

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

## **State-Changing Functions**

**migrate**

```solidity
function migrate(
    struct MigrationParams calldata params
) external
```

포지션에 예치된 자산을 예치하고 새로운 포지션에 예치합니다.

**zapWithETH**

```solidity
function zapWithETH(
    struct ZappingParams memory params
) external
```

ETH로 풀에 입금할 수 있도록 도와주는 기능

**zapWithToken**

```solidity
function zapWithToken(
    struct ZappingParams memory params
) external 
```

하나의 자산 토큰으로 풀에 입금할 수 있도록 도와주는 기능
{% 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-new.klayswap.com/developers/contract/positionmigrator.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.
