# 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 %}


---

# 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/v3swaprouter.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.
