# V3SwapRouter

해당 컨트랙트는 KLAYswap V3에 대한 상태 비저장 스왑 실행을 위한 라우터입니다.

## Code

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

## Address

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

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

{% tabs %}
{% tab title="Parameter Structs" %}

## Parameter Structs

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

```solidity
struct ExactInputSingleParams {
    address tokenIn;
    address tokenOut;
    uint24 fee;
    address recipient;
    uint256 deadline;
    uint256 amountIn;
    uint256 amountOutMinimum;
    uint160 sqrtPriceLimitX96;
}
```

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

```solidity
struct ExactInputParams {
   bytes path;
   address recipient;
   uint256 deadline;
   uint256 amountIn;
   uint256 amountOutMinimum;
}
```

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

```solidity
struct ExactOutputSingleParams {
    address tokenIn;
    address tokenOut;
    uint24 fee;
    address recipient;
    uint256 deadline;
    uint256 amountOut;
    uint256 amountInMaximum;
    uint160 sqrtPriceLimitX96;
}
```

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

```solidity
struct ExactOutputParams {
    bytes path;
    address recipient;
    uint256 deadline;
    uint256 amountOut;
    uint256 amountInMaximum;
}
```

{% endtab %}

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

## **State-Changing Functions**

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

```solidity
function uniswapV3SwapCallback(
    int256 amount0Delta,
    int256 amount1Delta,
    bytes data
) external
```

IUniswapV3Pool#swap을 통해 스왑을 실행한 후 `msg.sender`에 호출됩니다.&#x20;

구현 시 스왑에 대한 풀 토큰을 지불해야 합니다. 이 메서드의 호출자는 정식 UniswapV3Factory에 의해 배포된 UniswapV3Pool인지 확인해야 합니다. amount0Delta 및 amount1Delta는 교환된 토큰이 없는 경우 모두 0이 될 수 있습니다.

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

<table><thead><tr><th width="174">Name</th><th width="83">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>amount0Delta</code></td><td>int256</td><td>스왑이 끝날 때까지 풀에서 전송되었거나(음수) 받아야 하는(양수) token0의 양입니다. 긍정적인 경우 콜백은 해당 양의 token0을 풀로 보내야 합니다.</td></tr><tr><td><code>amount1Delta</code></td><td>int256</td><td>스왑이 끝날 때까지 풀에서 전송되었거나(음수) 받아야 하는(양수) token1의 양입니다. 긍정적인 경우 콜백은 해당 양의 token1을 풀로 보내야 합니다.</td></tr><tr><td><code>data</code></td><td>bytes</td><td>IUniswapV3Pool Actions#swap 호출을 통해 호출자가 전달한 모든 데이터</td></tr></tbody></table>

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

```solidity
function exactInputSingle(
    struct ISwapRouter.ExactInputSingleParams params
) external returns (uint256 amountOut)
```

한 토큰의 `amountIn`을 다른 토큰의 가능한 한 많이 스왑합니다.

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

<table><thead><tr><th width="116.66666666666666">Name</th><th width="203">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>params</code></td><td><code>struct ISwapRouter.ExactInputSingleParams</code></td><td>calldata에서 ExactInputSingleParams로 인코딩된 스왑에 필요한 매개변수</td></tr></tbody></table>

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

<table><thead><tr><th width="147.66666666666666">Name</th><th width="133">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>amountOut</code></td><td>uint256</td><td>받은 토큰의 양</td></tr></tbody></table>

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

```solidity
function exactInput(
    struct ISwapRouter.ExactInputParams params
) external returns (uint256 amountOut)
```

지정된 경로를 따라 한 토큰의 `amountIn`을 가능한 한 다른 토큰으로 교환합니다.

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

<table><thead><tr><th width="121.66666666666666">Name</th><th width="197">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>params</code></td><td><code>struct ISwapRouter.ExactInputParams</code></td><td>calldata에서 ExactInputParams로 인코딩된 다중 홉 스왑에 필요한 매개변수</td></tr></tbody></table>

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

<table><thead><tr><th width="157.66666666666666">Name</th><th width="123">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>amountOut</code></td><td>uint256</td><td>받은 토큰의 양</td></tr></tbody></table>

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

```solidity
function exactOutputSingle(
    struct ISwapRouter.ExactOutputSingleParams params    
) external returns (uint256 amountIn)
```

다른 토큰의 `amountOut`에 대해 하나의 토큰을 가능한 한 적게 스왑합니다.

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

<table><thead><tr><th width="113.66666666666666">Name</th><th width="225">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>params</code></td><td><code>struct ISwapRouter.ExactOutputSingleParams</code></td><td>calldata에서 ExactOutputSingleParams로 인코딩된 스왑에 필요한 매개변수</td></tr></tbody></table>

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

<table><thead><tr><th width="137.66666666666666">Name</th><th width="100">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>amountIn</code></td><td>uint256</td><td>입력 토큰의 양</td></tr></tbody></table>

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

```solidity
function exactOutput(
    struct ISwapRouter.ExactOutputParams params
) external returns (uint256 amountIn)
```

지정된 경로를 따라 다른 토큰의 `amountOut`에 대해 가능한 한 적은 토큰을 교환합니다(반전됨).

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

<table><thead><tr><th width="130.66666666666666">Name</th><th width="199">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>params</code></td><td><code>struct ISwapRouter.ExactOutputParams</code></td><td>calldata에서 ExactOutputParams로 인코딩된 다중 홉 스왑에 필요한 매개변수</td></tr></tbody></table>

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

<table><thead><tr><th width="140.66666666666666">Name</th><th width="114">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>amountIn</code></td><td>uint256</td><td>입력 토큰의 양</td></tr></tbody></table>
{% endtab %}
{% endtabs %}
