# 소개

KLAYswap Documentation에 오신 것을 환영합니다! 이 문서는 AMM 프로토콜을 사용하는 방법부터 AMM 프로토콜의 특징, 토큰 이코노미 및 기능 등 KLAYswap에 대해 알아야 할 모든 것을 다룹니다.

**이 문서에서는 Klaytn Network의 AMM 프로토콜인 KLAYswap과 KLAYswap의 기능 및 거버넌스 토큰인 KSP(KLAYswap Protocol)에 대해 소개합니다.**

AMM (Automated Market Maker) 프로토콜은 현재 DeFi (Decentralized Finance) 라는 탈중앙화 금융 시장을 일반 대중에게까지 알리게 한 결정적인 DEX 프로토콜입니다. AMM 이란 간단히 말해 기존의 매수/매도로 구성된 오더북을 유동성 공급자들에 의해 조성된 온체인 유동성 풀 (Liquidity Pool) 로 대체하여 토큰 간의 즉각적인 스왑을 지원하는 프로토콜입니다.

AMM 기반의 덱스를 포함하여 전반적인 탈중앙화 금융 생태계를 활성화하기 위해서는 풍부한 유동성이 필요합니다. 이더리움의 대표적인 DeFi 프로토콜인 유니스왑 (Uniswap)의 경우 현재 약 USD 2.7 B 이상의 자산이 유동성 풀로 조성되어 있으며, 사용자들은 이 유동성을 기반으로 거래 활동을 합니다. 기존 이더리움 생태계의 DeFi 프로토콜에 비교하여 KLAYswap이 확실한 차별점을 가지며 실질적으로 사용될 수 있도록, 오지스는 오르빗 브릿지라는 체인 간 자산이 연계되어 이전의 탈중앙화 세계에서는 다루기 어려웠던 자산들의 페어와 유동성이 공급되는 환경을 일차적으로 구축했습니다. 오늘은 새롭게 구축된 클레이튼의 유동성 환경을 활용할 수 있는 DeFi 솔루션, KLAYswap을 여러분들께 소개드립니다.

**KLAYswap은 여러분의 참여를 기다립니다.**

완전한 온체인 인스턴트 스왑 프로토콜인 KLAYswap에서 거래자들은 유동성 풀에 의한 즉각적인 거래 환경을 경험할 수 있을 뿐 아니라, KSP라는 거버넌스 토큰으로 KLAYswap의 정책과 방향성 등을 결정하며 서비스를 발전시킬 수 있습니다.

또한, 사용자들은 프로토콜의 성장에 기여하는 만큼 거래 수수료 수익 등 다양한 형태의 기여 보상을 받을 수 있습니다. 암호화폐를 장기간 보유하고자 하는 장기 투자자, 수수료 수익을 원하는 투자자, KSP 마이닝을 통해 KLAYswap 거버넌스에 참여하고자 하는 채굴자 등 다양한 분들이 KLAYswap 생태계에 참여할 수 있습니다.

그동안 DeFi를 경험해보고 싶었지만 생소한 동작방식과 낮은 접근성으로 참여에 어려움을 겪었던 모든 분들이 이번 KLAYswap 런칭을 통해 손쉽게 경험하고 즐길 수 있을 것으로 기대합니다.

여러분들의 많은 참여를 부탁드리며, KLAYswap을 시작으로 클레이튼 네트워크에 만들어질 다양한 DeFi 프로토콜을 기대해주세요.


# 프로토콜 개요

KLAYswap은 AMM 기반 스왑 프로토콜입니다.

AMM은 기존 오더북 기반의 DEX에서 발전하여, 온체인상에서의 암호화폐 거래 방식을 변화시킨 혁신적인 거래 매커니즘입니다. 매수/매도 오더북을 대신하여 유동성 공급자들에 의해 조성된 유동성 풀을 통해 트레이더들은 자유롭게 거래할 수 있으며, 유동성 공급자들은 해당 유동성 풀에서 발생하는 프로토콜 이용에 따른 풀 수수료를 자신의 유동성 기여분에 맞춰 보상으로 공유 받을수 있습니다. 또한, KCT (Klaytn Compatible Token) 타입을 따르는 토큰을 보유하고 있는 보유자라면 누구든 유동성 공급자가 될 수 있습니다.

KLAYswap의 AMM 메커니즘은 x\*y=k \[ x= KLAY, y= KCT, k= Constant Function ] 공식을 바탕으로, 유동성 풀 생성시에 각 토큰의 수량에 따라 해당하는 토큰의 가격대가 형성됩니다. 예를 들어, x (KLAY) 의 유동성 공급량이 증가하면 상수 함수 k를 유지하기 위해 y (KCT)가 줄어듭니다. 이와 같은 방식으로 유동성 풀에서 토큰 별 공급 수량이 변화하며 가격이 형성되도록 설계되어 있습니다.

**참여자들:**

KLAYswap은 AMM(Automated Market-Making) 메커니즘과 유동성 풀로 동작하는 스왑 프로토콜로, KLAY 또는 KCT 유형의 토큰을 보유한 모든 사람이 유동성 공급자가 되어 풀 이용 수수료 보상을 얻을 수 있는 온체인 스왑 서비스입니다.

* **단일 풀 참여자** : 한 개의 자산을 풀에 공급하고 해당 토큰의 공급 보상(APR)과 KSP 보상을 받을 수 있습니다. 단일 풀 공급자는 풀(컨트랙트)에 자산 공급 시 증표인 aToken을 지갑에 수령하게 되며, 풀 내에서의 내 iToken 지분율에 따라 각종 보상을 분배받습니다.
* **V2 풀 참여자** : 두 개의 자산을 V2 풀에 공급하고 KSP보상, 추가 에어드랍 보상을 받을 수 있습니다. V2 풀 공급자는 풀(컨트랙트)에 자산 공급 시 공급 증표인 LP (Liquidity Provider) Token을 지갑에 수령하게 되며, 풀 내에서의 LP Tokne 지분율에 따라 각종 보상을 분배받습니다.
* **V3 풀 참여자** : 두 개의 자산을 V3 풀에 공급하고 풀 이용 수수료 보상, KSP 보상, 추가 에어드랍 보상을 받을 수 있습니다. V3 풀 참여자는 풀(컨트랙트)에 자산 공급 시 증표인 LP (Liquidity Provider) NFT를 지갑에 수령하게 되며, 풀 내에서의 지분율에 따라 각종 보상을 분배받습니다.
* **거래자** : KLAYswap 풀에서 원하는 토큰을 거래할 수 있습니다. 거래 가격은 풀 내 공급된 두 자산의 수량(교환비율)에 따라 변동됩니다.
* **스테이커** : 스테이커는 KSP를 스테이킹하고 KSP 인플레이션 보상을 받습니다. 장기간 스테이킹 할 수록 더 많은 vKSP(투표권)를 획득하며, 전체 프로토콜 vKSP에서 내 지분율에 따라 KSP 보상과 클레이스왑 이용에 따른 풀 수수료 보상의 10%를 자동으로 분배받습니다.

\*AMM 기반 스왑 프로토콜에서는 거래 시점의 예상 가격과 실제 체결된 가격의 괴리 (슬리피지/Slippage)가 발생할 수 있습니다. 또한, 유동성 공급자는 공급 시점 이후에 해당 풀의 토큰 가격이 외부 가격과의 괴리가 발생하여 자동화된 마켓 메이킹 메커니즘에 의해 조정되는 과정에서 손실 (Impermanent Loss) 이 발생할 수 있습니다.

거래 및 유동성 공급시에는 해당 리스크를 염두에 두시고 진행하시길 바랍니다.


# 핵심 개념

KLAYswap의 스마트 계약 구조, 스왑 요청 및 채굴의 핵심 개념을 설명합니다.

<figure><img src="https://199555881-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FRM76CLSvWgT5g122HIcr%2Fuploads%2FFDY714sWZuEJn1Kt1uAF%2Fimage.png?alt=media&amp;token=82d33c73-53d3-4a60-9c11-060af7c1b2ef" alt=""><figcaption></figcaption></figure>

\
계약 유형:‌

* Factory Smart Contract
* Exchange Smart Contract
* Governance Smart Contract
* VotingKSP Smart Contract
* Treasury Smart Contract
* Distribution Smart Contract

‌

계약 유형은 Contract 문서에서 더 자세히 설명하겠습니다.

{% content-ref url="/pages/-MiZPR9-4ZWHHlQ4L2c7" %}
[Contract](/developers/contract)
{% endcontent-ref %}


# 클레이스왑의 장점

KLAYswap은 안정성, 지속 가능성 및 확장성의 장점이 있습니다.

**안정성**

KLAYswap은 세계적인 보안 감사 기관과 협업해 보안감사를 진행 중입니다. KLAYswap은 프로토콜을 구성하는 다양한 스마트 컨트랙트로 모든 동작이 이루어집니다. 스마트 컨트랙트 내의 작은 취약점 하나만으로도 서비스 이용 및 보안과 관련하여 치명적인 사고가 발생할 수 있습니다. 사용자들의 거래 안전을 최우선시 하는 KLAYswap은 예상되는 모든 보안 사고를 미연에 방지할 수 있도록 세계적인 보안 감사 기관에 의뢰해 꾸준히 보안 인증을 진행 중에 있습니다.

{% content-ref url="/pages/bXoNHEwpGkqYYDz3adWP" %}
[보안 감사](/audit)
{% endcontent-ref %}

**지속 가능성**

KLAYswap은 Uniswap의 아류작이 아닙니다. sKLAY와 KLAY 축을 중심으로한 ‘실질적’이고도 ‘유의미한’ 거래 볼륨이 꾸준히 발생할 수밖에 없는 구조입니다. 특히 sKLAY의 경우 스테이킹 된 KLAY와 본딩된 자산이기 때문에 7일의 언스테이킹 기간을 회피하고자 ‘할인’하려는 수요와, 시장가격보다 저렴하게 KLAY를 구매하려고 하려는 수요가 만나는 흥미로운 시장이 형성될 것입니다. 특히 sKLAY-KLAY 풀에 기여할 경우 :

1. KSP 마이닝 토큰 획득
2. KLAYswap 이용에 따른 풀 수수료에 대한 KLAY 획득
3. sKLAY 보유로 KLAY에 대한 스테이킹 보상 KLAY의 획득이 가능합니다.

그 어떤 다른 Swap 서비스에서도 찾아볼 수 없었던 (3) 항목의 수익이 보장됨으로 인하여 더 많은 가치의 창출이 가능해지는 것은 물론 기존의 DeFi가 갖고 있던 지속 가능성 문제 또한 해결할 수 있습니다.

**확장성**

KLAYswap은 단순히 Klaytn 기반의 토큰만을 다루는 것이 아닌, 실생활에 존재하는 다양한 디지털 자산을 다루고자 하는 Klaytn 재단의 목표에 맞춰 Orbit Chain의 상호운용성에 의해 타 네트워크 기반 토큰들까지 다룰 수 있습니다. 유동성 채굴 프로그램에서 확인할 수 있듯이, 이더리움 기반의 토큰들 (ETH, ORC, DAI, WBTC) 은 오르빗 브릿지를 통해 클레이튼 생태계로 넘어올 수 있습니다.

또한, 유동성 공급시 공급 증표로 나오는 LP 토큰은 자체적으로 수익을 발생 시킬 수 있는 구조이기 때문에, 타 금융 프로토콜과의 연동이 가능하며 생태계 내 모든 이해관계자 간 가치 교환을 가능하게 합니다. 이 LP 토큰을 활용하여 클레이튼에는 혁신적인 금융 어플리케이션이 만들어질 수 있습니다. 요약하자면, KLAYswap은 상호운용성과 자산의 효율성 증대로 인하여 확장성이 확보된 상태로 Klaytn의 경제 생태계를 활성화 시킬 수 있는 중요한 ‘시작점’과 같습니다.\
\ <br>


# 위험 & 보안

KLAYswap 사용에는 다음과 같은 위험요소가 있음을 주의하시기 바랍니다.

&#x20;

●   KLAYswap은 <mark style="color:blue;">**중앙화된 중개인이 없는 블록체인 탈중앙 프로토콜**</mark>로 사용자는 스스로의 책임과 판단으로 다른 사용자들이 생성한 블록체인 상의 유동성 풀을 통해 거래에 참여하게 됩니다. 이로 인해 사용자의 실수로 발생한 결과에 대해 복구지원을 받기 어려운 경우가 많으므로 실수(오송금등)에 의한 리스크 관리를 위해 항상 먼저 소액으로 테스트를 해보실 것을 권고합니다.

●   클레이스왑 웹사이트에서 확인되는 모든 자산 및 자산 유동성 풀은 <mark style="color:blue;">**개별 심사를 거치지 않고 사용자가 자율 등록한**</mark> 클레이튼 체인상의 토큰이며 <mark style="color:blue;">**클레이스왑 팀에서 안전성을 보증하지 않습니다.**</mark>

●   AMM(Automated Market Maker) 방식의 특성상, 사용자가 클레이스왑에서 자산 교환 시 건당 규모, 현재 풀에 대기중인 자산수량(비율), 풀의 실시간 유동성 공급/회수 상황 변동에 따라 사용자가 적용받는 <mark style="color:blue;">**자산가격이 크게 변동할 수 있습니다.**</mark>

●   자산가격 변동으로 인해 사용자가 예상하지 못한 가격 또는 비율로 자산이 풀에 공급되거나 회수될 수 있으며, 풀에 자산을 공급한 시점의 가격에서 변동이 발생할 경우 자산 공급, 회수 시 일반적으로 자산을 그냥 보유했을 때보다 손실이 발생할 수 있습니다.

●   웹사이트 내에서 <mark style="color:blue;">**표시되는 모든 수치는 사용자의 판단을 돕기 위해 제공되는 추정적 예상 정보**</mark>로, 정보의 적시성, 적합성, 정확성을 보증하지 않습니다.

●   정상적인 클레이스왑 웹사이트는 <mark style="color:blue;">**절대로 사용자 개인지갑의 개인키, 니모닉키, 시드 구문 등의 입력을 요구하지 않습니다.**</mark>

●   그 외 위험요소, 유의사항 및 사용조건은 아래 내용을 확인해주시기 바랍니다.

## **1. 개요**

KLAYswap은 제3자가 개발한 클레이튼(Klaytn) 체인을 플랫폼으로 활용하는 <mark style="color:blue;">**탈중앙 어플리케이션(DApp)**</mark>입니다. 클레이스왑의 사용자는 클레이스왑 사이트([https://klayswap.com](https://klayswap.com/))(이하 KLAYswap과 클레이스왑 사이트를 함께 “클레이스왑”이라 합니다)를 비롯한 접근 인터페이스를 통해 자신이 소유한 클레이튼 블록체인 지갑을 탈중앙화 프로토콜과 직접 통신하여 여러 가상자산의 교환 및 유동성 공급 기능을 이용할 수 있습니다.

<mark style="color:blue;">**본 유의사항 안내문(이하 “본 안내문”이라고 합니다)의 내용은 사용자가 클레이스왑을 사용하기 위해 반드시 동의하여야 하는 사항을 포함하고 있으니 주의 깊게 끝까지 읽어 주시기 바랍니다. 사용자가 본 안내문을 확인하고 클레이스왑을 계속 사용할 경우, 본 안내문의 내용을 읽고 이해하고 동의한 것으로 인정됩니다.**</mark>

&#x20;

## **2. 본 안내문의 변경**

본 안내문의 내용은 클레이스왑의 변경, 추가, 삭제, 보완, 사용자 보호, 오류 수정 등 사유로 상시 변경될 수 있습니다. 본 안내문의 내용이 변경될 경우, 변경 내용이 게시된 시점부터 변경 내용의 효력이 발생합니다. 다만 변경될 내용이 사용자에게 불리하거나 중대한 사항의 변경인 경우에는 그 효력발생일 30일 이전부터 게시합니다. 효력발생일 이후에 사용자가 변경된 본 안내문을 확인하고 클레이스왑을 계속하여 이용하는 경우 변경 내용을 읽고 이해하고 동의한 것으로 인정됩니다.

&#x20;

## **3. 이용 자격(Eligibility)**

• 클레이스왑을 사용하려면, 사용자는 자신의 국가에서 최소한 민사상 성년(예: 싱가포르 기준 만21세)이어야 하며 사용자 자신 혹은 사용자가 대리 또는 대표하는 법인을 대신하여 민사상 계약을 체결하고 이를 준수할 수 있는 완전한 권리 및 권한을 가지고 있음을 진술하여야 합니다.

• 사용자는 (i) 어떠한 정부 당국(the Office of Foreign Assets Control of the U.S. Department of the Treasury 등을 포함하나 이에 국한되지 않음)에 의해서도 경제 또는 무역 제재의 대상에 등재되지 않았고, (ii) 미국에 의한 포괄적인 경제 제재의 대상이 되는 관할 구역의 시민, 거주자가 아니고, (iii) 사용자의 클레이스왑 접근 및 사용이 관련 법령과 규제를 완전히 준수하고, 사용자가 어떠한 불법적인 활동을 수행하거나 촉진, 조장할 목적으로 클레이스왑을 사용하지 않을 것을 진술합니다.

&#x20;

## **4. 클레이스왑 이용과정에서의 유의사항**

## **4.1. 일반사항**

클레이스왑 사이트 이용 시 안정적인 네트워크 환경 조성을 위해 반드시 아래 유의사항을 확인해주시기 바랍니다.

• 사이트 이용 시 한 개의 탭을 사용하는 것을 권장합니다.

• 여러 개의 탭으로 장시간 접속, 회사/공용 IP를 사용하는 장소에서 접속, RPC에 과도한 요청이 발생하는 경우 이용이 어려울 수 있습니다.

• 이외 기타 원인으로 인하여 사이트 이용이 어려운 경우 사이트에 접속중인 모든 탭을 종료한 후 최소 1시간 초과 후 다시 사이트에 접속해주시기 바랍니다.\[O1]

&#x20;

## **4.2. 자산 공급, 회수 관련**

### **4.2.1. 자산 공급, 회수**

사용자는 클레이스왑에서 자산 공급과 회수 시 다음과 같은 사항에 유의해야 합니다.

• 트랜잭션을 요청하기 위해서는 클레이튼 자산을 다룰 수 있는 클레이튼 지갑과, 클레이튼 체인에서 트랜잭션 처리 수수료로 사용할 약간의 클레이튼(KLAY)을 보유하고 있어야 합니다.

• 클레이스왑에서 유동성 공급에 활용할 수 있는 자산은 클레이튼 체인 상에서 발행된 클레이튼 호환 토큰(KCT, Klaytn Compatible Token) 형태를 따릅니다. 그러므로 <mark style="color:blue;">**클레이튼 호환 토큰(KCT) 종류와 다른 이종 체인(이더리움, 리플, 바이낸스 스마트체인 등, 여기에 명시적으로 언급된 자산에 한정되지 않음)의 자산은 반드시 브릿지 사이트를 통해 클레이튼 호환 토큰 형태로 전환하여 입금해야 합니다.**</mark>

[토큰별 전송 방법 보기(링크)](https://docs.klayswap.com/v/kr/how-to-guides/deposit)\ <br>

### **4.2.2. 자산 오전송**

사용자는 지갑 간 자산의 전송을 진행할 때 자산의 종류와 주소를 정확히 확인하여야 합니다. 사용자가 <mark style="color:blue;">**클레이튼 체인에서 지원하지 않는 종류의 자산을 전송하거나, 전송 주소를 미입력하거나 오입력할 경우**</mark> 정상 입금 처리가 되지 않아 <mark style="color:blue;">**자산이 유실될 수**</mark> 있습니다.

자산 오전송과 관련된 보다 자세한 유의사항은 아래 링크를 참조하시기 바랍니다.

• 클레이튼과 다른 이종 체인의 자산이지만 브릿지 사이트를 거치지 않고 클레이스왑 인터페이스를 통해 바로 지갑 간 전송 이 가능한 일부 자산(리플, XRP)의 경우에도, <mark style="color:blue;">**사용자는 각 지갑별로 할당되는 전송 주소와 데스티네이션 태그를 정확히 입력해야 합니다. 전송 주소 또는 데스티네이션 태그를 미입력하거나 오입력할 경우 정상 전송 처리가 되지 않아 자산이 유실될 수 있습니다.**</mark>

• <mark style="color:blue;">**클레이스왑은 사용자 자산의 개인 키를 중앙 주체가 관리하지 않는 탈중앙형 애플리케이션으로서, 위와 같은 상황을 포함한 사용자의 오전송에 대해 클레이스왑에서 자산의 복구 및 기술적 지원이 불가능한 구조로 되어 있습니다.**</mark> 이 구조는 사용자가 자산을 오전송할 경우 해당 자산에 대해 클레이스왑을 비롯한 어느 누구도 접근할 수 없게 설계되어 있으며, 이 때문에 클레이스왑의 오전송 대응은 다른 중앙형 거래소(Upbit, Bithumb, Coinone 등)에서의 오전송 대응방식과는 기술적, 구조적인 사유로 인하여 동일하지 않을 수 있습니다.

• 사용자 실수를 방지하기 위해 먼저 **소액으로 전송 테스트 완료 후 전체 자산을 전송**하는 것을 권장합니다.

\* 브릿지를 통해 발생한 자산 오전송은 개별 브릿지 사이트의 약관, 유의사항을 확인해주시기 바랍니다. 오르빗 브릿지의 경우에는 아래 링크를 참조하시기 바랍니다.

[오르빗 브릿지(링크)](https://bridge.orbitchain.io/)

&#x20;

## **4.3. 유동성 공급, 유동성 회수, 스왑 관련**

사용자는 클레이스왑에서 유동성 풀에 사용자의 자산을 공급하거나 회수하여 유동성 공급자의 포지션을 취할 수 있고, 또한 유동성 풀을 통해 스왑 거래를 할 수 있으나, 이로 인해 발생할 수 있는 위험에 대해 인지하고 모든 행위를 자신의 판단과 책임으로 진행하여야 합니다.

### &#x20;**4.3.1. 가격**

클레이스왑은 AMM(Automated Market Maker) 방식을 기반으로 작동하여, 클레이스왑에서 각 토큰의 가격은 토큰 쌍이 예치된 컨트랙트 내의 교환비율로 결정됩니다. 자동화된 스마트 컨트랙트가 각 풀이 x\*y=k 공식에 의해 항상성을 유지하도록 가격을 조정하기 때문에, 이에 따라 클레이스왑 웹사이트에 표시되는 가격은 <mark style="color:blue;">**타 거래소의 가격과 동일하지 않을 수 있으며, 적정가격 또는 시세와의 일치를 보장할 수 없습니다.**</mark>

\[참고] [AMM이 가격을 측정하는 방식](https://academy.binance.com/ko/articles/what-is-an-automated-market-maker-amm)

가격과 관련된 보다 자세한 유의사항은 아래 링크를 참조하시기 바랍니다.

• 사용자가 자산을 공급, 회수, 스왑 하는 시점의 각 토큰 가격은 위의 가격 측정 방식(토큰 쌍의 교환 비율)으로 적용되며, <mark style="color:blue;">**교환 수량에 정비례하여 가격이 결정되지 않습니다.**</mark>

• 또한 다양한 참여자들의 실시간 참여로 인해 <mark style="color:blue;">**순간적으로 토큰 쌍의 교환 비율이 변경**</mark><mark style="color:blue;">됨에 따라</mark> <mark style="color:blue;"></mark><mark style="color:blue;">**거래 직전 클레이스왑 웹사이트 상에서 표시된 가격이 거래시점에 변동될 가능성이 존재하며, 실제 거래시점에 적용되는 가격은 달라질 수 있습니다.**</mark> (토큰쌍에서 거래 발생, 토큰 쌍에서 자산 공급, 회수 등)

• 클레이스왑 프로토콜은 현재 교환 비율이 크게 변동되어 발생할 수 있는 손실을 최소화하기 위하여 사용자가 적용 받게 될 교환비율에서 일정 범위 내에서만 요청이 실행될 수 있도록 안정 장치를 두고 있으나, <mark style="color:blue;">**사용자는 반드시 거래시점에 적용된 교환 비율을 명확하게 확인한 후에 유동성 공급, 회수, 스왑을 진행해야 합니다.**</mark>

&#x20;

### **4.3.2. 보상, APR 비용의 표시**&#x20;

유동성 공급 APR, KSP 분배 APR, 에어드랍 APR, 프로토콜 이용에 따른 풀 수수료APR, 스테이킹 APR, 단일 유동성(Supply)을 활용하는 대가로 지불하는 활용 APR 등 <mark style="color:blue;">**클레이스왑의 웹사이트 상에서**</mark> <mark style="color:blue;">**표시되는 모든 APR은 분배되는 보상을 연 기준으로 환산한 예상 추정치로, 확정 APR을 보장하는 것이 아닙니다.**</mark>

표시되는 APR과 관련된 보다 자세한 유의사항은 아래 링크를 참조하시기 바랍니다.

• 특히 각 유동성 풀의 KSP 분배  APR은 매일 오전 9시(KST) 풀 별 KSP 바이백 수량에 따라 집계된 KSP Mining rate에 따라 업데이트 됩니다. 이때 KSP APR은 개발팀에 할당되는 물량(15%)을 포함하여 표시된 수치이며, 사용자가 실제로 분배받는 보상은 팀물량을 제외한 수량입니다.

• 클레이스왑은 최대한 실시간으로 정확한 정보를 제공하기 위해 노력하고 있으나, 분배되는 토큰의 가격 변동, 유동성 풀 규모 변화, 트랜잭션 상의 처리 지연 등으로 인하여 표시되는 예상 APR은 실제 APR과 달라질 수 있습니다.

• 예상 APR 계산 방식은 클레이스왑 웹사이트의 관련 Documentation 을 참조하시기 바랍니다.

&#x20;

## **4.4. 유동성 공급 방식 별 세부 주의사항**

### **4.4.1. 단일 유동성의 공급(Supply) 및 활용(Borrow)**

#### **4.4.1.1 자산 공급 및 회수**

사용자는 Supply 풀에 자산을 공급하여 풀에서 발생하는 보상을 획득하는 동시에 자신이 공급한 자산을 담보자산으로 추가로 자산을 활용할 수 있습니다. 풀에 공급된 자산을 활용하기 위해서는 자산 활용의 대가로 비용을 지불해야 하며, 지불된 비용은 유동성 공급자와 프로토콜의 거버넌스 토큰 바이백 및 안정성 유지비로 활용됩니다.

Supply 풀의 자산 활용비율이 높아질수록, 사용자가 풀에 공급한 자산의 공급 해제가 지연될 수 있습니다. 이 경우 현재 풀의 자산 공급과 활용 현황에 따라 자동화 된 스마트 컨트랙트가 공급 보상률(%)과 활용 비용(%)을 조정함에 따라 자연스럽게 풀의 추가 자산 공급과 활용 자산의 반환을 유도하여 공급된 자산의 공급 해제 기능 정상화를 효과적으로 추구하도록 설계되어 있습니다.

공급 보상률, 활용비용, 담보비율 등 변수는 각 자산 자체의 특징과 시장 상황에 따라 모두 다른 값으로 설정되며, KLAYswap 거버넌스 투표에 의해 이러한 변수를 변경할 수 있고, 이를 자동화된 컨트랙트를 통해 관리합니다 . 다만, 스테이킹 등을 통한 거버넌스가 구축되기 전까지는 개발사가 특정 자산의 대규모 해킹, 자산 가치의 폭락 등이 발생하는 경우에 한해 해당 변수들을 조정할 수 있습니다.

사용자는 클레이스왑에서 한 종류의(단일) 자산을 공급하여 KSP 보상과 자산 공급 보상을 획득할 수 있습니다.&#x20;

[<mark style="color:blue;">**\[참고\] 자산별 변수 보기**</mark>](https://docs-new.klayswap.com/product/singledeposit/undefined-1#undefined-3)

&#x20;

#### **4.4.1.2 자산 활용 및 반환**

사용자는 풀에 공급하는 자산, 즉 담보자산(이하 본 항에서 “담보자산”이라 합니다)의 미(美)달러 환산가치(Price Oracle 가격 기준)를 기준으로 정해지는 최대 범위 내에서 다른 사용자들이 풀에 공급한 자산을 일정한 비용(이하 본 항에서 “활용비용”이라 합니다)을 지불하고 임시 활용(이하 본 항에서 “활용자산”이라 합니다)할 수 있습니다. 사용자가 활용할 수 있는 자산의 범위는 고정값이 아니며, 각 자산의 풀과 시장 상황 등을 고려하여 거버넌스에서 정하는 값에 따라 결정됩니다. \[l1]  더 자세한 내용은 아래 Supply & Borrow 가이드 링크를 참조하시기 바랍니다.

사용자는 본 유의사항 및 기타 Supply & Borrow 조건에 고지된 특수한 경우(자동반환의 경우 포함)를 제외하고 원칙적으로 사용자가 원하는 시점에 자산 공급과 활용을 종료할 수 있습니다. 활용자산 반환 시에는 활용자산과 동일한 자산으로 반환하거나, Supply 풀에 자산 공급 후 획득한 aToken으로 반환할 수 있습니다.

aToken은 사용자가 풀에 자산 공급 시 지급받는 증표이자 유동성 수단으로, 공급 자산에 대한 실시간 보상이 발생하여 그 가치가 사용자가 공급한 자산 가치에 1:1 비율로 고정되어 있는 자산입니다. 사용자는 aToken 반환 시 그 가치에 상응하는 원본 자산을 공급된 풀에서 받을 수 있습니다.

활용비용 및 자동 반환 임계점까지 일부 담보자산의 공급을 해제할 수 있으며, 활용자산이 모두 반환 완료된 경우 모든 담보자산의 공급을 해제할 수 있습니다.

사용자는 Supply & Borrow 사용 시 다음과 같은 점들을 포함한 기대수익의 하락 또는 자산손실의 위험에 대해 주의해야 합니다.

(1) 사용자가 풀에 자산을 공급하는 경우, 자산별로 자동 반환 임계점이 존재하며, 사용자가 풀에서 자산을 활용하는 경우, 사용자의 자산 활용 안전 지수(이하 본 항에서 “Health factor”이라 합니다)는 ‘총 활용자산 가치(활용비용 포함)’ 대비 ‘총 담보자산가치(공급 보상 포함)의 합에 공급 규모에 따른 자산별 자동 반환 임계점의 가중 평균을 적용한 값’의 비율로 정의합니다.

&#x20;

(2) 담보자산, 활용자산의 시장 가격이 자산 활용 시점의 시장 가격보다 크게 상승하거나 하락하는 경우, 또는 풀 자산 활용이 지나치게 활성화되어 활용 비용(%)이 급격하게 상승함에 따라 Health factor가 기준치(1) 미만인 경우, 사용자의 동의나 확인 또는 사용자에 대한 통보를 필요로 하지 않고 사용자가 공급한 총 공급자산이 자동으로 공급 해제되어 활용자산 반환에 사용될 수 있으며(이 경우 정해진 조건에 따른 자동 반환 수수료가 추가됨), 이 경우 해당 시점의 사용자의 수익 또는 손실이 그대로 확정되며 큰 손실이 발생할 가능성도 있습니다. 자동반환 기준공식 및 기준치는 아래 Supply & Borrow 가이드 링크를 참조하시기 바랍니다.

&#x20;

(3) 사용자가 Supply 풀에 공급된 다른 사용자의 자산을 활용할 때는 해당 풀의 활용비용 조건에 따라 실시간으로 사용자의 활용비용이 누적되며 활용 자산 반환 시 이러한 누적 활용비용을 활용자산과 함께 반환하여야 합니다.

&#x20;

(4) 사용자는 블록체인, 가상자산별 특성뿐만 아니라 본 문서에 고지된 KLAYswap의 구현 원리를 충분히 숙지하시고, 이에 기반한 기대비용의 변화 또는 가상자산손실의 위험 등을 반드시 고려하셔야 합니다.

&#x20;

특히, Supply\&Borrow 기능은 구조적인 복잡성 및 가상자산 손실의 위험성이 높습니다. 따라서 탈중앙화 거래(DEX) 프로토콜에 대한 이해도가 낮은 사용자 등에게는 해당 기능의 사용을 추천하지 않습니다.

사용자는 반드시 Supply & Borrow 기능을 사용하시기 전에 본 문서 및 아래의 'Supply & Borrow 가이드'의 내용을 충분히 숙지하셔야 합니다. 아울러 본 기능의 사용에 따른 개인적, 경제적 위험 등에 대하여 신중히 고려하시어 자신의 책임과 판단하에 거래를 진행하셔야 합니다.

&#x20;

<mark style="color:blue;">**\[참고] Supply & Borrow 가이드(링크)**</mark>

&#x20;

&#x20;**4.4.1.3 자동 반환**

Supply & Borrow 기능 사용중 사용자의 활용자산이 반환되지 못할 위험(가상자산 시장 가격의 변동성 등을 포함)을 방지하기 위해 사전에 설정 및 공개된 자동반환 기준공식에 따른 조건이 충족되는 경우, 사용자의 동의, 확인, 통보 등의 별도 절차없이 즉시 자동반환이 진행될 수 있습니다. 이 때 활용자산만 반환되는 것이 아니라 사용자의 공급자산도 모두 해제되어 이를 활용자산의 반환에 이용할 수 있습니다.

즉, Supply & Borrow 기능 사용 중 실시간으로 사용자의 ‘총 활용자산 가치(활용비용 포함)’ 대비 ‘총 담보자산가치(공급 보상 포함)의 합에 공급 규모에 따른 자산별 자동 반환 임계점의 가중 평균을 적용한 값’의 비율 (이하 “Health factor”이라 합니다)을 나타내는 Health factor가 기준치(1) 미만인 경우, 자동 반환 조건이 충족됩니다.

자동반환 조건이 충족되면 담보자산의 일부 또는 전부를 통해 활용 자산을 반환합니다.

이때 자동 반환 수수료가 발생하며, 자동반환 수수료는 자산별로 상이합니다.

자산의 시장가격이 급격히 변동하는 등의 사유로 인해 자동반환이 실행되는 과정에서 사용자가 공급한 자산의 전부(100%)가 반환(또는 손실)되어 사용자가 수령할 수 있는 자산이 남지 않는 경우도 발생할 수 있습니다.

&#x20;

자동반환을 방지하기 위해서는 Health factor가 기준치(1) 미만으로 떨어지지 않도록 미리 공급자산을 추가로 여유 있게 공급해 놓거나, 일정 부분 이상의 활용 자산을 반환하여 활용자산의 규모를 낮춰 두어야 합니다.

&#x20;

**• 자동반환 기준공식**

&#x20;

**1) 자동 반환 임계점**

\= \[총 담보자산 가치(공급 보상 포함)의 합] / \[총 활용자산 가치(활용비용 포함)의 합]&#x20;

&#x20;

**2) 사용자의 Health factor**

\= \[총 담보자산가치(공급 보상 포함)의 합\*자산 공급 규모에 따른 가중 평균 적용된 자동 반환 임계점]\
&#x20; / \[총 활용자산 가치(활용비용 포함)]

&#x20;

**3) 사용자의 Health factor < 1.0 인 경우 자동 반환 진행**

&#x20; • **공급(담보)자산** : 자산 활용을 위해 사용자가 기본으로 공급하는 자산

&#x20; • **활용자산** : Supply 풀에 공급된 다른 사용자들의 자산을 일정한 비용을 지불하고 임시 활용하는 자산

&#x20;

**4) 자동 반환 후 사용자의 공급 포지션 = 총 담보 자산 – \[반환 대상 자산\*(1+자동 반환 수수료 비율)]**

&#x20; • 자동 반환 수수료 비율 : 자산별 상이, ([**docs fee 참고**](https://docs-new.klayswap.com/product/singledeposit/undefined-1#undefined-3))

&#x20; • 활용자산의 활용비용 : 실시간으로 변경(각 풀의 보상률 모델에 따라 상이)

&#x20;

Supply & Borrow의 경우 구조적인 복잡도가 높고 자산손실의 위험성도 높은 기능에 해당하므로, 가상자산 투자경험이 적은 사용자, 손실의 가능성을 감당하기 어려운 사용자등 에게는 사용을 추천하지 않습니다.

&#x20;

사용자는 본 Supply & Borrow 가이드의 내용을 상세히 살펴보시고 Supply & Borrow 위험에 대하여 신중히 평가, 고려한 후 자신의 책임과 판단 하에 거래를 진행하여야 합니다.

&#x20;

&#x20;**4.4.1.4 Price Oracle**

&#x20;

Price Oracle은 KLAYswap에서 사용하는 외부 가격 기준입니다. Supply & Borrow 풀 자산 공급, 담보 가치 평가, 활용 가능 범위, 공급 해제, 자동반환의 실행과 관련된 모든 가격 기준은 Price Oracle을 통해 측정됩니다. Price Oracle 가격은 KLAYswap 내 풀 교환비율(가격)과 다를 수 있습니다.

&#x20;

• 스테이블 코인(USDT, USDC, DAI 등)은 고정된 가치 (USD 1.0)로 계산됩니다. 다만, 스테이블 코인의 안정성에 중대한 문제가 발생하거나 이에 준하는 사유가 존재하는 경우에는 적절한 조치가 취해질 수 있습니다.

&#x20;

• 그외 코인은 자산별 유동성을 고려하여 Binance, Upbit, Bithumb, Coinone, Huobi, gateio등 중앙거래소의 가격, KLAYswap 내 풀 교환 비율 및 TWAP 중 중앙값을 기준으로 합리적으로 결정합니다.

### **4.4.2. 페어 유동성 공급**

사용자는 클레이스왑에서 두 종류의(페어) 자산을 공급하여 KSP 분배 수익, 자산 공급 분배 보상, 토큰 에어드랍 수익을 획득할 수 있습니다.

페어 유동성 공급에서는 비영구적 손실이 발생할 수 있습니다. 자세한 내용은 아래 링크를 참조하시기 바랍니다.

<mark style="color:blue;">**사용자가 공급한 자산의 현재 시장가격이 공급 시점의 가격보다 크게 상승하거나 하락하는 경우, 자산을 공급하지 않고 그대로 보유한 경우보다도 기대 보상 규모가 낮아질 수 있으며, 오히려 해당 시점의 평가손실이 발생할 가능성도 있습니다.**</mark> 단, 이런 손실은 사용자가 풀에서 자산을 회수하는 시점에 확정되며(이런 성격 때문에 이런 손실을 비영구적 손실이라고 부르며 더 자세한 내용은 아래 링크를 참조하시기 바랍니다), 자산을 회수하기 전의 자상 공급 상태에서 자산의 가격 차이가 풀에 자산을 공급할 당시의 가격으로 회복되는 경우 실제 손실은 줄어들 수 있습니다. 또한 전체 보상규모는 KSP 분배와 풀 이용 수수료 분배 보상까지 함께 고려하여 예상하여야 합니다. 비영구적 손실에 관한 보다 자세한 내용은 아래 링크를 참조하시기 바랍니다.

<mark style="color:blue;">**\[참고]**</mark> [<mark style="color:blue;">**비영구적 손실이란?**</mark>](https://academy.binance.com/ko/articles/impermanent-loss-explained)&#x20;

### **4.5. KSP 스테이킹 관련**

**•&#x20;**<mark style="color:blue;">**KSP 스테이킹은 KSP를 타인에게 맡겨 보관하거나 위탁하는 행위가 아니라 사용자 스스로가 정해진 조건(스테이킹 기간 등)에 따라 대상 KSP가 송금, 거래되지 않도록 서명하여 락업하는 것입니다. 따라서 이러한 조건을 위반하는 중도취소, 출금, 출금지갑 변경 등은 불가능합니다.**</mark>

• 8X 효율로 스테이킹을 하는 경우, 정해진 언스테이킹 기간 없이 계속해서 스테이킹을 진행합니다. 4X 이하의 효율로 스테이킹을 하는 경우, 스테이킹 종료 30일 전부터 언스테이킹 안내 팝업창을 확인할 수 있으며, <mark style="color:blue;">**스테이킹 계약 종료일로부터 30일 동안 계약을 연장하거나 스테이킹한 자산을 출금할 수 있습니다.**</mark> <mark style="color:blue;">**30일간의 대기 기간 동안 언스테이킹 되지 않은 경우 직전 계약 기간(4/8/12개월) 중 가장 긴 기간을 기준으로 새로운 스테이킹 계약이 자동으로 진행되며, 자동 재계약된 스테이킹은 취소가 불가능합니다.**</mark>

• <mark style="color:blue;">**스테이킹이 실행될 경우, 스테이킹의 중도 취소, 스테이킹 자산의 중도 출금, 출금 지갑 변경 등이 불가능합니다. 따라서 아래 스테이킹 정책 및 계약의 종료에 관한 가이드를 주의 깊게 확인한 후 스테이킹 여부를 결정하시기 바랍니다.**</mark>

[**클레이스왑 스테이킹 정책 및 스테이킹 계약의 종료에 관한 가이드 보기(링크)**](https://docs-new.klayswap.com/product/stakeandvote/undefined)

&#x20;

### **4.6. 클레이스왑 거버넌스 투표 관련**

KSP 토큰을 스테이킹하여 투표권(vKSP)을 보유한 자는 클레이스왑 거버넌스 투표 정책에 따라 클레이스왑 거버넌스 투표에 참여할 수 있습니다. 클레이스왑 거버넌스 투표 정책은 아래 링크를 참조하시기 바랍니다.

[**클레이스왑 거버넌스 투표 정책 보기(링크)**](https://docs-new.klayswap.com/product/governance/detail)

&#x20;

## **5. 클레이스왑 V3 관련 추가 유의사항**

## **5.1. 집중화된 유동성**

클레이스왑 V3(Version 3)는 **집중화된 유동성(Concentrated Liquidity**) 기능을 제공합니다. 본 안내문에서는 집중화된 유동성이 적용된 유동성 풀을 ‘V3 풀’이라 하고 그 이전의 기능이 적용된 유동성 풀을 ‘V2 풀’이라 합니다.

V3 풀은 V2 풀에 비하여 사용자에게 집중화된 유동성 공급 및 공급구간의 지정에 대해 더 많은 자유와 선택권을 부여하며, 동작 원리상 V2 풀에 비해 더 많은 기대이익 및 더 높은 손실위험이 있을 수 있습니다.

V3 풀 예치의 위험으로, V2 풀 예치에 비하여 지정한 가격범위가 좁아질수록 더 높아지는, (i)비영구적 손실(IL; Impermanent Loss) 위험 (ii)예치 자산의 구성비율 및 가치 변화 위험(예치했던 두 자산의 비율이 출금 시 100:0으로 확정되는 것도 가능), (iii)토큰의 가격이 사용자가 지정한 가격범위를 이탈하는 경우 더 이상 예치 보상을 얻을 수 없는 위험, (iv)가격범위 이탈 시 가격범위 마이그레이션(V3 to V3 마이그레이션) 실행에 의한 손실 위험 등이 있을 수 있습니다. 보다 자세한 설명은 아래의 링크를 참고하여 주시기 바랍니다.

[**V3 풀 개념과 도입 배경 및 유의사항 보기**](https://docs.klayswap.com/v/kr/product/v3)\
[**V2 to V3 마이그레이션 가이드 보기**](https://docs.klayswap.com/v/kr/product/v3/v2-to-v3/v2-to-v3)\
[**V2 to V3 마이그레이션 정책 보기**](https://docs.klayswap.com/v/kr/product/v3/v2-to-v3/v2-to-v3-1)\
[**V3 풀 공급 가이드 보기**](https://docs-new.klayswap.com/product/v3-pool-concentrated-liquidity-pool/v3-pool/v3-pool)\
[**V3 풀 공급 정책 보기**](https://docs-new.klayswap.com/product/v3-pool-concentrated-liquidity-pool/v3-pool/v3-pool-1)\
[**V3 to V3 마이그레이션 가이드 보기**](https://docs-new.klayswap.com/product/v3-pool-concentrated-liquidity-pool/v3-to-v3/v3-to-v3)\
[**V3 to V3 마이그레이션 정책 보기**](https://docs-new.klayswap.com/product/v3-pool-concentrated-liquidity-pool/v3-to-v3/v3-to-v3-1)\
[**V3 풀 회수 가이드 보기**](https://docs-new.klayswap.com/product/v3-pool-concentrated-liquidity-pool/v3-pool-1/v3)\
[**V3 풀 회수 정책 보기**](https://docs-new.klayswap.com/product/v3-pool-concentrated-liquidity-pool/v3-pool-1/v3-pool)

V3 풀 예치는 구조적인 복잡도가 높고 자산손실 위험의 예측 난이도도 높은 기능(특히 좁은 가격범위의 예치의 경우 위험 상승)에 해당하므로, 가상자산 투자경험이 적은 사용자, 손실의 가능성을 감당하기 어려운 성격의 자금 사용자 등에게는 사용을 추천하지 않습니다.

사용자는 반드시 집중화된 유동성과 관련된 위험에 대해 신중히 평가, 고려한 후 자신의 책임과 판단 하에 유동성 풀에 유동성을 공급하고 관리하여야 합니다.

## **5.2 V2 to V3 마이그레이션**

사용자는 V2 to V3 마이그레이션 기능을 사용하여 V2 풀에 공급하였던 유동성을 V3 풀로 이동시킬 수 있습니다. 다만, V2 to V3 마이그레이션 실행 시 (i)V2 풀에서 출금이 일어나므로 당시 V2 풀의 비영구적 손실이 확정되는 손실, (ii)V3 풀에서 사용자가 선택한 가격범위 진입을 위해 자산 간 스왑이 발생함에 따른 거래수수료, 슬리피지 등의 손실 등의 부담이 발생할 수 있습니다. \
보다 자세한 설명은 아래의 링크를 참고하여 주시기 바랍니다.&#x20;

[**V2 to V3 마이그레이션 유의사항 보기**](https://docs-new.klayswap.com/product/v3-pool-concentrated-liquidity-pool/v2-to-v3/v2-to-v3-1)

## **6. 금지되는 행위**

사용자는 본 안내문의 유의사항을 준수하여야 하고, 아래의 행위를 하여서는 안 됩니다.

• 클레이스왑의 건전한 거래질서를 해치거나 교란하는 행위

• 에이전트(Agent), 스크립트(Script), 스파이더(Spider), 스파이웨어(Spyware), 툴바(Toolbar) 등의 자동화된 수단 또는 기타 부정한 방법을 통하여 클레이스왑(클레이스왑 인터페이스, 클레이스왑 프로토콜 등)의 운영에 장애를 초래하거나 부정적인 영향을 미치는 행위

• 클레이스왑 팀의 명예를 훼손하거나 업무를 방해하는 행위

• 클레이스왑을 사용하면서 정확하지 않거나 잘못된 정보 혹은 오해의 소지가 있는 정보를 제공하는 행위

• 정당한 원인 없이 클레이스왑 사용자들의 자산을 탈취하거나 사용자 지갑의 권한을 탈취하는 것에 관여하는 행위

• 클레이스왑을 이용함에 있어서 모든 형태의 범죄 활동(테러 활동, 조세 회피 등)과 직간접적으로 관련된 수익금을 활용하는 행위

• 클레이스왑 팀의 서포트 기능을 이용하는 커뮤니케이션 과정에서 본인이 아닌 다른 사람을 사칭하는 행위

• 기타 관련 법령에 위반되는 불법적인 행위

&#x20;

## **7. 보증 부인 및 책임의 제한**

• 클레이스왑은 사용자가 자신이 소유한 클레이튼 블록체인 지갑을 탈중앙화 프로토콜과 직접 통신하여 여러 가상자산의 교환 및 유동성 공급 기능을 이용할 수 있도록 돕는 웹사이트 형태의 인터페이스로서 사용자의 개인 자산이나 사용자가 자산을 예치하는 각 유동성 풀을 관리 또는 통제하거나 거래의 무결성 및 신뢰성을 보증하지 않습니다. <mark style="color:blue;">**사용자는 각 거래의 이점 및 토큰 가격, 교환비율의 변동 등에 의한 손실의 위험에 대해 신중히 평가, 고려한 후 자신의 책임과 판단 하에 거래를 진행하여야 합니다.**</mark>

• 클레이스왑에서 제공되는 예상 APR, 토큰의 현재 가격, APR 계산 예시 등을 비롯한 콘텐츠와 정보는 사용자의 유동성 공급, 제거, 스왑 등의 탈중앙형 거래나 클레이스왑 이용을를 돕기 위한 보조 자료이며, 투자 또는 거래의 권유 및 암시가 아닙니다. 클레이스왑은 가능한 한 적시의 정확한 정보를 제공하기 위해 합리적인 노력을 다하지만 <mark style="color:blue;">**해당 정보의 적시성, 적합성, 정확성을 보증하지 않습니다.**</mark>

• 클레이스왑은 사용자가 클레이스왑을 이용하여 기대하는 보상을 얻지 못하거나 거래에 내재한 위험으로 인해 자산 또는 재산의 손실을 입은 것에 대하여 책임을 지지 않습니다.

• 클레이스왑은 <mark style="color:blue;">**클레이스왑에서 사용되는 기능과 서비스의 지속성을 보장하지 않습니다**</mark><mark style="color:blue;">.</mark> 클레이스왑에서 제공되는 기능은 특정 시점에 추가되거나 영구적으로 삭제될 수 있으며 클레이스왑 서비스가 중단되거나 변경될 수 있습니다. (영구적인 기능 삭제나 서비스 중단의 경우 이로 인해 영향을 받는 사용자가 있는 경우에는 사전에 30일 이상의 합리적인 기간을 두고 사용자의 대처방법에 대해 공지 및 안내할 예정입니다.)

• 클레이스왑은 클레이스왑 프로토콜이 사용하는 클레이튼(Klaytn) 블록체인 플랫폼, 제3자가 제공하는 지갑 애플리케이션 등을 비롯한 <mark style="color:blue;">**제3자가 제공하는 서비스에 대해 책임을 지지 않습니다**</mark><mark style="color:blue;">.</mark>

• 클레이스왑은 제 3자가 설정한 토큰의 컨트랙트 실행 기술에 대해 책임과 권한을 보유하고 있지 않습니다. 토큰 컨트랙트의 실행 중지, 변경 등은 해당 권한을 가진 지갑(Deployer)을 소유한 토큰 발행 개인 또는 재단 의해 변경될 수 있으며, 이러한 변경으로 인해 클레이스왑 내의 유동성 풀(LP)의 추가/회수 기능에 영향 및 제한을 받을 수 있습니다. 이와 같이 특정 토큰 컨트랙트 권한자의 실행 영향으로 인해 자산 출금이 불가능한 원인은 클레이스왑이 제공하는 기능(자율적으로 생성된 풀에서의 자산 입출금)상의 문제와는 무관합니다. 클레이스왑은 이용자의 개인 암호키에 대한 독립적인 통제권을 보유하고 있지 않을 뿐 아니라, 유동성 풀에 보관된 자산에 임의로 접근하거나 통제, 관여하여 이를 특정 주소로 전송하는 등의 기술적 지원이 불가능한 구조로, 문제가 되는 유동성 풀 페어와 관련된 토큰 컨트랙트권한자 지갑의 조치가 필요합니다.

• 클레이스왑의 개발자, 운영자 및 거버넌스 참여자는 법령이 허용하는 한도 내에서 관련 프로토콜, 코드, 서비스 등에 대해 <mark style="color:blue;">**어떠한 직간접적인 약정, 보증을 하지 아니합니다**</mark><mark style="color:blue;">.</mark>

• 클레이스왑에서 사용하는 스마트 컨트랙트 코드를 비롯해 모든 소프트웨어에는 본질적인 복잡성과 한계로 인해 업계 통상 수준의 기술과 노력으로도 발견되지 못한 결함이 존재할 수 있으며, 이러한 결함을 악용한 해킹, 플래시론 공격 등을 통한 자산 탈취로 인한 원금 손실의 위험이 존재합니다.

• 클레이스왑은 최신 블록 동기화를 유지할 수 있도록 최선의 노력을 하고 있으나, 천재지변, 서버점검 또는 클레이튼 체인 상의 트랜잭션 혼잡도 상승, 컴퓨터 시스템 오류, 소프트웨어 공격 등의 상황으로 <mark style="color:blue;">**클레이스왑의 기능제공은 예고 없이 중단/종료**</mark>될 수 있으며, <mark style="color:blue;">**24시간 클레이스왑 기능의 제공이 보장되지 않습니다.**</mark>

• 위와 같은 문제 상황에서는 <mark style="color:blue;">**웹사이트 상의 표시된 수치 상의 오류, 일시적인 서비스 연결 불가, 접속오류 및 중지가 발생할 수 있습니다**</mark><mark style="color:blue;">.</mark> 이때 사용자가 요청한 유동성 공급, 회수, 스왑 등 트랜잭션이 처리 과정에서 지연 및 요청 실패가 발생할 수 있습니다.

• 클레이스왑은 클레이스왑과 관련하여 관련 법률이 허용하는 한도 내에서 위에 예시된 것을 포함해 명시적으로 또는 묵시적으로 어떠한 보증, 보장 또는 조건도 제공하지 않습니다. 사용자는 클레이스왑 사용에 대한 모든 책임을 지고 클레이스왑이 “있는 그대로(as-is)”, “이용 가능한 대로(as-available)” 제공되는 것을 이해하고 클레이스왑을 사용해야 합니다. 사용자는 컴퓨터, 소프트웨어, 통신, 블록체인 시스템이 완전무결할 수 없음을 이해하고 인정합니다.

**•&#x20;**<mark style="color:blue;">**클레이스왑의 책임영역 내에 있으면서 동시에 클레이스왑의 고의 또는 중과실이 있는 경우가 아닌 한 클레이스왑은 이에 대해 책임을 지지 아니하며, 배상책임을 지는 경우에도 그 발생원인을 불문하고 그리고 어떠한 책임이론에 근거한 것이든 상관없이 귀하가 입게 되는 직접, 간접, 부수적, 특별, 결과적 또는 징벌적 손해\[여기에는 모든 이익의 상실(직접적으로 발생하든지 또는 간접적으로 발생하든지 불문함), 신용 또는 사업적 평판의 상실, 데이터 손실로 인한 피해, 대체 제품 또는 서비스를 얻기 위한 비용 또는 기타 무형의 손해 등도 포함]에 대해서는 배상하지 아니합니다. 그 어떤 경우에도 클레이스왑이 사용자에게 지는 배상책임의 한도는 사용자가 클레이스왑의 사용 대가로 클레이스왑에 지불한 금액과 미화 100.00 달러 중 더 큰 금액을 한도로 합니다. 본 항에 따른 책임 제한은 관련 법령상 허용되는 한도 내에서 효력을 갖습니다.**</mark>

&#x20;

## **8. 권리보호 및 사법기관 협조**

다음과 같은 경우 사용자의 클레이스왑 웹사이트 접속정보(지갑주소, 접속정보 등)가 적법한 규제당국 또는 사법기관에 제공되는 등 합리적으로 필요하다고 여겨지는 조치가 취해질 수 있습니다.

• 해킹, 자금세탁 또는 기타 범죄행위에 연루된 자산으로 볼 수 있는 합리적인 근거가 있는 경우

• 법령에 근거한 규제기관 또는 사법기관의 요청이 있는 경우

&#x20;

## **9. 분쟁해결**

본 유의사항 또는 사용자의 클레이스왑의 접속 또는 사용과 관련하여 또는 이로부터 발생하는 모든 분쟁은 탈중앙 원리에 따라 합의로 해결하고자 최선을 다하되 이로써 해결되지 않는 경우에는 사용자가 대한민국 거주자인 경우 서울에서 서울중앙지방법원을 제1심 법원으로 하여 해결합니다.

&#x20;

## **10. 안전성 및 보안**

클레이스왑은 전문적인 보안 감사 업무를 수행하는 업체를 통해 전문 보안 감사를 완료하였으며 보안 취약점을 제거하고 예방하기 위한 합리적인 노력을 다하고 있습니다.

[**스마트 계약 보안 감사 리포트 확인하기 (링크)**](https://github.com/KlaySwap/klayswap/blob/master/audit/Smart_Contract_Audit_Report_KlaySwap_ver_2.0.pdf)

## **12. 사용자 공지**&#x20;

&#x20;클레이스왑은 공개 커뮤니케이션 수단(클레이스왑 웹사이트에 게시된 SNS 채널주소 등)을 사용하는 것을 포함하여 상업적으로 합리적인 수단을 사용하여 사용자에게 공지 및 통지를 할 수 있습니다. 클레이스왑이 공개 커뮤니케이션 수단을 사용하여 제공하는 공지 및 통지는 게시된 시점에 즉시 효력이 발생합니다.

이 서비스 유의사항 개정본은 2024년 6월 4일부터 유효합니다.

&#x20;

서비스 유의사항 변경 및 게시이력

**(2021년 6월 18일) : 최초 제정**

**(2021년 12월 27일) : 1차 개정(**&#xB2E8;일, 일반 페어, 플러스 페어 유동성 공급 관련 내용 추가)

**(2022년 10월 25일) : 2차 개정(**&#xD3EC;지션 예치 관련 내용 추가)

**(2023년 6월 14일) : 3차 개정**(집중화 페어 예치 관련 내용 추가)

**(2024년 6월 3일): 4차 개정**(클레이스왑 새버전 관련 내용 추가)\
\
**(2025년 1월 14일): 5차 개정**(클레이스왑 Borrow 관련 내용 추가)

###


# 개인정보처리방침

본 개인정보처리방침은 klayswap.com 웹사이트(이하 “서비스”)에서 서비스의 사용자 정보를 처리하는 내용을 다룹니다.

&#x20;

### ■ 개인정보의 처리목적, 수집항목, 보유 및 이용기간, 제3자 제공

서비스는 사용자의 개인정보를 수집, 이용하거나 제3자에게 제공하지 않습니다.

\* 서비스는 사용자 개인을 식별할 수 있는 정보, 또는 사용자가 소유하고 있는 지갑에 접근하기 위하여 필요한 개인키, 니모닉키, 시드구문 등의 정보, 혹은 이에 준하는 정보를 요구하거나 보관하거나 처리하지 않습니다. 따라서 사용자가 스스로 이를 안전하게 관리하여야 하며, 서비스는 사용자가 이러한 주의 의무를 다하지 못하여 손해가 발생한 경우 책임을 지지 않습니다.

&#x20;

### ■ 개인정보 자동수집장치의 설치, 운영 및 거부에 관한 사항

1\. 서비스는 사용자에게 개별적인 맞춤 서비스를 제공하기 위해 사용 정보를 저장하고 수시로 불러오는 ‘쿠키(cookie)’를 사용할 수 있습니다.

2\. 쿠키는 웹사이트를 운영하는데 이용되는 서버(http)가 사용자의 컴퓨터 브라우저에게 보내는 소량의 정보이며 사용자들의 PC 컴퓨터 내의 하드디스크에 저장되기도 합니다.

1\)      쿠키의 사용목적: 사용자가 방문한 각 서비스와 웹 사이트들에 대한 방문 및 이용형태, 인기 검색어, 보안접속 여부, 등을 파악하여 사용자에게 최적화된 정보 제공을 위해 사용됩니다.

2\)      쿠키의 설치·운영 및 거부 : 웹브라우저의 기본기능을 이용해 쿠키 저장을 활성화 또는 비활성화할 수 있습니다. 브라우저별 자세한 쿠키 설정 방법은 각 브라우저의 설명을 참고하시기 바랍니다.

3\)      쿠키저장을 거부할 경우 맞춤형 서비스 이용에 어려움이 발생할 수 있습니다

&#x20;

### ■  행태정보의 수집, 이용 및 거부 등에 관한 사항

서비스는 서비스의 품질개선, 통계작성 및 연구 등의 목적으로 다음과 같은 외부 분석툴을 이용한 행태정보 분석서비스를 사용하고 있으며, 이러한 분석에서 제외되고 싶으신 경우 각 항목에 안내된 바에 따라 설정을 해제하실 수 있습니다.

1\)      Google LLC, (<googlekrsupport@google.com>) (미국)

\- 수집방법: 웹 사이트 내에 방문자 서비스 이용시점에 네트워크를 통한 전송

\- 수집항목: 쿠키, 기기 브라우저 관련 데이터, 기기 정보, 사이트 활동정보

\- 설정해제방법 : <https://tools.google.com/dlpage/gaoptout>

&#x20;

### ■   연락방법

본 개인정보처리방침에 대해 문의가 있으신 경우 **<privacy@ozys.io>** 로 연락주시기 바랍니다. 고객의 메시지는 회사의 개인정보처리방침 담당자에게 전달됩니다.

&#x20;

### ■  개인정보처리방침 개정

서비스는 본 개인정보처리방침을 수시로 개정하여 게시할 수 있고 게시와 동시에 개정된 방침이적용되며, 만약 개인정보처리방침이 사용자에게 중대하게 불이익하게 변경되는 경우에는 적용일 전 30일 이상의 기간을 두고 게시합니다.

&#x20;

### ■   개정이력

### 1. (1차 제정) 2023. 01. 11

&#x20;

&#x20;


# 보안 감사

## 오딧 히스토리

| 오딧 일자      | 오딧 기관              | 오딧 내용                      |
| ---------- | ------------------ | -------------------------- |
| 2020-11-25 | Certik             | 전체 Contract                |
| 2021-03-24 | Haechi             | vKSP, LP Airdrop           |
| 2021-08-20 | Haechi             | Buyback, MiningRate Logic  |
| 2021-10-07 | Theori             | 전체 Contract                |
| 2021-12-25 | Theori             | Single/PlusPool/Governance |
| 2024-05-03 | 78ResearchLab      | 전체 Contract                |
| 2024-07-17 | ChainLight\@Theori | 전체 Contract                |

## 오딧 결과확인

[https://github.com/KlaySwap/klayswap ](<https://github.com/KlaySwap/klayswap >)


# KSP

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/VWgzlOkJG4baAmdxqme5/image.png)

* **Ticker** : KSP
* **Contract address** : [https://scope.klaytn.com/token/0xc6a2ad8cc6e4a7e08fc37cc5954be07d499e7654](https://scope.klaytn.com/token/0xc6a2ad8cc6e4a7e08fc37cc5954be07d499e7654?tabId=tokenTransfer)​
* **Chain** : Klaytn (Cypress)

​‌

KSP는 클레이스왑 프로토콜 생태계를 유지하는 핵심 토큰으로, 인플레이션을 통해 유통되는 KSP 보상은 유동성 풀 참여자(단일 유동성 풀, V2 풀, V3 풀), 스테이킹 참여자에게 분배됩니다.‌

### Use cases <a href="#use-cases" id="use-cases"></a>

‌

KSP는 유동성 풀 참여자, 스테이킹 참여자 등 생태계 기여를 통해 분배 받거나, [거래](https://klayswap.com/exchange/swap)를 통해 획득할 수 있으며 다음과 같이 활용할 수 있습니다.‌

* KSP를 유동성 풀(단일 유동성 풀, V2 풀, V3 풀)에 활용하여 인플레이션 보상을 분배 받을 수 있습니다.
* KSP  스테이킹에 참여하여 KSP 인플레이션 보상을 분배 받을 수 있습니다.
* 프로토콜의 의제와 관련된 거버넌스 투표에 활용할 수 있습니다.&#x20;

‌

## Details <a href="#detail" id="detail"></a>

{% content-ref url="/pages/-MiZSs2suYjzh\_7t0VEV" %}
[KSP Tokenomics](/tokenomics/ksp/ksp-tokenomics)
{% endcontent-ref %}

{% content-ref url="/pages/-MiZSyOMOc4gxKb\_WPTO" %}
[KSP Allocation](/tokenomics/ksp/ksp-allocation)
{% endcontent-ref %}


# KSP Tokenomics

KSP는 생태계 참여자에게 주어지는 보상으로, 클레이스왑 프로토콜에 더 많은 유동성을 확보하기 위한 강력한 인센티브 역할을 합니다. 한정된 KSP 자원의 효율적 분배 및 가치 극대화가 가능하도록 동작하는 토큰 이코노미 구조를 통해 유의미한 유동성 기반의 거래와 더 많은 금융 기회 제공합니다.‌

### ​ <a href="#undefined" id="undefined"></a>

### KSP 마이닝 수량 <a href="#ksp-1" id="ksp-1"></a>

‌

KSP의 1일 총 마이닝 수량은 **43,200 KSP**로, 2년 간격으로 반감기가 적용됩니다.&#x20;

| ​항목              | 반감기 이전                      | 반감기 이후         |
| ---------------- | --------------------------- | -------------- |
| **블록 당 분배 수량**   | **1 KSP**                   | **0.5 KSP**    |
| **개발 커미션 (15%)** | **0.15 KSP**                | **0 KSP**      |
| **1일 총 마이닝 수량**  | **86,400 KSP**              | **43,200 KSP** |
| ​                | \*\*\* 커미션 제외 시: 73,440 KSP | 해당 없음          |

​상세 마이닝 계획은 아래  KSP Allocation 문서를 참고해주시기 바랍니다.‌

{% content-ref url="/pages/-MiZSyOMOc4gxKb\_WPTO" %}
[KSP Allocation](/tokenomics/ksp/ksp-allocation)
{% endcontent-ref %}

### **KSP 인플레이션 분배 비율** <a href="#ksp-2" id="ksp-2"></a>

‌‌

KSP 인플레이션은 클레이스왑 생태계의 핵심 기여자인 **유동성 풀 참여자(단일 유동성 풀, V2 풀, V3 풀)와 스테이킹 참여자**에게 분배합니다. 아래 링크에서 KSP 인플레이션 분배 비율을 확인할 수 있으며, 분배 비율은 거버넌스 투표를 통해 조정될 수 있습니다.‌<br>

> [**KSP 인플레이션 분배 비율 확인하기**](https://new.klayswap.com/ko/staking?request=status)

<figure><img src="https://199555881-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FRM76CLSvWgT5g122HIcr%2Fuploads%2FqXZIemOL61wN7sHvPNZ7%2Fimage.png?alt=media&amp;token=0fea17c3-95be-437d-b836-e931ba436554" alt=""><figcaption></figcaption></figure>

**​**

## KSP 디플레이션을 통한 가치 극대화 <a href="#ksp" id="ksp"></a>

‌

클레이스왑 프로토콜은 디플레이션 모델을 통해 KSP 유통량을 조절하여 KSP의 가치를 극대화 할 수 있는 탄력적인 토큰 이코노미 구조를 갖추고 있습니다. 이를 통해 유동성 풀 참여자와 스테이킹 참여자가 공급하는 유동성에 대해 높은 보상 APR을 제시할 수 있을 뿐 아니라, 더 많은 유저의 참여가 활성화 될수록 KSP의 희소 가치가 점진적으로 높아지는, 더욱 견고하고 지속 가능한 생태계를 구축합니다.‌

### 반감기를 통한 유통량 감소 효과 <a href="#undefined-1" id="undefined-1"></a>

‌인플레이션을 통한 KSP 유통을 매 2년 주기의 반감기를 통해 블록 당 분배 되는 수량을 감소 시켜 인플레이션을 둔화합니다.‌ 상세 인플레이션 계획은 KSP Allocation 문서를 확인해주시기 바랍니다.&#x20;

{% content-ref url="/pages/-MiZSyOMOc4gxKb\_WPTO" %}
[KSP Allocation](/tokenomics/ksp/ksp-allocation)
{% endcontent-ref %}

### 바이백 & 소각을 통한 유통량 감소 효과‌ <a href="#and" id="and"></a>

* **바이백 펀드를 활용한 KSP 소각** : 모든 풀 에서 발생한 거래 수수료의 50%를 KSP 바이백 펀드로 조성하여 KSP 소각에 사용합니다.<br>


# KSP 분배율 자동화

KLAYswap 거버넌스는 **KSP 바이백 수량을 반영한 KSP 분배율 자동화 시스템**을 통해 각 풀의 기여도를 평가하여 KSP를 분배합니다.

**KSP 바이백 수량**

* KLAYswap과 KSP에 기여하는 바 가장 명확한 지표는 **거래량**이며, KSP 바이백 수량은 이를 객관적이고 지속적으로 측정할 수 있는 지표입니다.
* 스마트 컨트랙트가 각 페어에서 발생한 거래 수수료를 활용해 한 시간마다 자동으로 KSP를 바이백하며, 일별로 누적된 페어별 KSP 바이백 수량을 매일 1회 소각해 데일리 지표로 집계합니다.
* 단기/장기 지표를 모두 반영하기 위해 1일(50%), 7일(50%) KSP 바이백 수량을 모두 반영합니다.

{% content-ref url="/pages/nnD8Oqj8AsdOgPc2TxTd" %}
[KSP 분배율 반영 정책](/tokenomics/ksp/kspminingrate/detail)
{% endcontent-ref %}


# KSP 분배율 반영 정책

### KSP 바이백 수량의 집계

* 스마트 컨트랙트가 각 유동성풀에서 발생한 프로토콜 이용에 따른 풀 수수료를 활용해 한 시간마다 자동으로 KSP를 바이백 합니다.
* 24시간동안(매일 오전 9시\~다음날 오전9시) 누적된 유동성풀 별 KSP 바이백 수량을 1일 KSP 바이백 수량으로 확정하며, 매일 1회 소각합니다.
* KSP 바이백 수량은 1일(50%), 7일(50%) 수량을 합산하여 집계합니다.
* 유동성풀 생성 기간이 짧아 7일 KSP 바이백 수량 집계 기준을 충족하지 못하는 경우, 유동성풀 생성 이후부터 현재까지 집계된 KSP 바이백 수량을 기준으로합니다.
* 생성된 지 3일차인 유동성풀의 일자별 KSP 바이백 수량이 다음과 같을 때 1일, 7일 KSP 바이백 수량 지표의 집계는 다음과 같습니다. \
  \
  **- 일자별 바이백 수량** \
  1일차 : 10KSP / 2일차 : 10KSP / 3일차 : 20KSP \
  \
  **- 페어의 1일/7일/30일 KSP 바이백 수량 지표**\
  1일 : 10KSP / 7일 : 40KSP (10+10+20)&#x20;


# KSP Allocation

아래 표는 6년간 KSP를 분배를 표시하는 차트입니다. 일일 채굴량은 63,072,000블록(2년)마다 절반으로 줄어듭니다.

| Year | Daily Mining Volume | Yearly Volume | Total Volume | Notes            |
| ---- | ------------------- | ------------- | ------------ | ---------------- |
| 1    | 86,400 KSP          | 31,536,000    | 31,536,000   | \*15% commission |
| 2    | 86,400 KSP          | 31,536,000    | 63,072,000   | \*15% commission |
| 3    | 43,200 KSP          | 15,768,000    | 78,840,000   | Halved           |
| 4    | 43,200 KSP          | 15,768,000    | 94,608,000   |                  |
| 5    | 21,600 KSP          | 7,884,000     | 102,492,000  | Halved           |
| 6    | 21,600 KSP          | 7,884,000     | 110,376,000  |                  |

1. **총 발행량 : 126,144,000 KSP**
2. **시작 물량 \* : 0 KSP**
3. **KSP 일 채굴량\*\*: 86,400개 (63,072,000 블록 (약 2년) 동안 블록 당 1개 씩 채굴)**
4. **반감기\*\*\*: 유동성 채굴 프로그램 (Liqudity Mining Program) 시작 후 매 63,072,000 블록 마다 일일 채굴량이 절반으로 줄어듭니다.**&#x20;
5. **개발 및 안정화 커미션 \*\*\*\* : 채굴량 중 15% (첫 2년 간 지속 후 채굴량에 대한 커미션은 사라짐, 총발행량 기준 7.5%)**

\* 초기 KSP 공급을 0으로 설정하면 초기 사용자가 자유롭게 성장하고 체계적인 결정을 내릴 수 있는 동등한 기회를 갖게 됩니다. 처음부터 KSP는 각 Genesis 블록에서 유동성 채굴을 통해서만 분배되며, 보상으로 KLAYswap 유동성 공급자에게 분배됩니다.&#x20;

\*\* unfreezeBlock 48681371 까지 채굴되는 KSP는 거버넌스의 안정화와 토큰 이코노미의 성공적 안착을 위해 전량 Lock-up(초기 유통량 : 86,400 \* 61 = 5,270,400 KSP)됩니다. 48681371 Block 까지 예상 기간은 61일 입니다.

\*\* 2020년 11월 11일 (block 43407094 부터 unfreezeBlock 48681371까지의 채굴 물량에 대한 일괄 락업 해제 : Block 48681371.

\*\*\* 이 반감기 모델은 비트코인의 철학에서 영감을 받아 만들어졌습니다. 출시 후 첫 2년 동안 총 공급량의 50%가 발행된다는 점에 유의하십시오.&#x20;

\*\*\*\* 커미션은 초기 프로토콜 구축과 거버넌스 세팅 등 KLAYswap의 전반적인 거래환경을 구축한 개발사에 배정됩니다.&#x20;


# Swap

<figure><img src="https://199555881-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FRM76CLSvWgT5g122HIcr%2Fuploads%2FY1IJgArsNOxiUV4b5ccw%2Fimage.png?alt=media&amp;token=eebbf1ef-00e2-4af3-af90-1243e19fc178" alt=""><figcaption></figcaption></figure>

**토큰 스왑**은 풀에 공급된 토큰 쌍의 비율에 따라 클레이튼 체인 상에서 유통되는 다양한  KIP7 토큰을 교환할 수 있는 가장 간단한 방법입니다.&#x20;

클레이스왑의 풀을 통해 토큰을 교환(거래) 하는 경우,  **각 풀 별 수수료 정책**에 따라 수수료가 발생하며, 프로토콜 이용에 따른 풀 수수료는 다음과 같이 분배 됩니다.&#x20;

**V2, V3  풀 거래 수수료 분배**&#x20;

| 구분                    | 수수료 분배 비율 |
| --------------------- | :-------: |
| **유동성 공급자(LP)**       |    80%    |
| **KSP 바이백&소각**        |    10%    |
| 스테이킹 참여자(**vKSP 홀더)** |    10%    |

&#x20;

* 모든 풀에서 발생한 수수료의 80%는 유동성 공급자에게 각 LP 지분율에 따라  분배됩니다.
* 모든 풀에서 발생한 수수료의 10%는 KSP 바이백 & 소각을 위한 재원으로 활용됩니다.&#x20;
* 모든 풀에서 발생한 수수료의 10%는 KSP 스테이킹 참여자에게 각 vKSP 지분율에 따라 분배됩니다.


# Supply & Borrow

**Supply & Borrow는 유동성 풀에 토큰을 공급하여 보상을 획득하거나, 공급한 토큰을 기반으로 다른 토큰을 활용**할 수 있는 서비스입니다. 사용자는 이를 통해 자산을 스왑하지 않고 유동성을 보유하면서도, 동시에 원하는 자산을 활용하여 거래 할 수 있습니다.**.**

<figure><img src="https://199555881-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FRM76CLSvWgT5g122HIcr%2Fuploads%2FonAZrU0cn0mh6Eq7VXBy%2Fimage.png?alt=media&amp;token=3f3ce6f9-557e-4ad7-8bbd-a9da26d46942" alt=""><figcaption></figcaption></figure>

## **Supply: 유동성 공급**

**Supply 서비스는 하나의 자산만 공급하고도 그에 대한 보상을 얻을 수 있는 서비스입니다**. \
공급자가 제공한 유동성은 다른 사용자들이 활용할 수있으며, 이들이 지불하는 활용 비용(활용 APY) 중 일부는 스마트 컨트랙트에 의해 공급자에게 공급 보상으로 분배됩니다. 보상은 공급한 토큰과 동일한 토큰으로 분배 받으며, 풀에 자동으로 재공급되어 담보로 인정받습니다.

공급자는 유동성 풀에 참여한 대가로 공급 보상뿐 아니라 추가로 KSP 보상을 획득할 수 있습니다. 예를 들어 KAIA를 공급한 유저라면, 실시간 공급 APY에 따라, KAIA(공급 보상)와 KSP(추가 보상)를 획득할 수 있습니다. KAIA는 풀에 자동으로 재공급되어 담보로 인정되나, KSP 추가 보상은 재공급되지 않고 사용자가 직접 클레임 할 수 있으며 담보로는 인정되지 않습니다.

<br>

## **Remove: 유동성 회수**

사용자는 풀에 공급중인 자산을 언제든지 회수할 수 있습니다. 풀 활용도에 따라 자산 회수가 일시적으로 지연될 수 있으나, 보상율 모델에 따라 자연스러운 반환을 유도하여 회수가 불가능한 경우 없이 공급한 자산 전체를  회수할 수 있습니다.

만약 사용자가 자산을 활용중인 경우, 활용 포지션을 유지하기 위해 최소 담보 비율을 충족해야하므로, 회수 가능한 금액에 제한이 있을 수 있습니다. 활용 자산 규모 대비 담보 비율이 낮아지면, 안전 지수가 낮아져 자동 반환의 위험이 커질 수 있으므로, 자산을 회수하기 전과 후에 담보 비율이 충분히 유지되고 있는지 반드시 확인해야 합니다.

<br>

## **Borrow: 유동성 활용**

<figure><img src="https://199555881-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FRM76CLSvWgT5g122HIcr%2Fuploads%2F3GArr6Kuw30gfYclOQjS%2Fimage.png?alt=media&amp;token=48d1e995-f66f-4b99-a766-35b3a11737df" alt=""><figcaption></figcaption></figure>

**Borrow 서비스를 통해 사용자는 유동성 활용 기능을 통해 공급한 자산을 담보로 원하는 자산을 활용할 수 있습니다**. 활용 가능한 최대 규모는 자산 별 최대 담보 인정 비율에 기반한 총 담보 자산 규모에 따라 다르게 계산됩니다. 자산을 활용할 때 담보 인정 비율을 고려하는 이유는, 담보 자산의 가치가 활용 자산의 가치보다 크도록 하여 급격한 시장 변동 시 자동 반환을 방지하기 위함입니다. 사용자는 자산을 활용한 대가로 비용(활용 APY)을 유동성 풀에 지불하며, 누적된  비용의 80%는 스마트 컨트랙트를 통해 공급자에게 공급 보상으로 분배됩니다.

<br>

## **Restore: 유동성 반환**

활용한 토큰을 반환하는 것은 활용 포지션을 관리하는데 있어 중요합니다. 활용자는 활용한 토큰과 동일한 토큰으로 반환하거나, 공급 증표인 aToken으로 반환할 수 있습니다. aToken은 유동성 풀에서 사용자의 지분율을 나타내며, 해당 aToken에 대해 실시간으로 공급 보상이 발생합니다. 사용자는 aToken 반환 시 그 가치에 상응하는 원본 자산을 공급된 풀에서 받을 수 있습니다.&#x20;

유동성을 반환하여 활용 자산 대비 담보 비율을 높이면, 자동 반환의 위험을 줄일 수 있고, 활용자는 담보의 일부를 회수할 수 있습니다.

\
\
\ <br>


# 자동 반환

## **안전 지수(Health Factor)**

안전 지수는 활용 포지션의 안정성을 측정하는 지표로, 사용자의 담보 자산과 활용 자산의 가치를 비교해 1 미만의 안전 지수는 자동 반환이 발생합니다.&#x20;

&#x20;안전 지수는 다음과 같이 계산됩니다.

***＊안전 지수 = (총 담보 자산 가치 \* 가중 평균 자동 반환 임계점) / 총 활용 자산 가치***

안전 지수는 활용자가 공급한 담보 자산의 총 가치가 활용한 자산의 가치에 비해 얼마나 안전한지를 수치화한 값으로, 담보 가치에 직접적인 영향을 받습니다. 담보 가치가 상승하면 안전 지수가 상승하고, 하락하면 안전 지수가 감소하여 자동 반환 위험이 증가합니다. 안전 지수가 1보다 작아지면 자동 반환이 발생할 수 있습니다.

**사례**

사용자가 $10,000 상당의 ETH(자동 반환 임계점 70%)와 $5,000 상당의 WBTC(자동 반환 임계점 85%)를 담보로 공급하고,&#x20;

$4,000 상당의 USDT를 활용 중일 때, 사용자의 안전 지수는 다음과 같습니다.

안전 지수 = ($10,000\*70% + $5,000\*85%) / $4,000 = 2.81 입니다.

\ <br>

## **자동 반환 임계점(Auto-return Threshold)**

자동 반환 임계점은 담보 가치가 활용 자산 가치를 충당하기 부족하여, 활용 자산이 자동 반환되는 시점입니다. 자동 반환 임계점은 자산마다 다른 값으로 설정되며, 포지션을 유지하기 위해 필요한 담보 가치를 결정합니다.<br>

담보 가치 대비 활용 자산 가치의 비율(LTV)이 자동 반환 임계점에 도달하면 자동 반환이 발생합니다. 예를 들어 자동 반환 임계점이 90%라면, 담보 가치 대비 활용 자산 가치의 비율이 90%에 도달 시 자동 반환이 발생합니다.

**사례**

사용자가 $10,000 상당의 ETH(자동 반환 임계점 90%)를 담보로 공급하고, $8,500 상당의 USDT를 활용한다고 가정해봅시다.

&#x20; ＊안전 지수는 $10,000\*90%/$8,500=1.06 입니다.

&#x20; ＊담보 가치 대비 활용 자산 가치의 비율(LTV)은 $8,500/$10,000\*100=85% 입니다.

안전 지수가 1보다 크고 해당 포지션은 자동 반환 임계점(90%)에 도달하지 않아, 자동 반환이 발생하지 않습니다.

\ <br>

## **자동 반환(Auto-return)**

### **자동 반환의 절차**

자동 반환은 담보 가치가 활용 자산 가치를 충당하기 부족하여 활용자의 안전 지수가 1 미만으로 떨어지면 발생합니다. 자동 반환이 발생하면, 스마트 컨트랙트는 사용자의 담보의 일부 또는 전부를 매각하고 활용 자산을 반환합니다. 이 과정에서 자동 반환 수수료가 발생하며, 반환 대상 자산과 수수료를 포함한 비용이 사용자의 담보에서 차감됩니다.

자동 반환 후 공급 포지션을 수식으로 나타내면 다음과 같습니다.

***＊자동 반환 후 공급 포지션  = 총 담보 자산 - (반환 대상 자산 \* (1 + 자동 반환 수수료율))***

### **자동 반환을 통한 포지션 관리**

자동 반환은 이러한 메커니즘을 통해 사용자의 포지션을 안전 지수 1 이상으로 개선하는 기능을 수행합니다. 안전 지수가 극단적으로 낮아지는 경우에는 사용자의 공급 포지션과 활용 포지션이 모두 종료될 수 있습니다.&#x20;

<br>

### **자동 반환 방지 가이드**

담보와 활용 자산의 가치 변화에 따라 안전 지수가 변동하므로, 자동 반환을 방지하기 위해서는 안전 지수가 1미만이 되지 않도록  지속적으로 관리해야합니다. 특히, 공급한 자산의 가치가 하락하거나 활용한 자산의 가치가 상승하는 경우, 자동 반환 임계값을 초과하고 안전 지수가 1 미만이 되어 자동 반환이 발생합니다.

자동 반환을 방지하기 위해서는 1) 유동성을 추가로 공급하여 담보 자산의 규모를 확대하거나, 2) 활용하고 있는 자산 중 일부를 반환하여, 안전 지수를 낮추어야 합니다.

<br>

### **자동 반환 사례**

사용자가 담보로 ETH를 공급하고, 이를 기반으로 USDT를 활용한다고 가정해봅시다.

환경은 다음과 같습니다.

&#x20; ＊3 ETH = $10,000

&#x20; ＊ETH의 자동 반환 임계점 = 90%

&#x20; ＊ETH의 MAX LTV = 85%

&#x20; ＊USDT의 자동 반환 수수료 = 5%

<br>

사용자는 3 ETH($10,000)를 공급하고, USDT를 최대 $8,500만큼 활용할 수 있습니다.

이때 $8,500을 활용하면

&#x20; ＊사용자의 안전 지수는 $10,000\*90%/$8,500=1.06이고,

&#x20;  ＊담보 가치 대비 활용 자산 가치의 비율(LTV)은 85%입니다.

안전 지수가 1보다 크고 해당 포지션은 자동 반환 임계점(90%)에 도달하지 않아, 자동 반환이 발생하지 않으나, 자동 반환 임계점이 90%를 초과하면 자동 반환이 발생할 수 있습니다.

<br>

만약 ETH의 가격이 떨어져, 담보의 총 가치가 $9,000으로 하락하면,

&#x20; ＊안전지수는 $9,000\*90%/$8,500=0.95로 1미만으로 감소하고,

&#x20; ＊담보 가치 대비 활용 자산 가치의 비율이 $8,500/$9,000＊100= 94.44%가 되어,

자동 반환 임계점 90%를 초과해 자동 반환이 발생합니다.

<br>

자동 반환 발생 시 사용자의 활용 포지션의 일부($4250)가 자동 반환되며, 반환 후 포지션은 다음과 변동합니다.

&#x20; ＊공급 포지션 = $10,000 - ($4,250\*1.05) = $5,537.5

&#x20; ＊활용 포지션 = $8,500/2 = $4,250

&#x20; ＊안전 지수 = $5,537.5＊90%/$4,250 = 1.17

&#x20; ＊담보 가치 대비 활용 자산 가치의 비율 = 76.74%

안전 지수가 1이상이고, 담보 가치 대비 활용 자산 가치의 비율(LTV)이 자동 반환 임계점 90% 미만으로, 사용자의 남은 활용 포지션은 자동 반환 대상이 아닙니다.

<br>


# 파라미터

파라미터 값의 변화는 사용자의  안전 지수 변동과 자동 반환의 위험에 영향을 미칠 수 있습니다. 자산별 파라미터는 아래 \[자산별 파라미터]를 참고 부탁드립니다.

## Max LTV

담보 가치 대비 활용할 수 있는 최대 금액의 비율로, 담보를 활용하여 활용할 수 있는 금액의 상한선을 의미합니다.

예를 들어 USDT의 최대 담보 인정 비율이 80%이고 100 USDT를 공급한 경우, 담보 가치($100)기준으로 최대 $80 규모로 자산을 활용할 수 있습니다. LTV가 0%인 자산은 담보로 사용할 수 없습니다. LTV는 담보 자산의 종류에 따라 다르게 설정됩니다.

## **자동 반환 임계점**

활용 포지션의 자동 반환 발생 기준이 되는 지점입니다. 담보 가치 대비 활용 자산 가치의 비율(LTV)이 자동 반환 임계점을 초과하면, 스마트 컨트랙트는 사용자의 담보의 일부 또는 전부를 매각하고 활용 자산을 반환합니다.&#x20;

예를 들어 자동 반환 임계점이 90%라면, 담보 가치 대비 활용 자산 가치의 비율(LTV)이 90%에 도달하면, 자동 반환이 발생합니다.

## **대기금**

Borrow & Supply 풀은 프로토콜 이용에 따라 발생하는 수수료를 대기금으로 적립합니다. 프로토콜은 활용 자산이 정상적으로 반환되지 않는 예외 상황에 대한 활용 자산의 안전한 반환 또는 KSP 자산 소각을 위해 해당 대기금을 활용합니다. 대기금은 자산 활용 시 발생하는 활용 비용(APY)의 20%와 자동 반환 시 발생하는 수수료로 조성됩니다.

## **보상률 모델**

보상률 모델에서 유동성 풀의 활용도는 활용에 대한 공급과 수용의 균형을 통해 보상률을 조정합니다. 풀 활용도는 다음과 같이 계산됩니다.

***풀 활용도 = (총 활용규모 / 총 공급규모)＊100***<br>

보상률은 \*기초 보상률에서 시작하여 풀 활용도에 따라 특정 기울기로 변화합니다. 이 기울기는 파라미터에 의해 조절되며, 활용도가 높아질수록 보상률도 상승합니다.

{% hint style="info" %}
**기초 보상률**이란 아무도 유동성을 활용하지 않아 풀 활용도가 0%일 때 적용되는 최소 보상률입니다. 기초 보상률이 2%로 설정되어 있다면, 풀 활용도가 0%일 때 활용자는 2%의 활용 비용을 지불해야 합니다.
{% endhint %}

<br>

<figure><img src="https://199555881-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FRM76CLSvWgT5g122HIcr%2Fuploads%2F48dvIok32Nd6gZAshcgH%2Fimage.png?alt=media&amp;token=da9f719e-9177-4e82-969b-aee049442e69" alt=""><figcaption></figcaption></figure>

＊X축: 유동성 풀 활용도(Utilization, %)

＊Y축: 보상률(Interest Rate, %)

위 그래프는 최적 활용도가 80%인 유동성풀 사례입니다. 활용도가 80%에 도달하기 전에는 보상률이 완만하게 상승하다가, 80%를 초과하면 보상률이 가파른 기울기로 상승하는 것을 볼 수 있습니다.&#x20;

이처럼 보상률 모델은 유동성 활용에 대한 수요와 공급 간의 균형을 조절하여 유동성 풀을 충분하게 유지합니다. 풀 활용도가 증가할수록 공급자에게 더 높은 보상(공급 APY)을 제공하여 활발한 유동성 풀 참여를 유도하는 한편, 활용 비용(활용 APY)을 높게 책정하여 활용을 억제하고 활용중인 자산의 자연스러운 반환을 유도합니다. 활용도가 지나치게 높은 경우에 한해, 공급중인 자산은 일시적으로 회수가 지연될 수는 있으나 최종적으로 회수 불가능한 경우 없이 모든 자산은 회수 가능합니다.

## **자산별 파리미터**

| 자산    | 담보 사용 가능 유무 | Max LTV     | 자동 반환 임계점   | 자동 반환 수수료   | 리저브         | <p>최적 풀</p><p>활용도</p> |
| ----- | ----------- | ----------- | ----------- | ----------- | ----------- | --------------------- |
| WETH  | <p><br></p> | <p><br></p> | <p><br></p> | <p><br></p> | <p><br></p> | <p><br></p>           |
| USDT  | <p><br></p> | 50%         | 70%         | 20%         | 20%         | 90%                   |
| BORA  | <p><br></p> | <p><br></p> | <p><br></p> | <p><br></p> | <p><br></p> | <p><br></p>           |
| oUSDC | X           | <p><br></p> | <p><br></p> | <p><br></p> | <p><br></p> | <p><br></p>           |
| KSP   | X           | <p><br></p> | <p><br></p> | <p><br></p> | <p><br></p> | <p><br></p>           |
| KDAI  | X           | <p><br></p> | <p><br></p> | <p><br></p> | <p><br></p> | <p><br></p>           |
| KAIA  | <p><br></p> | 20%         | 60%         | 20%         | 20%         | 50%                   |
| oETH  | X           | <p><br></p> | <p><br></p> | <p><br></p> | <p><br></p> | <p><br></p>           |
| oUSDT | X           | <p><br></p> | <p><br></p> | <p><br></p> | <p><br></p> | <p><br></p>           |
| oWBTC | X           | <p><br></p> | <p><br></p> | <p><br></p> | <p><br></p> | <p><br></p>           |
| oXRP  | <p><br></p> | 30%         | 65%         | 20%         | 20%         | 50%                   |

\
\
\
\ <br>


# Supply & Borrow 상세정책

## **공급 APY,  활용 APY, 예상내역**

* 공급 APY(%)와 활용 APY(%)은 실시간 상황에 따라 변동됩니다.
* KSP 분배 APY(%)는 풀에서 분배되는 KSP로 인해 획득할 것으로 예상되는 연간 APY를 의미하며, KSP 보상은 담보로 인정되지 않습니다.
* 활용 APY(%)는 자산 활용 시 지불해야하는 연간 활용 비용을 계산한 이율입니다.
* 모든 수치는 실시간 예상값이며 실제 내역과 다를 수 있습니다.

## **공급, 회수 정책**&#x20;

* 사용자는 풀에 공급중인 자산과 획득한 보상을 언제든지 자유롭게 회수할 수 있습니다. 단 사용자가 자산을 활용중인 경우, 활용 포지션을 유지하기 위해 최소 담보 비율을 충족해야하므로, 회수 가능한 금액에 제한이 있을 수 있습니다.
* 풀 활용 정도에 따라 자산 회수가 일시적으로 지연될 수 있으나, 보상률 모델에 따라 자연스러운 반환을 유도하여 회수가 불가능한 경우 없이 공급한 자산 전체를  회수할 수 있습니다.
* 자산의 시장가격이 급격히 변동하는 등의 사유로 인해 자동 반환이 실행되는 과정에서 사용자가 공급한 자산의 전부(100%)가 반환(또는 손실)되어 사용자가 수령할 수 있는 자산이 남지 않는 경우도 발생할 수 있습니다.
* 각 공급 풀의 공급 보상 APY(%), KSP 분배 APY(%)은 실시간 변동값으로, 풀의 총 유동성 규모, 공급/활용 현황, 1일 KSP 분배수량에 따라 변동됩니다.
* 공급 보상은 공급한 토큰과 동일한 토큰으로 보상 받으며, 풀에 자동으로 재공급되어 담보로 인정되나, KSP 추가 보상은 담보로 인정되지 않습니다.
* 공급한 자산(원금)에 실시간 APY에 따른 공급 보상이 누적되며, 회수 시 현재까지 누적된 보상을 포함하여 회수할 수 있습니다.
* 유동성 공급 시 토큰별로 승인 트랜잭션을 완료해야하며, 트랜잭션 완료 시 계속해서 유동성을 공급할 수 있습니다.
* 활용자들이 지불하여 누적된 활용 비용의 80%를 유동성 공급자에게 분배(공급 보상)하며, 20%는 대기금으로 누적되어 활용 자산이 정상적으로 반환되지 않는 예외 상황에 시 활용 자산의 안전한 반환 또는 KSP 자산 소각을 위해 해당 대기금을 활용합니다.

## **활용, 반환 정책**&#x20;

* 사용자는 공급한 유동성을 담보로 원하는 자산을 활용할 수 있습니다. 공급 보상은 담보로 인정되나, KSP 추가 보상은 담보로 인정되지 않습니다.
* 자산을 활용할 수 있는 최대 한도는 공급한 담보, 유동성 풀 규모, 최대 담보 인정 비율(Max Loan to Value)에 따라 결정됩니다. 최대 담보 인정 비율을 고려하는 이유는, 활용 자산의 가치가 급격히 상승하거나 활용 자산을 뒷받침(담보)하는 공급 자산의 가치가 급격히 하락하는 상황에서 자산 반환이 어려워지는 상황을 방지하여, 프로토콜의 안정성을 유지하기 위함입니다.
* 자산을 유동성 풀에 반환할 때 활용 비용(활용 APY)을 포함하여 반환합니다.
* 스마트 컨트랙트를 통해 활용자가 자산을 활용하는 대가로 지불하게 되는 비용 중 80%는 유동성 풀 공급자에게 분배되고, 나머지 20%는 대기금으로 누적됩니다. 대기금은 활용 자산이 정상적으로 반환되지 않는 예외 상황에 활용되거나 KSP 바이백에 활용하여 프로토콜의 안정성을 유지하기 위한 자금으로 사용됩니다.
* 각 공급 풀의 활용 APY(비용)은 현재 얼마나 많은 활용자들이 자산을 활용중인지를 나타내는 유동성풀 활용도(Utilization rate)에 따라 달라집니다.
* 유동성풀 활용도는 다음과 같이 계산됩니다.\
  *풀 활용도 = (총 활용규모 / 총 공급규모)＊100*

###

## **자동 반환 임계점, 자동 반환 정책**&#x20;

* 활용자는 유동성 활용에 대한 비용(활용 APY)을 지불해야 합니다. 이 비용은 실시간으로 활용 자산에 포함되며, 활용자는 비용이 포함된 활용 자산을 모두 반환한 후, 남은 자산을 회수할 수 있습니다.
* 활용 자산의 안전한 반환을 위해, 담보 가치 대비 활용 자산 가치의 비율이 자동 반환 임계점을 초과하는 경우, 자동 반환이 발생할 수 있습니다. 자동 반환이 발생하는 임계점은 자산마다 다르며, 각 자산 풀의 상세 페이지 또는 [파라미터 관련  문서](https://docs-new.klayswap.com/product/singledeposit/undefined-1#undefined-3)에서 확인할 수 있습니다.
* 자동 반환 발생 시, 활용자가 프로토콜에 지불하는 수수료입니다. 스마트 컨트랙트는 사용자의 담보의 일부 또는 전부를 매각하고 활용 자산을 반환합니다. 이 과정에서 자동 반환 수수료가 발생하여, 반환 대상 자산과 수수료를 포함한 비용이 사용자의 담보에서 차감됩니다.
* 자동 반환 수수료는 자동 반환 발생 시 활용자가 프로토콜에 지불하는 수수료입니다. 자동 반환 수수료는 급격한 가격 변동이 발생하여 미처 반환되지 못한 자산을 반환하는 목적으로 사용될 수 있습니다.

## **용어**

<figure><img src="https://199555881-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FRM76CLSvWgT5g122HIcr%2Fuploads%2FfAH8DbFNhkQt7lxlnfH7%2Fimage.png?alt=media&amp;token=e26600b8-b956-4d16-b6eb-97adb0325895" alt=""><figcaption></figcaption></figure>


# V2 Pool

### 유동성 공급과  LP Token

유저는 원하는 풀에 자산을 공급할 수 있고, 우리는 이러한 생태계 참여자를 **유동성 공급자(LP, Liquidity Provider)** 라고 부릅니다. 풀에 유동성을 제공하면 이에 대한 증거로 **LP(Liquidity Pool) Token**을 수령하며,\
수령한 LP Token의 개수는 전체 풀에서 내 몫의 지분(%) 나타냅니다. \
\
풀에 공급한 내 자산을 완전히 회수하면 LP Token 을 다시 자동으로 반환하며, 유저는 자산 공급 기간 동안  \
LP Token의 증명을 통해 풀에서 다음과 같은 보상을 분배 받을 수 있습니다.

* **KSP 분배 보상** \
  \
  &#x20;KSP 보상 풀에 유동성을 공급한 경우, 풀 에서의 내 LP 지분율에 따라 KSP 마이닝 보상을 받게 됩니다. \ <br>
* **프로토콜 이용에 따른 풀 수수료 보상** \
  \
  풀에 유동성을 공급한 경우, 풀 에서의 내 LP 지분율에 따라 풀 이용 수수료 보상을 받게 됩니다. \
  풀 이용 수수료는 풀에 적립되는 구조로, 회수 당시의 교환 비율에 따라 수수료까지 포함하여 회수할 수 있습니다(발생한 거래 수수료의 80%).<br>


# V3 Pool (Concentrated Liquidity Pool)

<figure><img src="https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/VFzjkCtpO64sLme7t2ta/V3_docs_00.png" alt=""><figcaption></figcaption></figure>

## V3 Pool (집중화된 유동성 풀)이란?

모든 가격 범위(0\~∞)에 자산을 공급하는 기존의 V2 풀과 달리, V3 풀은 특정 가격 범위에 사용자의 자산을 공급합니다. 이렇게 **특정 ‘가격 범위’ 안에서만 유동성이 거래에 사용될 수 있도록 자산을 공급**하는 것을 **집중화된 유동성(Concentrated Liquidity) 공급**이라 합니다.&#x20;

**유동성 풀의 확대**는 KLAYswap 생태계 성장의 핵심 원동력입니다. 풀에 공급되는 자산(유동성) 규모가 커질수록 더 많은 거래와 풀 이용수수료가 발생하고, 더 많은 수수료를 유동성 공급자에게 분배할 수록 새로운 유동성과 사용자가 KLAYswap 생태계 내로 지속적으로 유입될 수 있기 때문입니다.

그러나 기존의 V2 풀은 x ∗ y = k 기반의 CPMM 모델(유니스왑 V2)로 구축되어 모든 가격 범위에 자산을 공급함으로써, 유동성 대부분이 거래에 활용되지 못하는 ‘**낮은 유동성 효율**’ 문제를 일으키고, 이는 KLAYswap 전체 거래량과 거래 수수료 수익의 감소로 추가 유동성 유입 동기를 약화시키는 결과를 낳습니다.&#x20;

**V3 풀은 실제 시장에서 거래가 일어나는 가격대에 유동성을 집중적으로 공급함으로써 조성된 유동성이 더 많은 거래에 사용**되도록 합니다. 이를 통한 많은 수수료 수익의 창출은 KLAYswap 생태계 참여자에 대한 보상의 증가는 물론, KSP 부양(바이백)을 더 효과적으로 수행할 수 있는 더 많은 재원을 확보하게 됨을 의미합니다.

<figure><img src="https://199555881-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FRM76CLSvWgT5g122HIcr%2Fuploads%2FywVmoqbJgyKFJUM7yOr1%2Fimage.png?alt=media&amp;token=232f0376-516e-4741-b222-b2372265ffe4" alt=""><figcaption></figcaption></figure>

## 집중화된 유동성 공급 특징

### **1) 유동성 공급자(LP)에 대한 거래 수수료 분배**

<figure><img src="https://199555881-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FRM76CLSvWgT5g122HIcr%2Fuploads%2F6e2F3AzuWb3ZxY3MDi6h%2Fimage.png?alt=media&amp;token=b3535b7a-94c5-4875-92d2-bf4985783119" alt=""><figcaption></figcaption></figure>

**V3 풀 참여자**는 **풀에서 발생한 수수료 수익의 80%를 분배** 받습니다. V3 풀에 공급한 자산은 거래에 활발하게 활용되면서 더 많은 풀 이용 수수료를 창출합니다. 이러한 풀 이용 수수료를 분배함으로써 유동성 공급 과정에서 발생할 수 있는 비영구적 손실에 대한 부담을 줄일 수 있습니다. 또한 KSP 분배 정책에 따라 집중화 풀에도 **KSP 보상이 분배**되며, 활발한 거래량을 바탕으로 더 많은 KSP가 분배되어 공급자가 더 확대된 보상을 획득할 수 있습니다.

### **2) V3 유동성 공급 유형**

<figure><img src="https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/LaEhn3rX2KsFxQ6MZC61/V3_docs_02.png" alt=""><figcaption></figcaption></figure>

사용자는 원하는 가격 범위를 직접 설정(custom)하여 자유롭게 예치할 수 있습니다. 또는 KLAYswap V3 풀이 제공하는 Spot, Wide, Full range 3가지 가격 범위 중 1개를 선택해 빠르고 편리하게 공급할 수 있습니다. 각 유형은 컨트랙트에 미리 설정된 파라미터에 따라 현재 토큰 가격 기준으로 +-N% 만큼의 가격 범위에 해당합니다.

'가격 범위'란, 공급하는 자산이 거래에 활용될 최소가격과 최고가격 구간을 의미하며, 이 가격 범위 내에서 거래가 발생하면 공급자는 풀 이용 수수료를 분배받을 수 있습니다. 각 가격 범위의 특징은 다음과 같습니다.

#### **Spot, Wide, Full range 가격 범위 별 특징**

<figure><img src="https://199555881-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FRM76CLSvWgT5g122HIcr%2Fuploads%2FCkVkaCjHrYv2spBccQZU%2Fimage.png?alt=media&amp;token=27d9d61f-5d04-4828-98a2-1d62dc412679" alt=""><figcaption></figcaption></figure>

가격 범위를 좁힐 수록, 사용자가 공급한 유동성이 거래에 사용될 가능성이 증가하므로, 더 많은 풀 이용 수수료 보상을 기대할 수 있습니다.

단, 가격 변동 폭이 큰 토큰은 좁은 가격 범위에 집중적으로 공급할수록 현재 토큰 가격이 공급한 범위를 이탈하지 않는지 지속적으로 모니터링해야 하고, 이탈한 경우에는 보상을 획득할 수 있는 유효한(스왑이 일어나는) 가격 범위에 있도록 자산을 마이그레이션해야 합니다. 뿐만 아니라 좁은 가격 범위에 공급할 수록 토큰의 가격이 공급한 시점과 달라져 발생하는 비영구적 손실도 함께 커질 수 있는 가능성이 존재합니다([가격 범위 이탈과 마이그레이션](https://docs.klayswap.com/v/kr/product/v3/v3-to-v3#undefined) 참고).

KLAYswap의 V3 풀은 위 방식을 통해 V3 유동성 공급 경험이 없는 사용자도 쉽고 간편하게 이용할 수 있습니다.

### **3) V3 풀 마이그레이션(V3 -> V3) 지원**

&#x20;KLAYswap의 V3 풀은 공급중인 자산을 다른 가격 범위로 이동하고자 하는 경우, \
한 번의 트랜잭션만으로 마이그레이션 할 수 있도록 원스탑 마이그레이션을 지원합니다. 상세 절차는 \
자산 회수 – 새로운 가격 범위로 공급으로 이루어지며, 공급자는 유동성 풀의 상세 페이지에서 \
마이그레이션 할 수 있습니다. \
\
더 자세한 내용은 아래의 V3 to V3 마이그레이션 마이그레이션 가이드와 정책을 참고하여 주시기 바랍니다.

{% content-ref url="/pages/VOKWFRnDUhzkrGnSKzUz" %}
[V3 to V3 마이그레이션 가이드](/product/v3-pool-concentrated-liquidity-pool/v3-to-v3/v3-to-v3)
{% endcontent-ref %}

{% content-ref url="/pages/WsacrOU2an7ceUAhIgwE" %}
[V3 to V3 마이그레이션 상세 정책](/product/v3-pool-concentrated-liquidity-pool/v3-to-v3/v3-to-v3-1)
{% endcontent-ref %}

### &#x20;**4)** V2 풀**에서** V3 풀로 **마이그레이션(V2 → V3) 지원**

V3 풀은 V2 풀보다 자산을 거래에 효율적으로 활용하므로, \
공급자에게 큰풀 이용 수수료 보상을 제공합니다. 기존의 V2 풀에 자산을 공급중인 사용자 또한 마이그레이션 기능을 통해 편리하게 V3 풀에 유동성을 공급할 수 있습니다. \
\
공급자는 유동성을 공급한 일반 예치 풀의 상세 페이지에서 편리하게 마이그레이션할 수 있습니다. \
마이그레이션은 한 번의 트랜잭션으로 V2 풀 자산 회수 – V3 풀로 유동성 공급을\
진행합니다. \
\
더 자세한 내용은 아래의 V3 to V3 마이그레이션 마이그레이션 가이드와 정책을 참고하여 주시기 바랍니다.

{% content-ref url="/pages/woBWWQ6C85YIHKJV1S9P" %}
[V2 to V3 마이그레이션 가이드](/product/v3-pool-concentrated-liquidity-pool/v2-to-v3/v2-to-v3)
{% endcontent-ref %}

{% content-ref url="/pages/46gmQTMGGGJkeBiU5K8r" %}
[V2 to V3 마이그레이션 상세 정책](/product/v3-pool-concentrated-liquidity-pool/v2-to-v3/v2-to-v3-1)
{% endcontent-ref %}

<br>

## V3 풀을 통한 KLAYswap의 성장

KLAYswap은 이미 Klaytn 최대 규모의 유동성과 생태계 참여자를 보유하고 있으며, 이 유동성을 자연스럽게 V3 풀로 마이그레이션함으로써 생태계 유동성 자본을 더욱 효율적이고 역동적으로 흐르게 하고자 합니다.

V3 풀은 거래자에게 더 유리한 환경을 제공하고, 이에 따라 KLAYswap은 기존 V2 풀의 배가되는 활발한 거래량을 확보하게 될 것입니다. 이러한 거래량으로 인한 폭발적인 풀 이용 수수료 보상의 증가는 KLAYswap, 생태계 참여자, KSP 가치부양을 가능하게 하는 재원으로 활용하게 됩니다.&#x20;

<figure><img src="https://199555881-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FRM76CLSvWgT5g122HIcr%2Fuploads%2Fc9mYe7rheZoxgQtjxrNE%2Fimage.png?alt=media&amp;token=f0bd8cd2-df77-43bb-9192-0f957b058f3c" alt=""><figcaption></figcaption></figure>

### **KLAYswap 생태계 성장**

V3 풀에서 발생한 거래 수수료 수익의 80%를 V3 풀 참여자에게 분배하여 신규 유동성을 지속적으로 유입시킵니다. 이를 통해 KLAYswap은 더 풍부한 유동성을 확보하여 TVL이 증가하고, 상승한 TVL을 바탕으로 다시 더  많은 풀 이용 수수료 보상을 발생시키는 선순환 구조를 구축합니다.<br>

### **생태계 참여자 보상 확대**

KSP 토크노믹스에 따라, V3 풀에서 발생한 거래 수수료 수익의 10%는 KSP 스테이킹 참여자(vKSP 홀더)에게 보상으로 분배합니다. 이에 따라 V3 풀 참여자 뿐 아니라 KSP 분배를 결정하는 vKSP 홀더 또한 더 확대된 보상을 획득할 수 있습니다..&#x20;

### **KSP 가치 부양**

V3 풀에서 발생한 풀 이용 수수료 보상의 나머지 10%는 KSP 바이백 재원으로 활용합니다.  KSP 바이백 확대를 통한 KSP 인플레이션 유통량 조절은 KSP 가치를 안정적으로 부양하고, KSP를 보유하려는 수요를 지속적으로 증가시킬 것입니다.

<figure><img src="https://199555881-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FRM76CLSvWgT5g122HIcr%2Fuploads%2FDktAVqSWgtyAuBfPHTOE%2Fimage.png?alt=media&amp;token=4856b380-27fc-4895-8f5a-b54fe8f93bf7" alt=""><figcaption></figcaption></figure>


# V2 to V3 마이그레이션

<figure><img src="https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/Mwo0AP954EeiInnz7sa3/V3_docs_06.png" alt=""><figcaption></figcaption></figure>

V3 풀은 V2 풀보다 공급한 자산을 거래에 효율적으로 활용하므로, 공급자에게 더 높은 이율과 더 큰 프로토콜 이용에 따른 풀 수수료 보상을 제공할 수 있습니다.

기존의 V2 풀에 자산을 공급 중인 사용자 또한 마이그레이션 기능을 통해 편리하게 V3 풀로 자산을 공급할 수 있습니다. 공급자는 자산을 공급중인 유동성 풀의 상세 페이지에서 편리하게 마이그레이션할 수 있습니다. 마이그레이션은 한 번의 트랜잭션으로 V2 풀 자산 회수 – V3 풀로 자산 예치를 진행합니다.

더 자세한 내용은 아래의 마이그레이션 가이드와 정책을 참고하여 주시기 바랍니다.

{% content-ref url="/pages/woBWWQ6C85YIHKJV1S9P" %}
[V2 to V3 마이그레이션 가이드](/product/v3-pool-concentrated-liquidity-pool/v2-to-v3/v2-to-v3)
{% endcontent-ref %}

{% content-ref url="/pages/46gmQTMGGGJkeBiU5K8r" %}
[V2 to V3 마이그레이션 상세 정책](/product/v3-pool-concentrated-liquidity-pool/v2-to-v3/v2-to-v3-1)
{% endcontent-ref %}

<br>


# V2 to V3 마이그레이션 가이드

1\. 일반 예치 풀 목록 페이지에서 마이그레이션을 진행할 풀을 선택합니다.

<figure><img src="https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/pZ3D5jCdOz7owLWpPaCH/image.png" alt=""><figcaption></figcaption></figure>

2\.  풀 상세 화면에서 **\[집중화 풀(V3) 마이그레이션]** 버튼을 클릭합니다. **“자산 마이그레이션”** 팝업에서 Spot, Wide, Full Range 중 V3에 마이그레이션을 진행할 가격 범위 유형을 선택한 후, **\[다음 단계로]** 버튼을 클릭합니다.

<figure><img src="https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/DjbD5mrK2NWIvDXuhlmF/image.png" alt=""><figcaption></figcaption></figure>

3\. **“트랜잭션 요청”** 팝업에서 V3 풀에 예치할 각 페어 자산의 수량과 현재 가격, 가격 범위, 보상 토큰 등 예상 정보를 확인한 후, **\[예치하기]** 버튼을 클릭합니다.

<figure><img src="https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/NKcYsBWGCO3GfXMGhsl5/image.png" alt=""><figcaption></figcaption></figure>

표시되는 정보는 모두 실시간 예상 정보로, 실제 마이그레이션 과정에서 차이가 발생할 수 있습니다. 그러므로 사용자는 마이그레이션 과정에서 발생할 수 있는 변동 사항에 대해 충분히 숙지하고 이해한 후에 예치하시기 바랍니다.

{% hint style="info" %}
**Tips**

* V2 풀에서 출금한 자산은 사용자가 선택한 V3 풀 가격 범위에 해당하는 가격 비율을 따라, 최대한의 자산을 V3풀에 예치합니다.
* V3 풀에 예치하는 과정에서 소량의 자산(wei)이 남을 수 있으며, 예치 후 남은 자산은 자동으로 사용자의 지갑으로 반환됩니다.
* 선택한 자산을 KLAYswap에서 거래한 이력이 없다면, 집중화 풀 예치 트랜잭션을 진행하기 이전에 Token Approve Transaction이 선행됩니다 (최초 1회에 한함).
  {% endhint %}

<figure><img src="https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/RBSiN04JIUqIMK1xOKyR/image.png" alt=""><figcaption></figcaption></figure>


# V2 to V3 마이그레이션 상세 정책

<figure><img src="https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/CmLPDpdgJph6uPrwGpzE/V3_docs_06.png" alt=""><figcaption></figcaption></figure>

1\) V2 풀에서 V3 풀로의 마이그레이션 기능 사용 시 일반적으로 **Approve(자산 승인) – 기존 V2 풀에서 자산 회수 –V3 풀로 자산 공급** 단계를 거칩니다.&#x20;

2\) 공급한 자산을 회수하기 위해서는 공급증표에 해당하는 LP 토큰을 지갑에 보유하고 있어야 하며, 해당 토큰 자산에 대한 승인 트랜잭션을 완료해야 합니다. 트랜잭션 실행 시 클레이튼 체인 상에서 수수료가 발생합니다. LP 토큰 자산 이동 권한은 지갑(키) 소유자에게 있으므로, 만약 해당 자산을 다른 지갑으로 전송하는 경우 공급한 자산 회수가 불가능합니다.

3\) 자산 회수 과정에서 기존 가격 범위에서 공급 시점과 회수 시점의 가격과의 차이로 인해 자산 손실의 발생할 수 있습니다. 회수 시 밸런스 변동으로 인해 해당 시점까지 분배된 모든 보상(거래 수수료 수익, KSP, 에어드랍 토큰 등)은 자동으로 지갑에 수령됩니다.&#x20;

4\) 회수한 자산은 스마트 컨트랙트가 자동으로 사용자가 새롭게 공급하고자 하는 가격 범위의 풀 교환 비율에 따라 최적의 비율로 예치합니다.

5\) V2 풀에서 회수한 자산은 사용자가 선택한 V3 풀 가격 범위에 해당하는 가격 비율을 따라, 최대한의 자산을 V3풀에 공급합니다.

6\) 새로운 V3 풀 가격 범위에 자산을 공급 시 ,사용자가 설정한 거래 범위(Slippage) 안에서만 공급하며, 해당 범위를 초과하는 경우 공급 트랜잭션이 진행되지 않을 수 있습니다. 하단의 예상내역 영역에서 관련 정보를 모두 확인 후 자산을 공급하세요.

7\) V3 풀에 공급하는 과정에서 소량의 자산(wei)이 남을 수 있으며, 공급 후 남은 자산은 자동으로 사용자의 지갑으로 반환됩니다.&#x20;

<br>


# V3 풀 유동성 공급

<figure><img src="https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/Wbpu5UE0jsn9uzwC0lC7/V3_docs_00.png" alt=""><figcaption></figcaption></figure>

### 유동성 공급과 V3 LP NFT Token

\
V3 Pool에 자산을 공급하는 생태계 참여자를 유동성 공급자(LP, Liquidity Provider)라고 부릅니다. KLAYswap은 공급한 V3 Pool의 가격 범위를 NFT로 관리합니다. 사용자가 유동성 풀에 자산을 공급하면, 증표로 KLAYswap V3 LP NFT를 받게 됩니다.

이 NFT는 **공급한 자산에 대한 소유권을 의미**하므로, **사용자가 자산을 공급하는 기간 동안 해당 풀에서 거래 수수료 수익과 보상 토큰을 받을 수 있습니다.**

**V3 Pool에 자산을 출금할 때에는**, 더이상 풀에 유동성을 제공하지 않으므로 **해당 NFT를 자동으로 반환합니다.**&#x20;

### KSP 분배 보상

V3 Pool에 유동성을 공급한 경우, 풀에서의 내 LP 지분율에 따라 KSP 마이닝 보상을 받게 됩니다.&#x20;

<br>

### 프로토콜 이용에 따른 풀 수수료 보상

V3 Pool에 유동성을 공급한 경우, 풀에서의 내 LP 지분율에 따라 풀 이용 수수료 보상을 받게 됩니다. 분배 받은 풀 이용 수수료 보상은  “수령 가능”에서 확인한 후 직접 클레임하여 지갑으로  수령할 수 있습니다. &#x20;

<br>

### 토큰 에어드랍 보상

에어드랍을 진행 중인 풀에 유동성을 공급한 경우, 내 LP 지분율에 따라 에어드랍 토큰을 분배 받게 됩니다.

<br>

### V3 Pool 상태에 따른 마이그레이션 관리&#x20;

V3 Pool 참여자에게는 거래가 발생할 것이라고 예상하는 특정 가격 범위에 자산을 공급하고, 공급한 자산(유동성)에서 거래 발생 시 풀 이용 수수료 보상을 분배 받습니다.

반면 현재 토큰 가격이 예치한 가격 범위를 벗어나는 경우(비활성)에는 더이상 내가 공급한 자산이 스왑에 사용되지 않아, 일반적으로 풀에서 분배되는 보상(스왑 수수료와 리워드 토큰)을 획득할 수 없습니다. 그러므로 자산을 공급한 사용자는 공급한 가격 범위가 유효(활성)한 상태인지 항상 주의하여 자산을 관리해야 합니다.&#x20;

V3 Pool에 유동성 공급은 활성, 유의, 비활성 총 3가지 상태로 존재합니다.

<figure><img src="https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/OlyYBl6pVsNVHGXHnQGH/V3_docs_03.png" alt=""><figcaption></figcaption></figure>

더 자세한 내용은 아래의 V3 Pool 유동성 공급 가이드와 정책을 참고하여 주시기 바랍니다.

{% content-ref url="/pages/B7xBsgKuZz417RcYBqIV" %}
[V3 풀 유동성 공급 가이드](/product/v3-pool-concentrated-liquidity-pool/v3/v3)
{% endcontent-ref %}

{% content-ref url="/pages/7XQp0pYnPRhdRIH6Ilj3" %}
[V3 풀 유동성 공급 상세 정책](/product/v3-pool-concentrated-liquidity-pool/v3/v3-1)
{% endcontent-ref %}

<br>


# V3 풀 유동성 공급 가이드

1\. 상단 **\[예치]** 메뉴의 **\[집중화 풀(V3) 페어 예치]** 페이지로 이동합니다.

<figure><img src="https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/rg7PjmwubUDnUNz6COKx/image.png" alt=""><figcaption></figcaption></figure>

2\. 풀 목록에서 예치할 풀을 선택한 후, **\[예치]** 버튼을 클릭해 예치 상세 페이지로 이동합니다.

<figure><img src="https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/2VjAsKJzuJ9ZDe47wzgh/image.png" alt=""><figcaption></figcaption></figure>

3\. 가격 범위를 설정합니다. 가격 범위는 아래 3가지 방법으로 조정할 수 있습니다.&#x20;

① 그래프에서 “최저 가격 막대”와 “최고 가격 막대”를 좌우로 드래그합니다.

② 가격 범위 설정에서 “최저 가격”과 “최고 가격”을 직접 입력합니다.

③ 가격 범위 설정에서 \[＋] 버튼 또는 \[－]버튼을 클릭합니다.

<figure><img src="https://lh3.googleusercontent.com/-VqtR8RbwPhIHQrcnLT3lgI45oUFJzYnkActY4IAW9VoPFYizh0KYB9Lh6PWofqpmpdS0cla2fD7B37wXb6oxaefLe6iQSJRdMzQDtGl__tXNX-xbExs4oH2dBum44X2AKc-tTn4c0MY6YOZT9QYkR8" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Tips**

&#x20;**Spot, Wide, Full range** 3가지 가격 범위 중 1개를 선택해 빠르고 편리하게 예치할 수 있습니다.
{% endhint %}

4\. 두 자산을 모두 예치할지, 한 자산만으로 예치할지 선택합니다.

<figure><img src="https://lh5.googleusercontent.com/pM7C_ixPBx9HvzgkpsYcM6_kJcdnBZ0SHpFXmGhDXN7mY8uAXDyUCaLDFATlppyU2097nknbLbp14EeYuo65w8irBY9Zer4Eo_ay4JE2lJmNXPqz-NRX2-kSkpidlZaVN_PLCuHVo83MPvTRn478gMg" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Tips**

* **두 자산 예치인 경우(A+B)**: 두 자산 예치는 페어를 구성하는 자산 두 개를 모두 보유한 경우 이용할 수 있습니다. 일단 하나의 자산 (A) 수량을 입력하면, 나머지 페어 자산 (B) 수량이 자동으로 계산되어 입력됩니다.
* **한 자산 예치인 경우(A or B)**: 한 자산 예치는 페어 중 한 개 자산만 보유하고 있는 경우에도, 편리하게 예치할 수 있습니다. 스마트 컨트랙트가 최대의 풀 지분율을 확보할 수 있도록 자동으로 최적의 비율로 스왑하여 자산을 예치합니다. 유저가 **가능한 한 최대의 풀 지분율을 확보할 수 있도록, Token A 수량의 일정 비율을 Token B로 스왑**해  A + B Token pair로 예치합니다.
* “max” 버튼을 클릭하면, 거래 가능한 최대 수량이 입력됩니다.
  {% endhint %}

{% hint style="warning" %}
**Notes**\
비활성 가격 범위에 예치하는 경우, 일반적으로 보상이 분배되지 않으며, 페어 중 한쪽 토큰으로만 예치할 수 있습니다.
{% endhint %}

5\. 보유한 토큰 수량을 확인한 후, 예치할 수량을 입력합니다. **“예상 내역”**&#xC5D0;서 예치 범위, 지분율, 데일리 보상 등의 예상 정보를 확인할 수 있습니다.  확인을 마쳤으면 **\[예치]** 버튼을 클릭해 주세요.

<figure><img src="https://lh4.googleusercontent.com/1hgOsDHjfdsB7pgm_4vAA_3PgElQOtGGPoMafHo5hPhlMSSJz4wxwPom4CdF4-fFV6LgpeFzA8caH8gwJ-qZiAN_Kmz3LWOGKPvg9g7bx3slD6oTQmCj5wfJYrSxRL6uPLKIdFOhxwgJ9Tw8ozyCNDg" alt=""><figcaption></figcaption></figure>

* 표시되는 정보는 모두 **실시간 예상 정보로, 실제 예치 과정에서 차이가 발생할 수 있습니다**. 그러므로 예치 과정에서 발생할 수 있는 변동 사항에 대해 충분히 숙지하고 이해한 후에 예치를 진행해주시기 바랍니다.<br>
* 한 자산 예치인 경우, **\[예치]** 버튼 클릭 후 **“예치 내역 확인”** 팝업을 확인할 수 있습니다.  스왑 시 적용되는 교환 비율과 스왑 수수료, 풀 별 수수료율을 확인한 후 다음 단계를 진행합니다.

<figure><img src="https://lh5.googleusercontent.com/Jm3TZ6hJ9C9bzOouVw-wDsn_fLbKGL-GUd_OBaA7XEw7-InlxUmdWpA-bZVKPJEreM22JemUIl1uHGPcJIxzv5LZstJCH0AIOF4lHtYjLCpx7TWtPlFloRWVVJnKx3Q2ZpTwdA8MWj6VoEYBCkb1DUE" alt=""><figcaption></figcaption></figure>

<br>

6\. **“트랜잭션 요청”** 팝업창에서 진행할 집중화 풀 예치에 대한 예상 정보를 확인한 후, **\[예치하기]** 버튼을 클릭합니다. 최종적으로 정보를 확인하였다면, 지갑에서 **\[Confirm]** 버튼을 눌러주세요.

<figure><img src="https://lh6.googleusercontent.com/aWziNf-KJlYgu2_oYVFDjbVbqRa70sDWu9kvTsQ55M1OE8vAIEAglUMhCJomPkWU0HXE5z07sxGxqxabnIYV8mUzeZuUIBx-ZUaLYbUq2naDdNf6Kxkalqd5z-mygPNLH_8FdiLxDaJ2ZEMSw2Q2GFE" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Tips**

선택한 자산을 KLAYswap에서 거래한 이력이 없다면, 집중화 풀 예치 트랜잭션을 진행하기 이전에 Token Approve Transaction이 선행됩니다 (최초 1회에 한함).
{% endhint %}

7\. 예치를 완료하면, 내 예치 정보와 수령 가능한 보상 정보(KSP, 수수료, 누적 수익)를 확인할 수 있습니다. 실시간 예상 수익률에 따라, 보상이 실시간으로 분배됩니다.

<figure><img src="https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/MAn9r4J2GUshA3YVXgsA/image.png" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Tips**

만약 추가로 예치하거나 예치중인 자산을 출금하여 **“내 예치 자산”** 밸런스가 변경되는 경우, 현재까지 분배된 보상(거래 수수료, KSP, 에어드랍 토큰)이 자동으로 유저 지갑으로 수령됩니다.
{% endhint %}

<br>


# V3 풀 유동성 공급 상세 정책

## V3 풀 유동성 공급 상세정책&#x20;

\
1\) 사용자는 현재 공급하려는 가격 범위에 해당하는 풀의 교환 비율(가격)에 따라 사용자가 원하는 자산 수량을 직접 입력하여 공급할 수 있습니다.

2\) 공급 시 두 자산을 모두 보유하거나 또는 한 자산만 보유하고 있더라도 공급할 수 있습니다. 두 자산 공급인 경우 스왑이 발생하지 않으나, 한 자산 공급인 경우(A or B) 스마트 컨트랙트가 자동으로 현재 풀 교환 비율에 따라 최적의 비율로 자산을 스왑해 예치합니다.

스왑이 필요한 경우 스왑 경로는 V2, V3풀을 활용하여 진행하며, 거래 수수료가 발생합니다. 거래 수수료는 풀 별 거래 수수료율의 적용을 받습니다.<br>

3\) 스왑 시 발생하는 수수료는 제외한 후 공급하며, 스왑 시 거래 규모(수량)가 클수록 풀의 토큰간 교환 비율에 영향력을 주어 현재 가격과 교환 시 적용받는 가격에 차이(Price impact)가 발생할 수 있습니다. 적은 수량으로 여러 번을 실행하면 영향력을 줄일 수 있습니다.

4\) 거래 규모에 따라 교환 시 적용 받는 가격에 차이(Price impact)가 발생하여 예상되는 교환 비율과 완전히 정확하게 공급이 진행되지 않을 수 있습니다. 이러한 경우를 방지하기 하기 위해 스왑 시 설정한 거래 범위(Slippage) 안에서만 공급을 진행하며, 해당 범위를 초과하는 경우 공급 트랜잭션이 진행되지 않을 수 있습니다(Revert). 하단의 예상 내역 영역에서 관련 정보를 모두 확인 후 공급를 진행해주세요.

5\) 공급 후 자산 구성의 변화 안내

특정 가격 범위에 공급함에 따라 자산의 구성 비율 및 가치 변화가 발생할 수 있습니다. 공급 시점에 사용자가 두 개의 토큰 포지션을 보유하고 있더라도, 토큰의 현재 거래 가격이 예치한 가격 범위를 벗어나는 경우, 사용자의 공급 자산은 더 낮은 가치의 자산 한 개를 보유한 포지션으로 변경됩니다.

예를 들어, 특정 사용자가 ETH/USDC 페어에서 1 ETH = 1,000 USDC \~ 1ETH = 3,000 USDC 가격 범위에 자산을 공급한 경우, ETH 가격이 1,000 미만으로 하락하게 되면 사용자의 공급 자산은 ETH 토큰으로만 보유하게 됩니다.  반대로, ETH 가격이 3,000 USDC를 초과하여 상승하는 경우, 사용자의 예치 자산은 USDC 토큰으로만 보유하게 됩니다.

이에 따라 사용자는 사용자가 자산을 출금하려는 시점의 현재 토큰 가격에 따라 최초 공급 시점과 다른 자산 구성으로 자산을 수령(출금)할 수도 있습니다.

6\) 풀 비활성 시 보상 수령 불가 안내

V3 풀은 거래가 발생한 것으로 예상되는 특정 가격 범위에 자산을 공급하고, 공급된 자산(유동성)에서 실제 거래가 발생한 경우 거래 수수료 수익을 분배 받습니다. 그러므로 현재 토큰 거래 가격이 사용자가 공급한 가격 범위를 벗어나는 경우, 일반적으로 풀에서 분배되는 보상을 획득할 수 없습니다. 이에 따라 지속적인 보상을 획득하기 위해서는 현재 자신이 예치한 가격 범위 내에서 거래가 발생하고 있는지 풀 상태(활성, 유의, 비활성)를 직접 확인하여 적절한 시점에 자산 마이그레이션하거나, 자산을 출금하여 유효한 가격 범위에 재 예치해야 합니다.&#x20;

7\) 특정 가격 범위에 유동성을 집중적으로 공급하는 V3 풀은 일반 페어 예치(V2)보다 큰 비영구적 손실이 발생할 수 있습니다. 특히 토큰 가격 변동이 큰 경우, 좁은 가격 범위에 예치할 수록 큰 비영구적 손실이 발생할 수 있습니다. 예치자는 이러한 비영구적 손실을 충분히 고려하고, 토큰의 가격 변동에 대비해 V3 풀에 자산을 예치해야 합니다.

＊비영구적 손실: 토큰의 가격 변동에 따라 풀 내 자산의 비율이 변경되어, 토큰을 그대로 보유한 경우보다 DEX에 자산을 예치했기 때문에 자산 가치가 하락하는 현상을 의미합니다.

8\) V3 풀에서 분배된 보상(거래 수수료, KSP)은 상세 페이지 내에서 직접 수령(클레임)할 수 있습니다.

## 수익률, 예상내역

### 1) 수익률

모든 수익률(%)은 풀 별 거래 수수료율, 토큰 가격, 사용자의 지분율과 집중화 정도, 예치된 자산의 활성화 여부 등 실시간 현황에 따라 변동됩니다.

### 2) 거래 수수료 수익률(%)

\* 거래 수수료 수익률 관련 모든 예시는 V3 풀에서 발생한 거래 수수료 100%를 유동성 공급자(LP, 예치자)에게 분배함을 가정하였으며, 거버넌스 정책에 따라 유동성 공급자에게 분배되는 비율이 변경될 수 있습니다.

#### <거래  수수료 수익 분배 정책>

\* **분배 수수료** = 거래 수수료 \* (사용자의 유동성(A)/활성화 된 유동성(T))

거래 수수료 수익은 사용자가 자산을 예치한 가격 범위 내에서 거래가 발생한 경우, 해당 거래가 발생한 Tick을 포함하고 있는 활성화된 유동성 전체 규모 대비 해당 거래가 발생한 Tick을 포함하고 있는 사용자의 **유동성 규모의 지분율(%)**&#xC5D0; 따라 거래 수수료가 분배됩니다. (거래 발생 시점마다 거래 수수료 분배)

이때 사용자의 **유동성 지분율**은 같은 규모의 자금일지라도 더 좁은 가격 범위에 예치할 수록 더 높은 지분율을 차지하게 됩니다.&#x20;

<figure><img src="https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/WlAlGQWle1mXXzBxZZHf/V3_custom_docs_01.png" alt=""><figcaption></figcaption></figure>

동일한 $ 1,000 규모의 자금을 Full range 범위에 예치하는 경우, 자산은 ① 과 같이 전체가격 범위 (0\~∞)에 균일하게 예치됩니다. 하지만 이 보다 더 제한된 가격 범위 (Pa\~Pb)에 자산을 예치하는 경우(②,③) 거래가 발생했을 때 풀 내에서 더 높은 유동성을 공급한 효과를 얻을 수 있습니다.    &#x20;

만약 USDT-DAI 풀에 위의 세 유형으로만 자산이 예치된 상태라고 가정한다면, 풀의 유동성 지형은 다음과 같이 확인할 수 있습니다.

<figure><img src="https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/d38cH2CvYRValDKsB2Om/V3_custom_docs_02.png" alt=""><figcaption><p><strong>유동성 지형</strong></p></figcaption></figure>

풀에서 거래가 발생하여 토큰 가격이 P0 > P2로 변경되었다면, P0\~P1구간에서는 사용자 A의 자산이 사용되지 않고, P1\~P2 구간에서 사용자 A의 유동성이 거래에 사용됩니다. P1\~P2 구간에서 활성화된 거래 유동성 내 사용자 A의 지분율은 (사용자의 유동성(A)/활성화 된 유동성(T)) 입니다.<br>

<figure><img src="https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/iZabtbmct4oyNYvaZqHa/V3_custom_docs_03.png" alt=""><figcaption><p><strong>사용자 A의 지분율=(사용자의 유동성(A)/활성화 된 유동성(T))</strong></p></figcaption></figure>

P1\~P2 구간에서의 거래량과 유동성 규모가 다음과 같을 때, 사용자 A가 획득하는 수수료는 다음과 같습니다.

USDT-DAI 풀 수수료율 :  0.06%

스왑 거래량 : $100&#x20;

P1\~P2 범위에서 사용자A의 유동성(A) : $ 1,000

P1\~P2 범위의 총 유동성(B) : $ 100,000

A가 획득하는  거래 수수료 수익 = ($100\*0.0006)\*(1,000/100,000)= $0.0006

#### <예상 거래 수수료 수익률 계산>

최근 24시간 동안 특정 페어의 V3 풀에서 발생한 거래 수수료를 현재 시점에 활성화된 유동성에 분배하였을 때의 연간 예상 수익률을 계산하여 표시합니다.&#x20;

<figure><img src="https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/wdc5Cn3Zvegi1fM8xh7j/V3_custom_docs_04.png" alt=""><figcaption></figcaption></figure>

만약 USDT-DAI 풀에 가격 범위 유형(Spot, Wide, Full range)별로 위와 같이 자산이 예치되어 있다고 가정했을 때, 토큰 가격이 P1 > P2로 변경되었다면, 풀 내 활성화된 유동성(T)은 다음과 같으며,

&#x20;&#x20;

<figure><img src="https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/vftok8qEj99aO0u1faKa/V3_custom_docs_05.png" alt=""><figcaption></figcaption></figure>

P1\~P2 구간에서의 거래량과 각 가격 범위 유형 (Spot, Wide, Full range)의 유동성 규모가 다음과 같을 때, 예상 수익률은 아래와 같이 계산합니다.

USDT-DAI 풀 수수료율 :  0.06%

최근 24시간 거래량 : $1,000&#x20;

USDT-DAI풀 P1\~P2 범위의 총 유동성(T) : $ 100,000

* Spot 유형 예치 시 공급하게 되는 유동성(S) :  $ 27,000
* Wide 유형 예치 시 공급하게 되는 유동성(W) : $ 4,650
* Full range 예치 시 공급하게 되는 유동성(F) : $ 10

#### **\<Spot 예상 거래 수수료 APR>**

\=   최근 24시간 풀 수수료 \* (활성화된 Spot 유동성(S)/활성화 된 유동성 전체(T))\*100\*365

<figure><img src="https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/O1RCfj2MU8DsqG7mqsg3/V3_custom_docs_06.png" alt=""><figcaption><p><strong>Spot 예상 거래 수수료 APR</strong></p></figcaption></figure>

\= $1,000\*0.0006\*($27,000/$100,000)\*100\*365 = 연 **5,913%**&#x20;

#### **\<Wide 예상 거래 수수료 APR>**&#x20;

\=   최근 24시간 풀 수수료 \* (활성화된 Wide 유동성(W)/활성화 된 유동성 전체(T))\*100\*365

<figure><img src="https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/7do97coGfPVO4fyyua6Z/V3_custom_docs_07.png" alt=""><figcaption><p><strong>Wide 예상 거래 수수료 APR</strong></p></figcaption></figure>

\= $1,000\*0.0006\*($4,650/$100,000)\*100\*365 = 연 **1,018%**

#### &#x20; **< Full range 예상 거래 수수료 APR>**&#x20;

\=   최근 24시간 풀 수수료 \* (활성화된 Full range 유동성(F)/활성화 된 유동성 전체(T))\*100\*365

<figure><img src="https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/jHRCyMyOLd8TCROy9cTT/V3_custom_docs_08.png" alt=""><figcaption><p><strong>Full range 예상 거래 수수료 APR</strong></p></figcaption></figure>

\= $1,000\*0.0006\*($10/$100,000)\*100\*365 = 연 **2.19%**

### 3) KSP 분배 수익률(%)

#### **<풀 1일 KSP 분배 수량의 결정>**&#x20;

V3 풀의 1일 KSP 분배 수량 확정은 기존 V2 풀의 KSP 분배 정책과 동일하게 적용됩니다. 풀 투표(50%)와 KSP 바이백 수량(50%) 집계를 통해 계산된 최종 KSP 분배율에 따라 1일 분배 수량을 확정합니다.( KSP 분배 상세 정책 보기 )&#x20;

\ <br>

#### **<예상 KSP 분배 수익률 계산>**&#x20;

V3 풀에 분배된 1일 KSP 분배 수량을 현재 시점에 활성화된 유동성에 분배하였을 때의 연간 예상 수익률을 계산하여 표시합니다. KSP 분배 수익률 또한 각 가격 범위 유형 (Spot, Wide, Full range)에 따라 예상 수익률을 다음과 같이 계산할 수 있습니다.&#x20;

**\* Spot/Wide/Full range 유형의 예상 KSP 분배 APR**&#x20;

\=   1일 KSP 분배 수량 \* KSP 가격 \* (활성화된 각 유형 유동성/활성화된 유동성 전체)\*100\*365

<br>

### 4) 토큰 에어드랍 수익률&#x20;

V3 풀에 분배된 1일 에어드랍 토큰 수량을 현재 시점에 활성화된 유동성에 분배하였을 때 연간 예상 수익률을 계산하여 표시합니다. 에어드랍 수익률의 계산은 4) KSP 분배 수익률의 계산과 동일합니다.&#x20;

#### **\* Spot/Wide/Full range 유형의 예상 에어드랍  APR**&#x20;

\=   1일 토큰 분배 수량 \* 토큰 가격 \* (활성화된 각 유형 유동성/활성화된 유동성 전체)\*100\*365

### 5) KSP, 에어드랍 토큰의 분배

거버넌스 정책에 따라 KSP, 에어드랍 토큰의 분배는 **현재 시점에 활성화된 유동성에 실시간(클레이튼 블록 생성 타임 기준)분배**되므로, 전일자에 활성화된 유동성 범위 내에 자산을 예치한 경우라 하더라도, 실제 분배가 이루어지는 시점에 활성화된 유동성 범위가 아닌 경우 보상 분배를 받지 못할 수 있습니다. 이에 따라 사용자는 자신이 예치한 자산이 활성화된 범위 내인지 지속적으로 확인해야 합니다. 현재 토큰 가격 범위를 이탈한 경우(비활성 상태)  마이그레이션 또는 출금 후 재 예치하여 다시 유효한 가격 범위로 자산을 예치해야 보상을 획득할 수 있습니다.

{% content-ref url="/pages/VOKWFRnDUhzkrGnSKzUz" %}
[V3 to V3 마이그레이션 가이드](/product/v3-pool-concentrated-liquidity-pool/v3-to-v3/v3-to-v3)
{% endcontent-ref %}

### **6) 모든 수치는 실시간 예상 값이며 실제 내역과 다를 수 있습니다.**


# V3 to V3 마이그레이션

<figure><img src="https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/UtgCxl6ovr1d6Ak28cOT/V3_docs_14.png" alt=""><figcaption></figcaption></figure>

## 가격 범위 이탈

'가격 범위'란, 예치하는 자산이 거래에 활용될 최소가격과 최대가격 구간을 의미하며, 이 가격 범위 내에서 거래가 발생하면 예치자는 거래 수수료 수익을 분배받을 수 있습니다.

예치한 풀의 토큰 가격이 변동하면, 풀 내 자산의 비율이 바뀌며, 토큰 가격이 크게 바뀌어 가격 범위를 벗어나는 경우에는 **페어 토큰 중 하나의 토큰만 보유하게 됩니다.** 또한, 예치한 자산이 거래에 사용되지 못하므로 **수수료 수익과 보상 토큰을 받을 수 없습니다**.

예를 들어, 가격 범위가 최소 1 KLAY = 1 USDT \~ 최대 1 KLAY = 2 USDT인 KLAY-USDT 집중화 풀의 경우, KLAY 가격이 1 KLAY = 3 USDT로 올랐을 때, 유동성 풀의 모든 자산은 USDT만 보유하게 됩니다.&#x20;

<br>

## 마이그레이션

예치자가 선택한 가격 범위 내에서 거래가 발생하지 않으면, 예치자는 거래 수수료 수익 및 추가 보상(KSP, 토큰 에어드랍 등)을 더이상 획득할 수 없는 비활성 상태가 됩니다. 이 경우, 예치자는 기존 가격 범위에서 자산을 직접 출금한 후 다시 예치해야 합니다.

KLAYswap의 집중화 페어 예치는 예치중인 자산을 다른 가격 범위로 이동하고자 하는 경우, 한 번의 트랜잭션만으로 마이그레이션할 수 있도록 원스탑 마이그레이션을 지원합니다. 상세 절차는 자산 출금 – 새로운 가격 범위에 예치로 이루어지며, 예치자는 유동성을 공급한 집중화 풀의 상세 페이지에서 마이그레이션할 수 있습니다.&#x20;

<figure><img src="https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/RY3iql5ELuSUPVX9ns1M/V3_docs_15.png" alt=""><figcaption></figcaption></figure>

* 경우1 비활성 풀: 토큰 가격이 Change2 상태로 변동하는 경우, 유동성 풀 A 안에서는 더이상 거래가 발생하지 않아, 풀A는 비활성화 상태가 됩니다.
* 경우2 유의 풀: 토큰 가격이 Change1 상태로 변동하는 경우, 풀 A에서 거래는 발생하고 있지만, 가격 범위를 벗어나 비활성 상태로 변경될 가능성이 있습니다.

▶ 두 경우 모두 마이그레이션을 통해 안정적인 가격 범위로 재예치할 수 있으며, 예치한 후에는 계속해서 수수료 수익과 보상을 얻을 수 있습니다.

더 자세한 내용은 아래의 V3 to V3 마이그레이션 마이그레이션 가이드와 정책을 참고하여 주시기 바랍니다.

{% content-ref url="/pages/VOKWFRnDUhzkrGnSKzUz" %}
[V3 to V3 마이그레이션 가이드](/product/v3-pool-concentrated-liquidity-pool/v3-to-v3/v3-to-v3)
{% endcontent-ref %}

{% content-ref url="/pages/WsacrOU2an7ceUAhIgwE" %}
[V3 to V3 마이그레이션 상세 정책](/product/v3-pool-concentrated-liquidity-pool/v3-to-v3/v3-to-v3-1)
{% endcontent-ref %}


# V3 to V3 마이그레이션 가이드

1\. 상단의 **\[예치]** 메뉴의 **\[집중화 풀(V3) 페어 예치]** 를 클릭합니다. **\[내 예치 목록]**&#xC744; 클릭해, 마이그레이션할 풀의 **\[관리]** 버튼을 클릭합니다.

<figure><img src="https://lh6.googleusercontent.com/0Hfeh8X3iFI6RyoxWKFnbg1lglkYiTP6_VBSmBhvJ_4slGW0p_6Ja9xCFJZuFrzsjW-NAv90zBlPRdp0h2YWcouB9L-bcAzQ-lDn4uuj56LSyl3LW0vIiy37bhV6EC2-h-VVGRXgtephPoBoXKbPSlw" alt=""><figcaption></figcaption></figure>

2\. 집중화 페어 예치의 상세 풀 페이지에서 **\[마이그레이션]** 탭을 선택합니다.

<figure><img src="https://lh6.googleusercontent.com/CeXgKvkylE8NFZs0QW6Nih7b9xYStzbmmG2t2eyJsWl5K5BxpwAQtxdTV21X5MeVPNI0clnG61tupUKpd-aZu_XQZrfPc7aqvhj503f8UCyXYy7W-MEjbRB7CATfL96uOmlLacY8F40hNBXEp5yfwZI" alt=""><figcaption></figcaption></figure>

3\. 마이그레이션을 진행할 가격 범위를 설정합니다. 가격 범위는 아래 3가지 방법으로 조정할 수 있습니다.&#x20;

① 그래프에서 “최저 가격 막대”와 “최고 가격 막대”를 좌우로 드래그합니다.

② 하단 가격 범위 설정에서 “최저 가격”과 “최고 가격”을 직접 입력합니다.

③ 하단 가격 범위 설정에서 \[＋] 버튼 또는 \[－]버튼을 클릭합니다.

<figure><img src="https://lh6.googleusercontent.com/AhsgwvNMxESzd3eHHVMsFsS_H0qVrjqhS6nLqKkW3I7PnL66-8JFmXx43IE9kvaL5mpeDUSfGck3JK1Z-VV1KMDtxKdEYGEorpW25AhNlOVevwQ7ZUAoF0Ht3rgKo7q3w20uhX-64lxxOKsSnIlxchM" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Tips**

&#x20;**Spot, Wide, Full range** 3가지 가격 범위 중 1개를 선택해 빠르고 편리하게 예치할 수 있습니다.
{% endhint %}

{% hint style="warning" %}
**Notes**

비활성 가격 범위에 예치하는 경우, 일반적으로 보상이 분배되지 않으며, 페어 중 한쪽 토큰으로만 예치할 수 있습니다.
{% endhint %}

4\. **“예상 내역”** 영역에서 예치 범위, 교환 비율, 지분율, 데일리 보상 등의 예상 정보를 확인한 후, **\[Migration]** 버튼을 클릭합니다.

<figure><img src="https://lh4.googleusercontent.com/EiRIlzYxzBuZVtYbw0Svrmo3JVtTzQ05WvChJd0_c1xCccMfPmEH93VqeKOpeKSPsLT9yZYjgOZyW8hWmHAOys3Q1_h3YR6zwb0bbMXsjP35L-7o6F1sF_LQviv-e7Dhk4TOjh9aVr9E0ONcCB7kk70" alt=""><figcaption></figcaption></figure>

* **표시되는 정보는 모두 실시간 예상 정보로, 실제 예치 과정에서 차이가 발생할 수 있습니다.** 그러므로 \
  예치 과정에서 발생할 수 있는 변동 사항에 대해 충분히 숙지하고 이해한 후에 예치하시기 바랍니다.

<br>

5\. **“마이그레이션 내역 확인”** 팝업에서 출금하는 자산 수량, 전환 후 예치하는 자산 수량 등 예상 정보를 확인한 후, **\[다음 단계로]** 버튼을 클릭합니다.

<figure><img src="https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/6aAZX3HydPMrubZFQwRD/image.png" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Tips**

현재 예치중인 가격 범위와 동일한 가격 범위로는 마이그레이션할 수 없습니다.
{% endhint %}

6\. **“트랜잭션 요청”** 팝업에서 KLAYswap V3 LP NFT에 대한 approve 트랜잭션을 승인한 후, 지갑에서 **\[Confirm]** 버튼을 눌러주세요.

<figure><img src="https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/IgpinRI3lXza5ZxVSUMi/image.png" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Tips**

NFT는 예치한 자산에 대한 소유권을 의미하므로, 사용자가 자산을 예치하는 기간 동안 해당 풀에서 거래 수수료 수익과 보상 토큰을 받을 수 있습니다. 집중화 풀에서 자산을 완전히 출금하거나 마이그레이션할 때에는, 더이상 풀의 해당 가격 범위에 유동성을 제공하지 않게 되므로 자동으로 NFT를 반환합니다.
{% endhint %}

7\. **“트랜잭션 요청”**&#xC5D0;서 진행할 집중화 풀 예치에 대한 예상 정보를 확인한 후, **\[예치하기]** 버튼을 클릭합니다. 최종적으로 정보를 확인하였다면, 지갑에서 **\[Confirm]** 버튼을 눌러주세요.

<figure><img src="https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/mHHbmtyKvhsxNVxGtgGu/image.png" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
&#x20;**Tips**

마이그레이션 또는 출금으로 인해 밸런스 변동이 생긴 경우, 거래 수수료와 KSP 보상을 지갑으로 자동으로 수령합니다.
{% endhint %}

<br>


# V3 to V3 마이그레이션 상세 정책

<figure><img src="https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/3ZidudCTA9Wu83IDqv1m/V3_docs_14.png" alt=""><figcaption></figcaption></figure>

1\) KLAYswap이 제공하는마이그레이션 기능 사용 시 일반적으로 **Approve(자산 승인) – 기존 가격 범위에서 자산 출금 – 자산 스왑 – 새로운 가격 범위로 자산 예치** 단계를 거칩니다. <br>

2\) 예치한 자산을 출금하기 위해서는 예치 증표에 해당하는 LP NFT 자산을 지갑에 보유하고 있어야 하며, 해당 NFT 자산에 대한 승인 트랜잭션을 완료해야 합니다. 트랜잭션 실행 시 클레이튼 체인 상에서 수수료가 발생합니다. LP NFT 자산 이동 권한은 지갑(키) 소유자에게 있으므로, 만약 해당 자산을 다른 지갑으로 전송하는 경우 예치된 자산 출금이 불가능합니다.&#x20;

3\) 자산 출금 과정에서 기존 가격 범위에서 예치 시점과 출금 시점의 가격과의 차이로 인해 자산 손실의 발생할 수 있습니다.<br>

4\) 출금 시점의 자산의 구성 비율 및 가치 변화가 발생할 수 있으며([<mark style="color:blue;">집중화 페어 예치 상세 정책</mark> ](https://docs.klayswap.com/v/kr/product/v3/v3/v3-1#undefined)참고), 출금 시 밸런스 변동으로 인해 해당 시점까지 분배된 모든 보상(거래 수수료 수익, KSP, 에어드랍 토큰 등)은 자동으로 지갑에 수령 됩니다. <br>

5\) 출금한 자산은 스마트 컨트랙트가 자동으로 사용자가 새롭게 예치하고자 하는 가격 범위의 풀 교환 비율에 따라 최적의 비율로 자산을 스왑해 예치합니다. 스왑이 필요한 경우 스왑 경로는 V2, V3풀을 활용하여 진행하며, 거래 수수료가 발생합니다. 거래 수수료는 풀 별 거래 수수료율의 적용을 받습니다.

6\) 스왑 시 발생하는 수수료는 제외한 후 페어 예치를 진행하며, 스왑 시 거래 규모(수량)가 클수록 풀의 토큰간 교환비율에 영향력을 주어 현재 가격과 교환 시 적용받는 가격에 차이(Price impact)가 발생할 수 있습니다. 적은 수량으로 여러 번을 실행하면 영향력을 줄일 수 있습니다.

7\) 거래 규모에 따라 교환 시 적용 받는 가격에 차이(Price impact)가 발생하여 예상되는 교환 비율과 완전히 정확하게 예치가 진행되지 않을 수 있습니다. 이러한 경우를 방지하기 하기 위해 스왑 시 설정한 거래 범위(Slippage) 안에서만 예치를 진행하며, 해당 범위를 초과하는 경우 예치 트랜잭션이  진행되지 않을 수 있습니다.(Revert)  하단의 예상내역 영역에서 관련 정보를 모두 확인 후 예치를 진행해주세요.

8\) V3 풀에 예치하는 과정에서 소량의 자산(wei)이 남을 수 있으며, 예치 후 남은 자산은 자동으로 사용자의 지갑으로 반환됩니다.&#x20;

<br>


# V3 풀  유동성 회수

&#x20; V3 풀에서유동성 회수하기가이드와 정책을 참고하여 주시기 바랍니다.


# V3 풀 회수 가이드

1\. V3 풀 목록 페이지에서 회수하려는 풀의 **\[관리]** 버튼을 클릭합니다.

<figure><img src="https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/7X1WeHsXkZ3QiAwvixjf/image.png" alt=""><figcaption></figcaption></figure>

2\. 집중화 풀 상세 페이지에서 **\[Withdraw]** 탭을 클릭한 후, 버튼을 클릭하거나 또는 슬라이더를 드래그해 출금할 수량(%)을 선택합니다.&#x20;

<figure><img src="https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/OFr8V5z1e9qmUxtxkDpB/image.png" alt=""><figcaption></figcaption></figure>

<br>

3\. **“You Get”**&#xC5D0;서 출금 시 수령하는 토큰과 보상(거래 수수료 보상, KSP, 에어드랍) 정보를 확인한 후, **\[Withdraw]** 버튼을 클릭합니다.&#x20;

<br>

4\. **“트랜잭션 요청”** 팝업에서 예상 정보를 확인한 후, **\[확인]** 버튼을 클릭합니다. 최종적으로 정보를 확인하였다면, 지갑에서 **\[Confirm]** 버튼을 눌러주세요.

<figure><img src="https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/2D9p0BXdAkn6WCDTaAhf/image.png" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Tips**

* 출금으로 인해 밸런스가 변동이 생기는 경우, 거래 수수료와 KSP 보상을 지갑으로 자동으로 수령합니다.
* 비활성 풀에는 한 종류의 자산만 존재하므로, 출금 시 페어 자산 중 한 종류의 자산만 출금합니다.
  {% endhint %}


# V3 풀 유동성 회수 상세 정책

1\) 공급한 자산을 회수하기 위해서는 공급 증표에 해당하는 LP NFT 자산을 지갑에 보유하고 있어야 하며, 해당 NFT 자산에 대한 승인 트랜잭션을 완료해야 합니다. 트랜잭션 실행 시 클레이튼 체인 상에서 수수료가 발생합니다. LP NFT 자산 이동 권한은 지갑(키) 소유자에게 있으므로, 만약 해당 자산을 다른 지갑으로 전송하는 경우 예치된 자산 회수가 불가능합니다.&#x20;

2\) 자산 회수 과정에서 기존 가격 범위에서 공급 시점과 회수 시점의 가격과의 차이로 인해 자산 손실의 발생할 수 있습니다.<br>

3\) 회수 시점의 자산의 구성 비율 및 가치 변화가 발생할 수 있으며(하단 V3 풀 상세 정책[ ](https://docs.klayswap.com/v/kr/product/v3/v3/v3-1#undefined)참고), 회수 시 밸런스 변동으로 인해 해당 시점까지 분배된 모든 보상(풀 이용수수료 보상, KSP, 에어드랍 토큰 등)은 자동으로 지갑에 수령 됩니다.&#x20;

{% content-ref url="/pages/7XQp0pYnPRhdRIH6Ilj3" %}
[V3 풀 유동성 공급 상세 정책](/product/v3-pool-concentrated-liquidity-pool/v3/v3-1)
{% endcontent-ref %}

4\) 회수 시 설정한 거래 범위(Slippage) 안에서만 회수를 진행하며, 해당 범위를 초과하는 경우 회수 트랜잭션이 진행되지 않을 수 있습니다(Revert). 하단의 예상내역 영역에서 관련 정보를 모두 확인 후 회수를 진행해주세요.


# KSP Staking

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/Ji5jCBdTEskIu8RYuVBH/image.png)

KSP 스테이킹 참여자는 스테이킹 보상 뿐 아니라, 클레이스왑 전체 거버넌스와 관련된 풀 투표권(vKSP)을 획득합니다. 같은 수량의 KSP를 스테이킹하더라도 획득하는 풀 투표권(vKSP)은 스테이킹 기간에 따라 다를 수 있습니다. 즉, 거버넌스의 장기 참여자일수록 더 많은 투표권을 획득하며, 강력한 의사결정 권한을 확보함으로써 클레이스왑의 성장에 많은 영향력을 행사할 수 있습니다.&#x20;

​

**1KSP  스테이킹 기간에 따른 투표권 획득**&#x20;

|                    |   4개월  |   8개월  |   12개  | **12개월+a** |
| :----------------: | :----: | :----: | :----: | ---------- |
|        적용 배수       |   1배수  |   2배   |   4배수  | **8배**     |
| 1 KSP 스테이킹 시 획득 투표 | 1 vKSP | 2 vKSP | 4 vKSP | **8 vKSP** |

### &#x20;

### KSP 인플레이션 보상&#x20;

KSP 스테이킹 참여자는 인플레이션으로 유통되는 KSP 보상과 풀 투표권(vKSP)을 획득할 수 있습니다. 스테이킹 참여자 대상 KSP 분배율은 거버넌스 투표를 통해 변경될 수 있습니다.

아래 링크에서 스테이킹 참여자 대상의 KSP 인플레이션 분배 비율을 확인할 수 있으며, 분배 비율은 거버넌스 투표를 통해 조정될 수 있습니다.

> [**KSP 인플레이션 분배 비율 확인하기**](https://new.klayswap.com/ko/staking?request=status)

<figure><img src="https://199555881-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FRM76CLSvWgT5g122HIcr%2Fuploads%2FqXZIemOL61wN7sHvPNZ7%2Fimage.png?alt=media&amp;token=0fea17c3-95be-437d-b836-e931ba436554" alt=""><figcaption></figcaption></figure>

### 거래 수수료 보상&#x20;

스테이킹 참여자는 클레이스왑에서 발생하는 거래수수료 보상의 10%를 자동으로 분배받습니다.


# Staking 정책

## 스테이킹 정책

스테이킹 참여자는 아래 정책에 따라 스테이킹에 참여할 수 있습니다.&#x20;

* KSP 스테이킹은 **KSP를 타인에게 맡겨 보관하거나 위탁하는 행위가 아니라 이용자 스스로가 정해진 조건(스테이킹 기간 등)에 따라 대상 KSP가 송금, 거래되지 않도록 서명하여 락업**하는 것입니다. 따라서 이러한 조건을 위반하는 **중도취소, 출금, 출금지갑 변경 등은 불가능**합니다.
* 계약한 **스테이킹 종료일 이전에 중도 스테이킹 취소는 불가능** 합니다.&#x20;
* 스테이킹은 건 별이 아닌, 총 KSP 수량으로 스테이킹 가능하며, KSP 스테이킹 시 컨트랙트 승인 절차를 완료해야 합니다. ( 최초 1회 )&#x20;
* 투표권(vKSP)은 KSP 수량과 스테이킹 기간(4/8/12/12+a개월)에 따라 매 스테이킹 시점마다 획득할 수 있습니다.&#x20;
* KSP 스테이킹 후 발행되는 투표권은 다음과 같이 산출됩니다.&#x20;
* 4개월, 8개월, 12개월, 12개월+a 스테이킹하면 각각 1배, 2배, 4배, 8배의 투표권을 획득합니다. **추가 스테이킹 시 선택한 기간이 이전 선택한 기간보다 짧은 경우, 각 건 별로 투표권 획득 배수를 적용 받습니다.** \
  \
  예시1) 100KSP씩 4개월-12개월 순차적으로 스테이킹 한 경우, 200KSP에 대한 4배가 적용되어 총 800vKSP를 획득 \
  \
  예시2) 100KSP씩 12개월-4개월 순차적으로 스테이킹 한 경우, 각각의 배수 적용으로 총 500vKSP 획득(12개월 - 400vKSP, 4개월 - 100vKSP) <br>
* 스테이킹 보상은 총 발행된 vKSP 대비 내 vKSP의 지분율에 따라 분배됩니다. (스테이킹 지분율 = 획득한 vKSP / 프로토콜 총 vKSP)&#x20;
* 4x이하의 효율로 스테이킹한 경우 \[최대로 올리기] 버튼을 통해 스테이킹 효율을 8X로 높이고 더 많은 vKSP를 획득할 수 있습니&#xB2E4;**. 8x 효율은 4x로 변경하기 전까지 정해진 종료일 없이 계속해서 vKSP 스테이킹을 진행하게 됩니다.**&#x20;
* 8x스테이킹을 진행중인 경우 \[4배로 낮추기]버튼을 클릭하여 **스테이킹 효율을 4x로 낮출 수 있으며, 해당시점으로부터 12개월 초과 후 언스테이킹 할 수 있습니다.**&#x20;
* **추가 스테이킹 시점과 선택한 스테이킹 기간에 따라 스테이킹 종료 일시는 변동되며, 스테이킹 종료일 이후 언스테이킹(출금)이 가능**합니다.\
  \
  CASE1. 기존 스테이킹 종료일시 < 추가 스테이킹 시점 +선택한 스테이킹 기간(4/8/12개월)인 경우, 스테이킹 종료일이 증가합니다.\
  \
  CASE2. 기존 스테이킹 종료일시 > 추가 스테이킹 시점 +선택한 스테이킹 기간(4/8/12개월)인 경우, 기존 일시가 최종 스테이킹 종료일입니다.<br>
* 보상으로 분배된 KSP는 자유롭게 수령할 수 있으며, 지갑에서 확인할 수 있습니다.&#x20;
* 추가 스테이킹 또는 언스테이킹으로 인해 현재 총 KSP 수량이 변동되는 경우, 해당 시점까지 분배된 KSP 보상은 자동으로 지갑으로 수령됩니다.

## 스테이킹 계약의 종료&#x20;

* **8x 효율로 스테이킹하는 경우 정해진 언스테이킹 기간 없이 계속해서 스테이킹**을 진행합니다.&#x20;
* 4x 이하의 효율로 스테이킹하는 경우 스테이킹 계약 종료 30일 전부터 언스테이킹 안내 팝업창을 확인할 수 있으며, **스테이킹 계약 종료일로부터 30일 동안 계약을 연장하거나 스테이킹한 자금을 출금**할 수 있습니다.정해진 언스테이킹 기간 내 KSP를 출금하면 발행된 투표권(vKSP)이 반환됩니다.&#x20;
* 획득한 투표권과 풀 투표 내역은 스테이킹 종료 후 대기기간 동안에도 유지됩니다.&#x20;
* 30일간의 대기 기간 동안 언스테이킹 되지 않은 경우 직전 계약 기간(4/8/12개월) 중 가장 긴 기간을 기준으로 새로운 스테이킹 계약이 자동 진행되며, 그에 상응하는 투표권(vKSP)을 획득합니다. 8x 스테이킹을 진행하다 4x로 효율을 낮춘경우 효율을 낮춘 시점으로부터 12 개월간 락업 후 언스테이킹(출금) 가능합니다. **자동 재계약 된 스테이킹은 취소가 불가능합니다.**&#x20;
* 만약 대기기간 안에 추가로 KSP 스테이킹을 진행하는 경우, 해당 시점을 기준으로 기존 스테이킹 수량 + 추가한 스테이킹 수량 총합의 스테이킹 계약이 진행됩니다.&#x20;

##


# Governance

### Governance

KLAYswap 거버넌스는 투표를 통해 거버넌스를 운영하는 합의체인 KLAYswap DAO를 통해 KSP 가치 상승과 전체 생태계 성장을 위한 체계를 구축합니다. DAO는 KSP를 스테이킹하고 투표권(vKSP)을 획득하며, 투표권 행사와 거버넌스 참여의 대가로 KSP 인플레이션 보상을 분배 받습니다. KSP 가치 상승으로 DAO는 더 큰 수익을 얻을 수 있기 때문에, DAO는 자연스럽게 KSP 가치 상승을 통한 생태계 성장이라는 기본 전제에 따라 프로토콜의 주요 사안을 결정하게 됩니다. KLAYswwap은 KSP 가치 상승과 DAO의 이익이 직결되는 거버넌스 구조를 통해 투표권(vKSP) 확보를 위한 KSP에 대한 지속적인 수요를 창출하고, KSP 스테이킹 참여의 증가를 유도합니다. 이는 KSP의 안정적인 가격 지지기반을 형성할 뿐만 아니라, 거버넌스와 DAO의 활성화에 따라 KSP의 지속적인 가치 상승이 가능한 선순환 구조를 형성하게 됩니다.

### **거버넌스 투표 등록 절차**&#x20;

<figure><img src="https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/u4n2bWwGZnv65f6pVo06/klayswap_%EA%B1%B0%EB%B2%84%EB%84%8C%EC%8A%A4%EC%9D%98%EC%A0%9C%EB%93%B1%EB%A1%9D%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4.png" alt=""><figcaption></figcaption></figure>

KLAYswap 거버넌스 투표 등록과 실행 순서는 다음과 같습니다.

**1) 투표 등록**&#x20;

클레이스왑 거버넌스에 투표를 등록하고자 하는 유저는 투표 등록 시점 기준으로 프로토콜에 총 발행된 vKSP의 0.1%이상을 보유해야합니다. 투표 등록자는 제안 유형 중 한 개를 선택하여 등록할 수 있으며, 등록 비용은 500 KSP입니다. 등록 비용으로 사용된 KSP는 소각됩니다.

**2) 투표 기간**

투표는 총 3일 동안 진행됩니다. 투표가 시작된 시점에 전체 지갑에 대해 스냅샷 처리하여, 각 지갑별로 투표에 참여할 수 있는 vKSP 수량을 확정합니다. 투표가 시작된 이후 추가로 KSP를 스테이킹 하여 획득한 투표권은 행사할 수 없습니다.한 번 투표된 내역에 대해서는 변경이 불가합니다.

**3) 1차 가결**

투표가 완료된 시점에 해당 투표가 최소 참여 기준과 최종 가결 기준을 만족했다면 1차 가결에 성공한 것으로 간주하여 다음 단계로 넘어가고, 조건을 만족하지 못했다면 해당 투표는 취소 처리됩니다.

(1) 참여 가능 투표권

* 투표가 시작된 시점의 스냅샷 기준으로 프로토콜에 총 발행된 투표권 수량으로, 투표에 참여할 수 있는 투표권 수의 총합의 나타냅니다.

(2) 최소 참여 기준

* 참여 가능 투표권 수량 기준, 최소 20%이상 참여해야 유효한 투표로 인정

(3) 최종 가결 기준

* 총 투표자가 최소 참여 기준 이상이면서, 총 투표자의 과반수 이상 찬성하는 경우

**4) Timelock**&#x20;

1차 가결된 투표는 일정 기간동안 Timelock 상태로 유지됩니다. Timelock 기간 동안 해당 트랜잭션 실행으로 인한 문제가 없는지 최종 점검을 진행합니다.

**5) 최종 반영**

Timelock이 종료되면 트랜잭션이 실행되고 프로토콜 코드가 변경되며 투표가 최종 반영됩니다.

### 투표 생성 및 상세 절차

**1) 투표 등록 안내**

* 투표를 등록하기 위해서는 투표 제안서를 작성해야 합니다.
* 투표를 등록하려는 유저는 지갑에 투표 등록 시점 기준, 전체 프로토콜 vKSP의 0.1% 이상을 지갑에 보유해야 하며, 투표 등록에는 500KSP가 사용됩니다(제출된 500KSP는 소각됩니다).

**2) 투표 참여 안내**

* 투표에 참여하기 위해서는 투표가 시작되기 전 vKSP를 보유하고 있어야 합니다.
* 등록된 투표가 시작되는 시점에 스냅샷을 통해 vKSP 수량이 파악됩니다. 따라서 투표가 시작된 이후 추가로 KSP를 스테이킹하여 획득한 투표권은 반영되지 않습니다.
* KLAYswap 거버넌스 페이지 메인상의 각 투표 상세페이지에 들어가면 행사할 수 있는투표권( vKSP)수량을 확인할 수 있습니다. 투표 상세페이지에서 찬성 혹은 반대 버튼을 선택한 뒤, 트랜잭션 팝업창에서 \[투표하기] 버튼을 클릭하면 투표가 완료됩니다. 투표가 완료되면 변경할 수 없습니다.


# Governance 투표 정책

* 거버넌스 오픈 시점에는 일반 자산의 거버넌스 통과/철회 투표를 진행할 수 있습니다. 초기 안정화 기간 이후 모든 사안에 대한 변경을 투표할 수 있도록 순차적으로 업데이트 할 예정입니다.
* 거버넌스의 모든 시간은 (KST) 기준입니다.
* 투표가 거버넌스에 등록된 후에는 변경하거나 취소할 수 없습니다.
* 하나의 지갑 주소로 동시에 여러개의 투표를 등록할 수 없습니다. 이미 등록된 투표가 있는 경우 투표 종료 후 다른 투표를 등록할 수 있습니다.
* 투표를 등록하고자 하는 유저는 지갑에 투표 등록 시점 기준 전체 프로토콜 vKSP의 0.1% 이상을 지갑에 보유해야 합니다.
* 투표 등록 시 비용(500 KSP)이 발생하며, 비용은 전액 소각 됩니다. 등록 비용은 거버넌스 투표를 통해 변경될 수 있습니다.
* 투표의 본문 내용은 공백 포함 300자 이상 작성해야 하며, 영어로만 작성할 수 있습니다.
* 각 투표에 참여할 수 있는 투표권 (vKSP)은 각 투표 시작 시점에 스냅샷을 통해 확정됩니다. 거버넌스 메인 페이지에 나와 있는 “보유 투표권”은 실시간 vKSP 수량으로 각 투표에 참여할 수 있는 vKSP 수량과 다를 수 있습니다.
* 투표 시작 이후 스테이킹을 통해 더 많은 vKSP를 획득하거나 언스테이킹으로 vKSP수가 줄었어도 해당 투표에 투표할 수 있는 vKSP수는 투표 시작 시점과 동일합니다.
* 투표의 가결 기준은 다음과 같습니다. \
  \- 총 투표자가 최소 참여 기준 이상이면서, 총 투표자의 과반수 이상 찬성하는 경우, 상세 기준은 거버넌스 투표 등록\_1차 가결 항목 참고 부탁드립니다.

{% content-ref url="/pages/JLFrhoFEWlguzV4Yze2C" %}
[Governance](/product/governance)
{% endcontent-ref %}

* 투표의 부결 기준은 다음과 같습니다. \
  \- 투표기간(3일) 종료까지 최소 참여 투표권 수량 미만으로 참여한 경우 \
  \- 투표 기간 종료 시점에 총 투표자의 과반수가 찬성하지 않은 경우


# Pool Airdrop

&#x20;클레이스왑의 에어드랍 기능을 활용하면, 클레이튼 체인의 다양한 디앱(Dapp) 프로젝트도 자유롭게 풀에 프로젝트 토큰을 분배할 수 있습니다. \
&#x20;만약 유동성 공급자가 에어드랍이 설정된 풀에 유동성을 공급하면, 내 LP Token 지분을 기준으로 \
매 블럭마다 설정된 에어드랍 토큰을 분배 받습니다. 에어드랍은 특정 풀에서 다중 설정도 가능하여 여러 개의 토큰을 모두 보상 받을 수도 있습니다.&#x20;

&#x20;그동안 클레이스왑은 높은 보상 APR & APY 획득 기회를 제공함으로써 다양한 유저의 적극적인 생태계 참여를 이끌어냈지만, 그 보상이 KSP와 거래수수료에 제한된다는 점, 동시에 클레이스왑 프로토콜에서 참여자로만 보상이 전달되는 일방향적 분배 구조라는 점 등 아쉬운 점이 존재했습니다.

&#x20;이에 클레이스왑은 추가적인 토큰 에어드랍 모델을 통해 제한된 환경을 벗어나, 단순히 \[클레이스왑 ㅡ 참여자]가 아닌, \[디앱(Dapp) 프로젝트 ㅡ 클레이스왑 ㅡ 참여자] 모두가 연결되는 유기적인 시스템으로 변화함으로써 클레이튼 생태계를 이코노미적으로 연결하는 탈중앙화 유동성 연결점까지 목표로 하고자 합니다.&#x20;

## 토큰 에어드랍이 제공하는 기회&#x20;

### **안정적인 유동성 공급 환경**

기존의  KSP,  거래수수료 보상 뿐 아니라 새로운 토큰 에어드랍이라는 추가적인 리워드 제공을 통해 , 유동성 공급 시 더 많은 가치를 얻을 수 있게 됩니다. 이는 초기 유동성 공급 진입 시 토큰 가격 변화로 인해 발생 가능한 위험을 상쇄할 수 있으며, 이로써 유저는 이전보다 더욱 안정적인 환경의 클레이스왑에 유동성을 공급할 수 있습니다.

###

### &#x20;**초기 디앱 (Dapp) 프로젝트의 초기 성장 견인**&#x20;

\
토큰 에어드랍 모델은 디앱 프로젝트가 기존에 가지고 있는 고유한 토큰 이코노미 모델의 확장을 가져올 수 있음은 물론 프로젝트 본연의 내재 가치를 유지할 수 있는 강력한 인센티브의 역할을 할 수 있습니다. \
특히 이제 막 클레이튼 생태계에서 성장하고자 하는 디앱 프로젝트들은 그동안 초기 유동성 부족으로 높은 가격 변동성에 큰 영향을 받을 수밖에 없었지만, 추가적인 보상이 이루어지는 클레이스왑의 AMM 환경에서는 더 나은 유동성의 질과 양을 상호 연관시킬 수 있습니다. 따라서, 클레이스왑을 활용하는 프로젝트들은 단기적인 가격 변동성을 방어하면서 프로젝트 본연의 가치 상승에 집중할 수 있습니다.

요약하자면, 이번에 새롭게 추가되는 기능은 유동성 제공자와 디앱들을 포함하여 전반적인 참여자들 간의 유기적인 연결이 추가적인 가치 제공으로 이루어질 수 있는 발전된 인센티브 환경의 구축을 의미합니다.<br>

Airdrop Operator 등록은 Developer - Airdrop - Airdrop Operator 권한 획득 문서를 참고하세요.

{% content-ref url="/pages/-MiZPXE7HtMyEWZhzu2-" %}
[Airdrop Operator 권한 획득](/developers/airdrop/airdrop-operator)
{% endcontent-ref %}


# APR & APY


# TVL

KLAYswap 내의 예치된 모든 자산( 유동성 풀 + Staking KSP ) 의 USD 가치를 나타냅니다.

#### USD 달러 표기화 방식법

KLAYswap 내 Token의 USD 달러 표기는 해당 토큰의 KLAYswap 내 KLAY 교환비율을 계산한 뒤, 바이낸스의 KLAY/USDT 마켓 가격을 기준으로 산출됩니다.

예시) 67976802 Block,  KLAY = 1.87$ 기준

|       | Pool                                                                            | Price                                     |
| ----- | ------------------------------------------------------------------------------- | ----------------------------------------- |
| 1KSP  | 40,450,000 **KLAY /** 2,525,000 **KSP**                                         | 40450000 / 2525000 \* 1 \* 1.87 = 29.96 $ |
| 1KORC | <p>18,490,000 <strong>KLAY /</strong> 33,077,000 <strong>kORC</strong> <br></p> | 18490000 / 33077000 \* 1 \* 1.87 = 1.05 $ |


# Pool

### 단일 풀 보상

단일 풀 유동성 공급자는 각 풀에 해당하는 토큰을 공급하고 유동성 지분에 대한 증거로 iToken을 받게 됩니다. 공급한 자산을 출금하는경우, iToken을 다시 반환하고, 해당시점의 Token : iToken 교환 비율에 따라 누적된 공급 APY가 포함된 토큰을 수령합니다. iToken 보유자는 공급 보상 뿐아니라러 KSP 보상을 받게 됩니다.

* KSP 보상 : 유동성을 공급할 경우 KSP 인플레이의 일정량을 유동성 공급 기간 동안 보상 받게 됩니다.
* 공급 보상 : 공급한 자산은 활용 유동성 풀을 위한 재원으로 활용되며, 활용자가 자산 활용 시 지불한 비용은 다시 단일 풀 유동성 공급자에게 분배됩니다. 분배된 수익은 내 공급자산 수량에 자동으로 포함됩니다.

### **KSP 보상 APR & APY**

* iToken 보유자는 1 iToken의 KSP 연간 보상 수익률을 아래와 같이 추정할 수 있습니다.&#x20;
* APR은 iToken가격과 KSP가격에 따라 실시간으로 변동됩니다.&#x20;

$$
APR = SP DailyKSP 분배수량 \* KSP가격 / 총 SP규모 \* 365 \* 100
$$

* **SP 공급자 KSP 보상 APY = ((1+ APR / 365) ^ 365 -1) \* 100**
* 일일 분배 KSP = 86400
* SP DailyKSP 분배수량 = (일일 분배 KSP) \* SP KSP 분배율(5%) \* SP 분배율
* 예시

  * KLAY SP의 APR 구하는 과정&#x20;
  * 총LP규모 =  40,000,000 $&#x20;
  * DailKSP = 1728 =  86400(일일 분배 KSP) \* 0.05(SP KSP 분배율) \* 0.4(KLAY SP 분배율)
  * 1KSP = 29.20$
  * APR = 1728 \* 29.2 / 40000000 \* 365 \* 100 = 46.04%

### SP 공급자 예치수익률 APR

$$
APR =  borrowingRate \* Utiliztion \*(1- reserveFactor)
$$

### 풀 활성화 비율

$$
Utilization = TotalBorrow / TotalDeposit
$$

### 자산 활용 비 율

$$
BorrowingRate = Borrowing Rate Model ( Utilization )
$$

### Borrowing Rate Model

<table data-header-hidden><thead><tr><th width="150"></th><th width="150"></th><th></th></tr></thead><tbody><tr><td>Utilization Range</td><td>Borrowing Rate Range</td><td>Logic</td></tr><tr><td>0% ~ 60%</td><td>0% ~ 20%</td><td>Borrowing Rate = Utilization / 3 </td></tr><tr><td>60% ~ 90%</td><td>20%</td><td>Borrowing Rate = 0.2 </td></tr><tr><td>90% ~ 100%</td><td>20% ~ 100%</td><td>Borrowing Rate = Utilization * 8 - 7 </td></tr></tbody></table>

### V2 풀 보상

유동성 공급자는 풀 유동성을 제공할 경우 유동성 지분에 대한 증거로 LP(Liquidity Pool) Token을 받게 됩니다. 공급한 자산을 출금하는 경우, LP Token을 반환하고 그에 상응하는 자산을 수령할 수 있습니다.

유동성 공급자는 유동성을 제공하고 KSP, 풀 이용 수수료 보상, Airdrop 보상을 받게 됩니다.

* KSP 보상 : KSP 보상 풀에 유동성을 공급할 경우 KSP 일일채굴량의 일정량을 유동성 공급 기간 동안 보상 받게 됩니다.
* 풀 이용 수수료 보상 : 유동성 풀에 자산을 공급할 경우, 풀 이용 수수료의 80% 중 보유 LP 지분율에 따라 보상 받게 됩니다.
* Airdrop 보상 : Airdrop 대상 풀이라면 유동성 공급 기간 동안 Token을 분배 받게 됩니다.

### **LP 공급자 KSP 보상 APR & APY**

* LP 토큰 보유자는 1LP의 KSP 연간 보상 수익률을 아래와 같이 추정할 수 있습니다.&#x20;
* APR은 LP가격과 KSP가격에 따라 실시간으로 변동됩니다.&#x20;

$$
APR = LP DailyKSP 분배수량 \* KSP가격 / 총 LP규모 \* 365 \* 100
$$

* **LP 공급자 KSP 보상 APY = ((1+ APR / 365) ^ 365 -1) \* 100**
* 일일 분배 KSP = 86400
* LP DailyKSP 분배수량 = (일일 분배 KSP ) \* LP 공급자 KSP 분배율 \* 투표율
* 예시

  * 2021년 8월 24일 기준  KLAY/KUSDT Pair LP의 APR 구하는 과정&#x20;
  * 총LP규모 =  45,589,138 $&#x20;
  * DailKSP = 4427 =  86400(일일 분배 KSP) \* 0.6(LP 공급자 KSP 분배율) \* 0.0854(투표율)
  * 1KSP = 29.20$
  * APR = 4427 \* 29.2 / 45589138 \* 365 \* 100 = 103.5%

&#x20;

### LP 공급자 거래 수수료 보상 APR

$$
APR = TradeFee(24H) *0.5 /총LP규모*365\*100
$$

* 예시
  * 2021년 8월 24일 기준  KLAY/KUSDT Pair LP의 APR 구하는 과정
  * 총LP규모 = 45,589,138 $
  * TradeFee(24H) = 33,677 $
  * APR = 33677 \* 0.5 / 45589138 \* 365 \* 100 = 13.5 %

### LP 공급자 Airdrop 보상&#x20;

$$
APR = Daily Airdrop Token \* TokenPrice / 총LP규모*365*100
$$

* 특정 LP의 DailyAirdropToken 조회하는 과정&#x20;
  * Treasury Contract의 `distributionEntries` 함수로 해당 LP에 등록된 Distribution Contract Address 조회 ( 하나의 LP에는 여러개의 Distribution Contract가 등록될 수 있습니다. )
  * 조회된 address로 Distribution Contract들의 `blockAmount` 와 `token` 함수로 DailyAirdropToken을 조회할 수 있습니다. ( `distributedAmount`, `estimateEndBlock`, `totalAmount` 함수를 통해 조기마감, 종료 여부를 확인할 수 있습니다. )
* 예시
  * 임의의 토큰X, LPX의 APR 구하는 과정
  * 총LPX규모 = 45,500,000 $
  * 토큰X 가격 = 2$
  * 블럭별 토큰X 분배갯수 = 2
  * DailyAirdropToken = 10 \* 86400 = 864000
  * APR = 2 \* 86400 \* 2 / 45500000 \* 365 \* 100 = 277 %


# Staking

KSP 보유자는 스테이킹을 통하여 KSP 보상과 투표권을 얻게 됩니다. 투표권 수량은 KSP 스테이킹 수량과 기간에 따라 정해지게 됩니다.

**스테이킹 기간에 따라 획득하는 vKSP 수량**  &#x20;

<table data-header-hidden><thead><tr><th width="177"></th><th width="150">     4개월</th><th width="150">     8개월</th><th>   12개월</th></tr></thead><tbody><tr><td>4개</td><td>     8개월</td><td>     12개월</td><td>   12개월+α</td></tr><tr><td>1vKSP</td><td>2vKSP</td><td>4vKSP</td><td>8vKSP</td></tr></tbody></table>

### Staking KSP 보상 APR & APY

스테이킹 참여자는 일일 KSP 인플레이션의 일정량을 vKSP 지분율에 따라 보상 받습니다.

#### APR = DailyKSP \* Staking 분배율 \* KSP가격\*(투표한vKSP/총 vKSP)/(스테이킹KSP\*KSP가격)\**100\**&#x33;65

* **Staking KSP보상 APY = ((1+APR / 365) ^ 365 - 1) \* 100**
* 스테이킹대상 DailyKSP 분배수량 = (일일 분배 KSP ) \* Staker KSP 분배율
* 예시
  * 83642957 Block 기준 총 vKSP(146,457,051)
  * 1KSP 12+α 개월 스테이킹시 APR \
    \= (864000\*0.85\*0.4)\*(8/146457051)\*5.39/(1\*5.39)\*100\*365 \
    \= 58.57%
  * 1KSP 12+α 개월 스테이킹시 일주일간 KSP 보상 = 약 0.0016 개

**프로토콜 이용에 따른 풀 수수료 보상**

스테이킹 참여자는 스테이킹 APR & APY 뿐만 아니라, 추가 혜택으로 풀 이용 수수료 보상을 획득합니다. 클레이스왑은 프로토콜에서 발생한 풀 이용 수수료의 10%를 KSP로 바이백하여 스테이킹 참여자에게 분배합니다.


# Contract

### new KLAYswap 프로토콜 문서에 오신 것을 환영합니다.

이 페이지는 new KLAYswap 프로토콜의 컨트랙트 기술 문서를 포함하고 있습니다.

컨트랙트 코드는 아래 Github에서 확인할 수 있습니다.

{% embed url="<https://github.com/KlaySwap/klayswap-v2-smart-contracts>" %}

{% embed url="<https://github.com/KlaySwap/klayswap-v3-smart-contracts>" %}


# V2Factory

The Factory smart contract oversees the full functionality of token pair registration and transactions in KLAYswap. It is also a token contract for KLAYswap's KSP governance token that complies with the KIP7 standard, and a smart contract that implements all functions related to KSP mining.

## Code

Github Link: (Will be updated after official launch)

## Address

* Cypress : [0xb2ad0f20d54177916721c6b6466bce1eb1a56eef](https://klaytnscope.com/account/0xB2AD0f20D54177916721c6B6466bce1eB1a56eef?tabId=txList)

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

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

## Events

**CreatePool**

```solidity
event CreatePool(
    address token0,
    uint256 amount0,
    address token1,
    uint256 amount1,
    uint256 fee,
    address exchange,
    uint256 exid
);
```

* Event to create new liquidity pool&#x20;
* parameters&#x20;
  * `token0` : token0 address in pair
  * `amount0` : token0 amount in pool
  * `token1` : token1 address in pair
  * `amount1` : token1 amount in pool&#x20;
  * `fee` : pool fee rate exchange :&#x20;
  * `exchange` : contract address of this pool&#x20;
  * `exid` : exchange id

{% endtab %}

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

## Read-Only Functions

#### owner

* Governance Contract Address

#### pools

* List of liquidity pool pairings&#x20;
* Each item saves the smart contract address of the liquidity pool

#### poolExist

* Returns if the contract for the given liquidiy pool pair exists

#### tokenToPool

* When the addresses of tokenA and tokenB are inputted, this returns the contract address of the corresponding pairing
* Returns the  same contract address regardless of the order of the liquidity pool pairing tokens:

  tokenToPool\[tokenA]\[tokenB] == tokenToPool\[tokenB]\[tokenA]

#### createFee

* The amount of KSP that must be paired to create a new liquidity pool pair
* deprecated

#### getPoolCount

```solidity
function getPoolCount() public view returns (uint)
```

* Returns the current number of registered liquidity pools.&#x20;

#### getPoolAddress

```solidity
function getPoolAddress(uint idx) public view returns (address)
```

* Returns the liquidity pair contract address of the pair's index.
  {% endtab %}

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

## State-Changing Functions

#### createKlayPool

```solidity
function createETHPool(address token, uint256 amount, uint256 fee) public payable
```

* A method called to add a liquidity pair with one side as KLAY
* Token for when the KLAY-KIP7 pair to be registered has never been registered before
* Parameters
  * `token` : KIP7 token address to add liquidity
  * `amount` : the amount of tokens (KIP7) to be provided for the initial liquidity
  * `fee` : Sets the initial fee value for liquidity pairs
    * A value between 30 and 100
    * Meaning: 30 -> 0.3%, 100 -> 1%
  * `msg.value` : KLAY quantity to initially supply liquidity&#x20;
    * Delivers the transaction value without specifying otherwise

#### createTokenPool

```solidity
function createTokenPool(address token0, uint256 amount0, address token1, uint256 amount1, uint256 fee) public
```

* A method called to add a liquidity pair with both ERC20&#x20;
* Token for when the ERC20-ERC20 pair to be registered has never been registered before
* parameter
  * `token0` : The address of the first token
  * `amount0` : The quantity of the first token that supplies the initial liquidity
  * `token1` : The address of the second token
  * `amount1` : The quantity of the second token that supplies the initial liquidity
  * `fee` : Sets the initial fee value for liquidity pairs
    {% endtab %}
    {% endtabs %}


# V2Exchange

This is a smart contract to expand KIP7 that is created with every liquidity pair. The Factory deploys this as new pool creation is requested. Although the Factory actually stores the two tokens of a pair and swapping takes place through it, the Exchange Contract must be called for liquidity to be provided or taken.

## Code

Github Link: (Will be updated after official launch)

## Address

Contract adress after production is deployed (scope link)&#x20;

## Events, Read-Only Functions, and State-Changing Functions&#x20;

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

## Events

#### Transfer

```solidity
event Transfer(address indexed from, address indexed to, uint amount);
```

* KIP7 Standard
* Event log of Transfer/Mint/Burn

#### Approval

```solidity
event Approval(address indexed holder, address indexed spender, uint amount);
```

* KIP7 Standard
* Event log of Approvals

#### ChangeMiningRate

```solidity
event ChangeMiningRate(uint _mining);
```

* Event log of mining rate change&#x20;

#### ChangeFee

```solidity
event ChangeFee(uint _fee);
```

* Event log of trading fee rate changes

#### UpdateMiningIndex

```solidity
event UpdateMiningIndex(uint lastMined, uint miningIndex);
```

* Event log of pairs’ mining index changes
* `lastMined` : Factory.mined() value at the time index is updated
* `miningIndex` : pairs’ miningIndex value at the time

#### GiveReward

```solidity
event GiveReward(address user, uint amount, uint lastIndex, uint rewardSum);
```

* Event log of when mined KSP is claimed and distributed
* `user` :  address of the user who claimed
* `amount` :  the amount of KSP claimed
* `lastIndex` :  index result of the pair of the wallet after claiming&#x20;
* `rewardSum` :  The amount of KSP that has been accrued so far

#### ExchangePos

```solidity
event ExchangePos(address tokenA, uint amountA, address tokenB, uint amountB);
```

* Event log of POS transactions
* `tokenA` : Token address delivered by the user
* `amountA` :  the amount of tokens delivered by the user
* `tokenB` : token address received by user&#x20;
* `amountB` : the amount of tokens received by the user

#### ExchangeNeg

```solidity
event ExchangeNeg(address tokenA, uint amountA, address tokenB, uint amountB);
```

* Event log of NEG transactions
* `tokenA` :  token address delivered by the user
* `amountA` : the amount of tokens delivered by the user&#x20;
* `tokenB` : token address received by the user
* `amountB` : the amount of tokens received by the user

#### AddLiquidity

```solidity
event AddLiquidity(address user, address tokenA, uint amountA, address tokenB, uint amountB, uint liquidity);
```

* Event log of liquidity additions
* `liquidity` :  the amount of LP tokens minted due to additional liquidity

#### RemoveLiquidity

```solidity
event RemoveLiquidity(address user, address tokenA, uint amountA, address tokenB, uint amountB, uint liquidity);
```

* Event log of liquidity removals
* `liquidity` : the amount of LP tokens burned due to liquidity removal
  {% endtab %}

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

## Read-Only Functions

#### name

* KlaySwap LP

#### symbol

* "KSLP" + " " + symbolA + "-" + symbolB

#### decimals

* 18

#### totalSupply

* mint/burn depending on liquidity addition/removal

#### balanceOf

* Number of LP tokens held by each address

#### allowance

* Status of approval to spender for each address

#### factory

* The factory address where the LP smart contract is deployed

#### tokenA

* The first token address composed of the pair
* When KLAY is one part of the pair, tokenA == 0x0

#### tokenB

* The second token address composed of the pair

#### fee

* Transaction fee for the pair
* It is a value between 0 and 100, in units of 0.01%
* 1 == 0.01%, 100 == 1%

#### mining

* The mining rate of the pair
* It is a value between 0 and 100, in units of 1%
* e.g. If mining is 10, the pair has claim authority for 10% of the quantity mined per block in the factory.

#### lastMined

* Factory.mined() value at the last time the pair updated the index

#### userRewardSum

* mapping(address => uint )
* Stores the cumulatively claimed KSP quantity value for each user

#### getCurrentPool

```solidity
function getCurrentPool() public view returns (uint, uint)
```

* Returns the liquidity quantity of the two assets in the current pool

#### estimatePos

```solidity
function estimatePos(address token, uint amount) public view returns (uint)
```

* When a request is made to sell the amount of the corresponding token through a POS transaction, the expected receiving amount of the opposite token is returned.

#### estimateNeg

```solidity
function estimateNeg(address token, uint amount) public view returns (uint)
```

* When a request is made to purchase the amount of the corresponding token through a NEG transaction, the expected payment amount of the opposite token is returned.

{% endtab %}

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

## State-Changing Functions

#### transfer

```solidity
function transfer(address _to, uint _value) public returns (bool)
```

* KIP7 Standard
* Method for KSP token transfer

#### transferFrom

```solidity
function transferFrom(address _from, address _to, uint _value) public returns (bool)
```

* KIP7 Standard
* Method to transfer tokens on behalf of the approved wallet

#### approve

```solidity
function approve(address _spender, uint _value) public returns (bool)
```

* KIP7 Standard
* Method to approve transfer as much as value to the spender

#### updateMiningIndex

```solidity
function updateMiningIndex() public
```

* Method to update the value of the pair contract based on the current Factory.mined() value
* Anyone can call in real time. Even if no one calls it, it calls itself if necessary.

#### claimReward

```solidity
function claimReward() public
```

* Method that a user calls to claim the claimable KSP that has accumulated for the pair
* When called, KSP is claimed from the Factory and paid to msg.sender
* Even if the method is not called directly, it is automatically called when the LP token balance of the user’s wallet changes.
  * When liquidity is added
  * When liquidity is removed
  * When LP tokens are sent
  * When LP tokens are received

#### addKlayLiquidity

```solidity
function addKlayLiquidity(uint amount) public payable
```

* Method used to provide liquidity when tokenA is KLAY
* Liquidity of the KLAY `msg.value` and tokenB `amount` is provided.
* After liquidity is provided, the LP token corresponding to the pool share is minted in the msg.sender wallet.
* If the pair ratio is wrong, as much liquidity as possible is supplied at the current pair ratio, and the remaining tokens are returned to msg.sender.
* If there is claimable KSP when called, the claim proceeds to msg.sender.

**addKlayLiquidityWithLimit**

```solidity
function addKlayLiquidityWithLimit(uint amount, uint minAmountA, uint minAmountB) public payable
```

* Method used to provide liquidity when tokenA is KLAY
* Liquidity of the KLAY `msg.value` and tokenB `amount` is provided.
* Set the minimum amount of tokenA and tokenB to be used for liquidity supply using minAmountA, minAmountB.
* After liquidity is provided, the LP token corresponding to the pool share is minted in the msg.sender wallet.
* If the pair ratio is wrong, as much liquidity as possible is supplied at the current pair ratio, and the remaining tokens are returned to msg.sender.
* If there is claimable KSP when called, the claim proceeds to msg.sender.

#### addKctLiquidity

```solidity
function addKctLiquidity(uint amountA, uint amountB) public
```

* Method used to provide liquidity when tokenA is KIP7 standard token&#x20;
* Liquidity of the number of tokenA `amountA` and tokenB `amountB` is provided.
* After liquidity is provided, the LP token corresponding to the pool share is minted in the msg.sender wallet.
* If the pair ratio is wrong, as much liquidity as possible is supplied at the current pair ratio, and the remaining tokens are returned to msg.sender.
* If there is claimable KSP when called, the claim proceeds to msg.sender.

**addKctLiquidityWithLimit**

```solidity
function addKctLiquidityWithLimit(uint amountA, uint amountB, uint minAmountA, uint minAmountB) public
```

* Method used to provide liquidity when tokenA is KIP7 standard token&#x20;
* Liquidity of the number of tokenA `amountA` and tokenB `amountB` is provided.
* Set the minimum amount of tokenA and tokenB to be used for liquidity supply using minAmountA, minAmountB.
* After liquidity is provided, the LP token corresponding to the pool share is minted in the msg.sender wallet.
* If the pair ratio is wrong, as much liquidity as possible is supplied at the current pair ratio, and the remaining tokens are returned to msg.sender.
* If there is claimable KSP when called, the claim proceeds to msg.sender.

#### removeLiquidity

```solidity
function removeLiquidity(uint amount) public
```

* Returns the amount of LP tokens, and distributes the corresponding tokenA and tokenB to the msg.sender wallet
* The returned LP token amount is burned
* If there is claimable KSP when called, the claim proceeds to msg.sender.

**removeLiquidityWithLimit**

```solidity
function removeLiquidityWithLimit(uint amount, uint minAmountA, uint minAmountB) public
```

* Returns the amount of LP tokens, and distributes the corresponding tokenA and tokenB to the msg.sender wallet
* Set the minimum amount for the returned tokenA and tokenB amounts by using minAmountA, minAmountB.
* The returned LP token amount is burned
* If there is claimable KSP when called, the claim proceeds to msg.sender.
  {% endtab %}
  {% endtabs %}


# VotingKSP

이 컨트랙트는 KSP를 스테이킹과 관련된 생태계 동작을 담당합니다. 스테이킹 수량과 기간에 따라 투표권(vKSP)을 발행하며, 스테이킹 참여자에게  1일 KSP 마이닝 수량의 40%를 분배합니다. \
(스테이킹 참여자 대상 KSP 분배율은 거버넌스 투표를 통해 변경될 수 있습니다)&#x20;

## Code

Github Link: (Will be updated after official launch)

## Address

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

&#x20;

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

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

## Events

**LockKSP**

```solidity
event LockKSP(address user, uint lockPeriod, uint KSPAmount, uint totalLockedKSP, uint unlockTime);
```

* KSP를 스테이킹시 발생되는 이벤트
* Parameters
  * `user` : 유저 지갑 주소
  * `lockPeriod` :&#x20;
    * 4개월 : 10,368,000
    * 8개월 : 20,736,000
    * 12개월 : 31,104,000
    * x8 : 1,555,200,000
  * `KSPAmount` : KSP 수량
  * `totalLockedKSP` : 총 스테이킹된 KSP 수량
  * `unlockTime` : 언스테이킹 가능한 시간 (timestamp)

**UnlockKSP**&#x20;

<pre class="language-solidity"><code class="lang-solidity"><strong>event UnlockKSP(address user, uint vKSPAmount, uint KSPAmount);
</strong></code></pre>

* vKSP를 언스테이킹 시 발생되는 이벤트
* Parameters
  * `user` : 유저 지갑 주소
  * `vKSPAmount` : 보유했던 vKSP 수량
  * `KSPAmount` : 언스테이킹 KSP 수량

**UnlockKSPUnlimited**

```solidity
event UnlockKSPUnlimited(address user, uint vKSPBefore, uint vKSPAfter, uint KSPAmount, uint unlockTime);
```

* vKSP x8 스테이킹을 해제할시 발생되는 이벤트
* Parameters
  * `user` : 유저 지갑 주소
  * `vKSPBefore` : 보유했던 vKSP 수량
  * `vKSPAfter` : 스테이킹 해제후 보유한 vKSP 수량
  * `KSPAmount` : 스테이킹한 KSP 수량
  * `unlockTime` : 언스테이킹 가능한 시간 (timestamp)

**RefixBoosting**

```solidity
event RefixBoosting(address user, uint lockPeriod, uint boostingAmount, uint unlockTime);
```

* 스테이킹 기간 변경 시 발생되는 이벤트
* Parameter
  * `user` : 유저 지갑 주소
  * `lockPeriod` : 변경 기간
  * `boostingAmount` : 변경 후 보유 vKSP
  * `unlockTime` : 언스테이킹 가능한 시간 (timestamp)

**ChangeMiningRate**

```solidity
event ChangeMiningRate(uint _mining);
```

* 일일 KSP 분배율 변경 시 발생되는 이벤트

**GiveReward**

```solidity
event GiveReward(address user, uint amount, uint lastIndex, uint rewardSum);
```

* KSP 보상 시 발생되는 이벤트
  {% endtab %}

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

## Read-Only Functions

**balanceOf**

* 지갑별 vKSP 보유 수량

**getCurrentBalance**

* 라운드 시작시 지갑별 vKSP 보유 수량

**getUserUnlockTime**

* 언스테이킹 가능 시점(스테이킹 기간 계산 포함)

**lockedKSP**

* 스테이킹 한 KSP 수량

**mining**

* 일일 KSP 분배
* 0 \~ 10000 값, 단위 0.01%

**snapShotBalance**

* 상위 풀 여부 스냅샷

**snapShotCount**

* 스냅샷 개

**unlockTime**

* 언스테이킹 가능 시

**getPriorBalance**

```solidity
function getPriorBalance(address user, uint blockNumber) public view returns (uint) 
```

* 블록 별 과거 vKSP 보유 수량
* Parameter
  * `user` : 지갑 주소
  * `blockNumber` : 과거 blockNumber

**getSnapBalance**

```solidity
function snapShotBalance(address user, uint index) public view returns (uint) 
```

* 지갑 별 과거 vKSP 보유 수량
* Parameter
  * `user` : 지갑 주소
  * `index` : 순차 별 인덱

**snapShotBlock**

```solidity
function snapShotBlock(address user, uint index) public view returns (uint) 
```

* 지갑 스냅샷 당시 BlockNumber
* Parameter
  * `user` : 지갑 주소
  * `index` : 순차 별 BlockNumber
    {% endtab %}

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

## **State-Changing Functions**

**lockKSP**

```solidity
function lockKSP(uint amount, uint lockPeriodRequested) public
```

* KSP 스테이킹 함수
* KSP 정수단위로 스테이킹 가능&#x20;

**unlockKSP**

```solidity
function unlockKSP() public
```

* KSP 언스테이킹 함수
* 언락 기간에만 언스테이킹 가능하다

**unlockKSPUnlimited**

```solidity
function unlockKSPUnlimited() public
```

* KSP x8 스테이킹을 해제하는 함수
* 해제 시점부터 x4 스테이킹으로 변경

**refixBoosting**

```solidity
function refixBoosting(uint lockPeriodRequested)
```

* KSP 스테이킹 기간 변경 함수

**claimReward**

```solidity
function claimReward() public
```

* KSP 보상 수령 함수

**compoundReward**

```solidity
function compoundReward() public
```

* KSP 보상 스테이킹 함수&#x20;
* 보상이 1 KSP 이상일때 호출 가능
* 정수 단위로 스테이킹 가능하며 나머지는 지갑 주소로 전
  {% endtab %}
  {% endtabs %}


# V2Treasury

Treasury Contract는 에어드랍 실행을 주관하는 컨트랙트입니다. 권한을 가진 Operator는 Treasury Contract를 통하여 에어드랍을 설정하고 집행할 수 있습니다.&#x20;

## Code

Github Link: (Will be updated after official launch)

## Address

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

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

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

## Events

**ChangeCreationFee**&#x20;

```solidity
event ChangeCreationFee(uint fee);
```

* 생성 수수료(KSP) 변경 시 발생되는 이벤트

**SetOperator**

```solidity
event SetOperator(address operator, bool valid);
```

* Operator 설정 시 발생되는 이벤트

**CreateDistribution**

```solidity
event CreateDistribution(address operator, address token, uint totalAmount, uint blockAmount, uint blockNumber, address[] targets, uint[] rates);
```

* 에어드랍 설정 시 발생되는 이벤트
* Parameters

**RemoveDistribution**

```solidity
event RemoveDistribution(address operator, address token);
```

* 에어드랍 해제 시 발생되는 이벤트

**Deposit**

```solidity
event Deposit(address operator, address token, uint amount);
```

* Deposit 이벤트

**RefixBlockAmount**

```solidity
event RefixBlockAmount(address operator, address token, uint blockAmount);
```

* RefixBLockAmount 이벤트

**RefixDistributionRate**

```solidity
event RefixDistributionRate(address operator, address token, address[] targets, uint[] rates);
```

* RefixDistributionRate 이벤트

{% endtab %}

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

## Read-Only Functions

**distributionCount**&#x20;

* 에어드랍 계획 개수&#x20;

**distributionEntries**

* mapping(address => mapping(uint => address))
* LP 별 distribution 주소

**distributionOperator**

* mapping (address => address)
* Distribution 별 Operator 주소

**fee**

* Distribution 생성 수수료

**owner**

* 현재 소유자
  {% endtab %}

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

## **State-Changing Functions**

**changeCreationFee**

```solidity
function changeCreationFee(uint _fee) public 
```

* Distribution 생성 수수료 변경 함수
* only Owner&#x20;

**claim**

```solidity
function claim(address target) public
```

* 유동성 풀 에어드랍 수령 함수
* Parameters
  * `target` : 유동성 풀 주소

**createKlayDistribution**

```solidity
function createKlayDistribution(uint blockAmount, uint blockNumber, address[] memory targets, uint[] memory rates) public payable
```

* KLAY Distribution 생성 함수
* only Operator

**createTokenDistribution**

```solidity
function createTokenDistribution(address token, uint amount, uint blockAmount, uint blockNumber, address[] memory targets, uint[] memory rates) public
```

* Distribution 생성 함수
* only Operator

**depositKlay**

```solidity
function depositKlay() public payable
```

* KLAY 예치 함수
* only Operator

**depositToken**

```solidity
function depositToken(address token, uint amount) public
```

* KIP7 기반 토큰 예치 함수
* only Operator

**refixBlockAmount**

```solidity
function refixBlockAmount(address token, uint blockAmount) public
```

* Block 당 지급 수량 변경 함수
* only Operator

**refixDistributionRate**

```solidity
function refixDistributionRate(address token, address[] memory targets, uint[] memory rates) public
```

* Block 당 지급율 변경 함수
* only Operator

**removeDistribution**

```solidity
function removeDistribution(address operator, address token) public
```

* Distribution 제거 함수
* Distribution.removeDistribution() 함수 호출
* only Operator

{% endtab %}
{% endtabs %}


# Distribution

풀에 적용된 Airdrop 계획 컨트랙트입니다. 한 개의 유동성 풀과 한 개의 토큰을 타겟으로 할 수 있습니다. \
해당 컨트랙트는 권한이 있는 Operator가  Treasury 를 통해 계약을 집행하게 됩니다.&#x20;

## Code

Github Link: (Will be updated after official launch)

## Address

* Contract adress after production is deployed (scope link)&#x20;

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

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

## Events

**Initialized**

```solidity
event Initialized(address token, uint amountPerBlock, uint distributableBlock, address[] targets, uint[] rates);
```

* 에어드랍 계획 수립 이벤트
* Parameters
  * `token` : KIP7 기반 토큰&#x20;
  * `amountPerBlock` : Block 당 분배할 토큰 수량
  * `distributableBlock` : 분배 시작할 Block Number
  * `targets` : 분배할 유동성 풀 주소 배열
  * `rates` : 유동성 풀 분배율 배열

**Deposit**

```solidity
event Deposit(uint amount, uint totalAmount);
```

* 토큰 예치 이벤트
* Parameters
  * `amount` : 예치 토큰 수량
  * `totalAmount` : 총 예치 토큰 수

**RefixBlockAmount**

```solidity
event RefixBlockAmount(uint amountPerBlock);
```

* 분배 수량 변경 이벤트

**RefixDistributionRate**

```solidity
event RefixDistributionRate(address[] targets, uint[] rates);
```

* 유동성 풀 별 분배율 설정 이벤트

**ChangeDistributionRate**

```solidity
event ChangeDistributionRate(address target, uint rate);
```

* 유동성 풀 분배율 설정 이벤트

**Distribute**

```solidity
event Distribute(address user, address target, uint amount, uint currentIndex, uint userRewardSum);
```

* 에어드랍 분배 이벤트
* Parameters
  * user : 참여자 수령 지갑 주소
  * target : 유동성 풀 주소
  * amount : 분배된 토큰 수량
  * currentIndex : 분배된 시점
  * userRewardSum : 참여자 총 수령 토큰 수량

{% endtab %}

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

## Read-Only Functions

**blockAmount**

* 블럭 당 분배할 토큰 수량

**distributableBlock**

* 분배 시작될 Block Number

**distributedAmount**

* 분배량, 분배율이 수정되었을 경우, 마지막 분배된 총 토큰 수량

**distribution**

* 분배된 총 토큰 수량

**distributionRate**

* 유동성 풀 별 에어드랍 분배율

**estimateEndBlock**

* 에어드랍 종료 예정 Block Number

**operator**

* Operator 주소

**targetCount**

* 에어드랍 타겟 유동성 풀 개수&#x20;

**targetEntries**

* mapping(uint => address)
* 에어드랍 타겟 유동성 풀 주소

**token**

* KIP7 기반 분배 토큰 주소&#x20;

**totalAmount**

* 총 에어드랍  토큰 수량

**userRewardSum**

```
function userRewardSum(address target, address user) public view returns (uint) 
```

* 참여자 총 에어드랍 지급 토큰 &#x20;
* Parameter
  * `target` : 타겟 유동성 풀 주소
  * `user` : 참여자 지갑 주소
    {% endtab %}
    {% endtabs %}


# Governor

이 컨트랙트는 클레이스왑의 투표 등록, 투표 집계, 집행을 관리하는 관리자 기능을 합니다. 또한 클레이스왑의 중요 파라미터들과 제안 등록, 투표 집행을 수행합니다.&#x20;

## Address

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

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

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

## Events

**ProposalCreated**

```solidity
event ProposalCreated(uint id, address proposer, address target, string signature, bytes callData, uint startBlock, uint endBlock, string description);
```

* 제안 생성시 발생하는 이벤트
* Parameters
  * id : 제안 ID
  * proposer : 제안자 지갑 주소
  * target : 실행 컨트랙트 주소
  * signature : 실행할 함수 식별 정보
  * callData : 실행할 함수 내용
  * startBlock : 시작 블럭 번호
  * endBlock : 종료 블럭 번호
  * description : 제안 상세 내용

**VoteCast**

```solidity
event VoteCast(address voter, uint proposalId, bool support, uint votes, uint againstVotes, uint forVotes, uint quorumVotes, string reason);
```

* 투표시 발생하는 이벤트
* Parameters
  * voter : 투표자 지갑 주소
  * proposalId : 제안 ID
  * support : 찬반
  * votes : 투표 수량
  * againstVotes :  총 반대 투표 수량
  * forVotes : 총 찬성 투표 수량
  * quorumVotes : 의사정족수
  * reason : 투표 사유

**ProposalCanceled**

```solidity
event ProposalCanceled(uint id);
```

* 투표 취소시 발생하는 이벤트

**ProposalQueued**

```solidity
event ProposalQueued(uint id, uint eta, uint tid);
```

* 제안이 대기열에 들어갔을때 발생하는 이벤트

**ProposalExecuted**

```solidity
event ProposalExecuted(uint id, bool succeeded);
```

* 제안이 실행됐을때 발생하는 이벤트

**ProposalFeeSet**

```solidity
event ProposalFeeSet(uint oldProposalFee, uint proposalFee);
```

* 제안등록비용 변경시 발생되는 이벤트

{% endtab %}

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

## State-Changing Functions

#### propose

```solidity
function propose(address target, string memory signature, bytes memory callData, string memory description) public returns (uint)
```

* 새 안건을 생성하는 함수
* 최소 스테이킹 수량을 넘은 지갑만 안건   생성가능
* `target` : 안건이 실행할 컨트랙트 주소
* `signature` : 실행할 안건함수의 signautre
* `callData` : 실행할 안건의 callData
* `description` : 안건에 대한 설명

#### castVote

```solidity
function castVote(uint proposalId, bool support) external 
```

* 투표를 실행하는 함수
* `proposalId` : 투표를 실행할 안건의 id
* `support` : 찬반 여부 (찬성 = true, 반대 = false)
  {% endtab %}
  {% endtabs %}


# Helper

해당 컨트랙트는 두 개의 토큰을 가져오지 않더라도, 하나의 토큰으로 풀에 예치할 수 도록 도와주는 기능을 제공하는 컨트랙트 입니다.

## Code

Github Link: (Will be updated after official launch)

## Address

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

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

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

## State-Changing Functions

**estimateLP**

```solidity
function estimateLP(address lp, address token, uint amount, uint swap, bool validPool) public view returns (uint estLP, uint realInput, uint estTarget)
```

* Method to estimate the expected amounts, depositing with single token.
* Parameters
  * `lp` : Address of LP token
  * `token` : Token address to be deposited
  * `amount` : Amount of token not to be swapped
  * `swap` : Amount of token to swap
  * `validPool` : Whether it is a pool with KSP rewards
* Returns
  * `estLP` : Expected number of LP token to be minted
  * `realInput` : Actual number of input amount
  * `estTarget` :  Amount of tokens to be receivedthrough swap

**estimateSwapAmount**

```solidity
function estimateSwapAmount(address lp, address token, uint amount) public view returns (uint maxLP, uint maxSwap, uint targetAmount)
```

* Method to change the mining weight per liquidity pair
* Parameters
  * `lp` : Address of LP
  * `token` : Token address to be deposited
  * `amount` : Amount of token to be deposited
* Returns
  * `maxLP` :  Expected number of LP token to be minted
  * `maxSwap` : Expected amount of token to swap
  * `targetAmount` :  Amount of tokens to be received through swap
    {% endtab %}

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

## State-Changing Functions

####

**addLiquidityWithKlay**

```solidity
function addLiquidityWithKlay(address lp, uint limit, uint inputForLiquidity, uint targetForLiquidity) public payable
```

* Method to add liquidity only providing KLAY.
* Parameters
  * `lp` : address of LP token
  * `limit` : Minimum amounts of LP tokens to be minted.
  * `inputForLiquidity` : Expected amount of KLAY to provide LP
    * 1% slippage allowed
  * `targetForLiquidity` : Expected amount of target token to provide LP
    * 1% slippage allowed
  * `msg.value` : KLAY amount of token to be provided.

**addLiquidityWithKCT**

```solidity
function addLiquidityWithKCT(address lp, address token, uint amount, uint limit, uint inputForLiquidity, uint targetForLiquidity) public
```

* Method to add liquidity only providing single token.
* Parameters
  * `lp` : address of LP token
  * `token` : Token address to be deposited
  * `amount` : Amount of token to be deposited
  * `limit` : Minimum amounts of LP tokens to be minted.
  * `inputForLiquidity` : Expected amount of input token to provide LP
    * 1% slippage allowed
  * `targetForLiquidity` : Expected amount of target token to provide LP
    * 1% slippage allowed
      {% endtab %}
      {% endtabs %}


# V3Factory

해당 컨트랙트는 V3 풀을 배포하고 풀 프로토콜 수수료에 대한 소유권 및 제어를 관리합니다.

## Code

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

## Address

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

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

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

## Events

**PoolCreated**&#x20;

```solidity
event PoolCreated(
    address indexed token0,
    address indexed token1,
    uint24 indexed fee,
    int24 tickSpacing,
    address pool,
    uint256 exid
)
```

풀이 생성될 때 발생

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

<table><thead><tr><th width="162.66666666666666">Name</th><th width="98">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>token0</code></td><td>address</td><td>주소 정렬 순서에 따른 풀의 첫 번째 토큰</td></tr><tr><td><code>token1</code></td><td>address</td><td>주소 정렬 순서에 따른 풀의 두 번째 토큰</td></tr><tr><td><code>fee</code></td><td>uint24</td><td>풀의 모든 스왑에 대해 징수되는 수수료는 1/100 BIP 단위로 표시됩니다.</td></tr><tr><td><code>tickSpacing</code></td><td>int24</td><td>초기화된 틱 사이의 최소 틱 수</td></tr><tr><td><code>pool</code></td><td>address</td><td>생성된 풀의 주소</td></tr></tbody></table>

#### FeeAmountEnabled[​](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/IUniswapV3Factory#feeamountenabled) <a href="#feeamountenabled" id="feeamountenabled"></a>

```solidity
event FeeAmountEnabled(
    uint24 fee,
    int24 tickSpacing
)
```

풀 생성에 대해 새로운 수수료 금액이 활성화되면 발생합니다.

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

<table><thead><tr><th width="168.66666666666666">Name</th><th width="90">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>fee</code></td><td>uint24</td><td>1/100 BIP 단위로 표시되는 활성화된 수수료</td></tr><tr><td><code>tickSpacing</code></td><td>int24</td><td>주어진 수수료로 생성된 풀의 초기화된 틱 사이의 최소 틱 수</td></tr></tbody></table>
{% endtab %}

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

## Read-Only Functions

**getPoolCount**

```solidity
function getPoolCount() external view override returns (uint256);
```

V3에서 생성된 풀 수 가져오기

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

<table><thead><tr><th width="127.66666666666666">Name</th><th width="113">Type</th><th>Description</th></tr></thead><tbody><tr><td></td><td>uint256</td><td>V3에서 생성된 풀 수</td></tr></tbody></table>

**getPoolAddress**

```solidity
function getPoolAddress(uint256 idx) external view override returns (address);
```

**Parameters:**

<table><thead><tr><th width="127.66666666666666">Name</th><th width="113">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>idx</code></td><td>uint256</td><td>인덱스 번호</td></tr></tbody></table>

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

<table><thead><tr><th width="127.66666666666666">Name</th><th width="113">Type</th><th>Description</th></tr></thead><tbody><tr><td></td><td>address</td><td>index에 해당하는 풀의 주소</td></tr></tbody></table>

#### getPool[​](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/IUniswapV3Factory#getpool) <a href="#getpool" id="getpool"></a>

```solidity
function getPool(
    address tokenA,
    address tokenB,
    uint24 fee
) external view returns (address pool)
```

주어진 토큰 쌍과 수수료에 대한 풀 주소를 반환하거나 존재하지 않는 경우 주소 0을 반환합니다. tokenA 및 tokenB는 token0/token1 또는 token1/token0 순서로 전달될 수 있습니다.

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

<table><thead><tr><th width="137.66666666666666">Name</th><th width="105">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>tokenA</code></td><td>address</td><td>token0 또는 token1의 컨트랙트 주소</td></tr><tr><td><code>tokenB</code></td><td>address</td><td>다른 토큰의 컨트랙트 주소</td></tr><tr><td><code>fee</code></td><td>uint24</td><td>풀의 모든 스왑에 대해 징수되는 수수료 1/100 BIP 단위</td></tr></tbody></table>

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

<table><thead><tr><th width="145.66666666666666">Name</th><th width="119">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>pool</code></td><td>address</td><td>풀 주소</td></tr></tbody></table>

**feeAmountTickSpacing**[​](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/IUniswapV3Factory#feeamounttickspacing)

```solidity
function feeAmountTickSpacing(
    uint24 fee
) external view returns (int24)
```

활성화된 경우 주어진 수수료 금액에 대한 틱 간격을 반환하고 활성화되지 않은 경우 0을 반환합니다. 수수료 금액은 절대 제거할 수 없으므로 이 값은 하드 코딩되거나 호출 컨텍스트에 캐시되어야 합니다.

**Parameters:**[**​**](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/IUniswapV3Factory#parameters)

<table><thead><tr><th width="133.66666666666666">Name</th><th width="106">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>fee</code></td><td>uint24</td><td>BIP의 100분의 1 단위로 표시되는 활성화된 수수료입니다. 활성화되지 않은 수수료의 경우 0을 반환합니다.</td></tr></tbody></table>

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

<table><thead><tr><th width="179">Type</th><th>Description</th></tr></thead><tbody><tr><td>int24</td><td>틱 간격</td></tr></tbody></table>
{% endtab %}

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

## **State-Changing Functions**

**createPool**

```solidity
function createPool(
    address tokenA,
    address tokenB,
    uint24 fee
) external returns (address pool)
```

* 주어진 두 개의 토큰과 수수료에 대한 풀 생성&#x20;
* tokenA 및 tokenB는 token0/token1 또는 token1/token0 순서로 전달될 수 있습니다. tickSpacing은 수수료에서 검색됩니다.

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

<table><thead><tr><th width="135.66666666666666">Name</th><th width="111">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>tokenA</code></td><td>address</td><td>원하는 풀의 두 토큰 중 하나</td></tr><tr><td><code>tokenB</code></td><td>address</td><td>원하는 풀에 있는 두 개의 토큰 중 다른 하나</td></tr><tr><td><code>fee</code></td><td>uint24</td><td>풀에 대한 원하는 수수료</td></tr></tbody></table>

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

<table><thead><tr><th width="138.66666666666666">Name</th><th width="109">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>pool</code></td><td>address</td><td>새로 생성된 풀의 주소</td></tr></tbody></table>

#### enableFeeAmount[​](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/IUniswapV3Factory#enablefeeamount) <a href="#enablefeeamount" id="enablefeeamount"></a>

```solidity
function enableFeeAmount(
    uint24 fee,
    int24 tickSpacing
) external
```

주어진 tickSpacing으로 수수료 금액을 활성화합니다.&#x20;

수수료 금액은 활성화되면 제거할 수 없습니다.

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

<table><thead><tr><th width="164.66666666666666">Name</th><th width="108">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>fee</code></td><td>uint24</td><td>활성화할 수수료 금액으로, BIP의 100분의 1 단위(예: 1e-6)로 표시됩니다.</td></tr><tr><td><code>tickSpacing</code></td><td>int24</td><td>주어진 수수료 금액으로 생성된 모든 풀에 적용되는 틱 사이의 간격</td></tr></tbody></table>
{% endtab %}
{% endtabs %}


# V3Pool

해당 컨트랙트는 V3 풀입니다.

## Code

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

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

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

## Events

#### Initialize[​](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolEvents#initialize) <a href="#initialize" id="initialize"></a>

```solidity
event Initialize(
    uint160 sqrtPriceX96,
    int24 tick
)
```

풀에서 #initialize가 처음 호출될 때 풀에서 정확히 한 번 방출됩니다.&#x20;

Mint/Burn/Swap은 초기화 전에 풀에서 내보낼 수 없습니다.

**Parameters:**[**​**](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolEvents#parameters)

<table><thead><tr><th width="178.66666666666666">Name</th><th width="92">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>sqrtPriceX96</code></td><td>uint160</td><td>풀의 초기 sqrt 가격(Q64.96)</td></tr><tr><td><code>tick</code></td><td>int24</td><td>풀의 초기 틱, 즉 풀 시작 가격의 로그 베이스 1.0001</td></tr></tbody></table>

#### Mint[​](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolEvents#mint) <a href="#mint" id="mint"></a>

```solidity
event Mint(
    address sender,
    address owner,
    int24 tickLower,
    int24 tickUpper,
    uint128 amount,
    uint256 amount0,
    uint256 amount1
)
```

주어진 포지션에 대해 유동성이 발행될 때 발생

**Parameters:**[**​**](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolEvents#parameters-1)

<table><thead><tr><th width="156.66666666666666">Name</th><th width="114">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>sender</code></td><td>address</td><td>유동성을 발행한 주소</td></tr><tr><td><code>owner</code></td><td>address</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>amount</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>

#### Collect[​](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolEvents#collect) <a href="#collect" id="collect"></a>

```solidity
event Collect(
    address owner,
    int24 tickLower,
    int24 tickUpper,
    uint128 amount0,
    uint128 amount1
)
```

포지션 소유자가 수수료를 수령할 때 발생&#x20;

호출자가 수수료를 수집하지 않기로 선택하면 0 amount0 및 amount1로 수집 이벤트를 내보낼 수 있습니다.

**Parameters:**[**​**](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolEvents#parameters-2)

<table><thead><tr><th width="151.66666666666666">Name</th><th width="100">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>owner</code></td><td>address</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>amount0</code></td><td>uint128</td><td>수령한 token0 수수료 금액</td></tr><tr><td><code>amount1</code></td><td>uint128</td><td>수령한 token1 수수료 금액</td></tr></tbody></table>

#### Burn[​](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolEvents#burn) <a href="#burn" id="burn"></a>

```solidity
event Burn(
    address owner,
    int24 tickLower,
    int24 tickUpper,
    uint128 amount,
    uint256 amount0,
    uint256 amount1
)
```

포지션의 유동성이 제거되었을 때 발생&#x20;

\#collect를 통해 인출해야 하는 유동성 포지션에서 얻은 수수료를 인출하지 않습니다.

**Parameters:**[**​**](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolEvents#parameters-3)

<table><thead><tr><th width="154.66666666666666">Name</th><th width="117">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>owner</code></td><td>address</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>amount</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>

#### Swap[​](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolEvents#swap) <a href="#swap" id="swap"></a>

```solidity
event Swap(
    address sender,
    address recipient,
    int256 amount0,
    int256 amount1,
    uint160 sqrtPriceX96,
    uint128 liquidity,
    int24 tick
)
```

token0과 token1 사이의 모든 스왑에 대해 풀에서 내보냅니다.

**Parameters:**[**​**](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolEvents#parameters-4)

<table><thead><tr><th width="176.66666666666666">Name</th><th width="108">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>sender</code></td><td>address</td><td>스왑 호출을 시작하고 콜백을 수신한 주소</td></tr><tr><td><code>recipient</code></td><td>address</td><td>스왑의 결과물을 받은 주소</td></tr><tr><td><code>amount0</code></td><td>int256</td><td>풀의 token0 잔액 차이</td></tr><tr><td><code>amount1</code></td><td>int256</td><td>풀의 token1 잔액 차이</td></tr><tr><td><code>sqrtPriceX96</code></td><td>uint160</td><td>Q64.96으로 스왑 후 풀의 sqrt(가격)</td></tr><tr><td><code>liquidity</code></td><td>uint128</td><td>스왑 후 풀의 유동성</td></tr><tr><td><code>tick</code></td><td>int24</td><td>스왑 후 풀 가격의 로그 베이스 1.0001</td></tr></tbody></table>

#### &#x20;<a href="#flash" id="flash"></a>

IncreaseObservationCardinalityNext[​](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolEvents#increaseobservationcardinalitynext)

```solidity
event IncreaseObservationCardinalityNext(
    uint16 observationCardinalityNextOld,
    uint16 observationCardinalityNextNew
)
```

저장할 수 있는 관찰 수를 늘리기 위해 풀에서 내보냅니다.&#x20;

observationCardinalityNext는 mint/swap/burn 직전에 인덱스에 관측치가 기록될 때까지 관측 카디널리티가 아닙니다.

**Parameters:**[**​**](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolEvents#parameters-6)

<table><thead><tr><th width="207.66666666666666">Name</th><th width="93">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>observationCardinalityNextOld</code></td><td>uint16</td><td>다음 관찰 카디널리티의 이전 값</td></tr><tr><td><code>observationCardinalityNextNew</code></td><td>uint16</td><td>다음 관찰 카디널리티의 업데이트된 값</td></tr></tbody></table>
{% endtab %}

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

## Read-Only Functions

#### factory[​](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolImmutables#factory) <a href="#factory" id="factory"></a>

```solidity
function factory() external view returns (address)
```

IUniswapV3Factory 인터페이스를 준수해야 하는 풀을 배포한 계약

**Return Values:**[**​**](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolImmutables#return-values)

<table><thead><tr><th width="150">Type</th><th>Description</th></tr></thead><tbody><tr><td>address</td><td>컨트랙트 주소</td></tr></tbody></table>

#### token0[​](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolImmutables#token0) <a href="#token0" id="token0"></a>

```solidity
function token0() external view returns (address)
```

주소별로 정렬된 풀의 두 토큰 중 첫 번째

**Return Values:**[**​**](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolImmutables#return-values-1)

| Type    | Description |
| ------- | ----------- |
| address | 토큰 컨트랙트 주소  |

#### token1[​](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolImmutables#token1) <a href="#token1" id="token1"></a>

```solidity
function token1() external view returns (address)
```

주소별로 정렬된 풀의 두 토큰 중 두 번째

**Return Values:**[**​**](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolImmutables#return-values-2)

| Type    | Description |
| ------- | ----------- |
| address | 토큰 컨트랙트 주소  |

#### fee[​](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolImmutables#fee) <a href="#fee" id="fee"></a>

```solidity
function fee() external view returns (uint24)
```

1/100 BIP 단위의 풀 수수료, 즉 1e-6

**Return Values:**[**​**](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolImmutables#return-values-3)

| Type   | Description |
| ------ | ----------- |
| uint24 | 수수료         |

#### tickSpacing[​](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolImmutables#tickspacing) <a href="#tickspacing" id="tickspacing"></a>

```solidity
function tickSpacing() external view returns (int24)
```

풀 틱 간격&#x20;

틱은 이 값의 배수에서만 사용할 수 있으며 최소값은 1이고 항상 양수입니다. \
예: tickSpacing이 3이면 틱이 3번째 틱마다 초기화될 수 있음을 의미합니다(예: ..., -6, -3, 0, 3, 6, ... 이 값은 항상 양수인데도 캐스팅을 피하기 위해 int24입니다.

**Return Values:**[**​**](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolImmutables#return-values-4)

| Type  | Description |
| ----- | ----------- |
| int24 | 틱 간격        |

#### maxLiquidityPerTick[​](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolImmutables#maxliquiditypertick) <a href="#maxliquiditypertick" id="maxliquiditypertick"></a>

```solidity
function maxLiquidityPerTick() external view returns (uint128)The maximum amount of position liquidity that can use any tick in the range
```

이 매개변수는 유동성이 uint128을 초과하는 것을 방지하기 위해 틱당 적용되며 풀에 범위 내 유동성을 추가하는 것을 방지하기 위해 범위를 벗어난 유동성이 사용되는 것을 방지합니다.

**Return Values:**[**​**](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolImmutables#return-values-5)

| Type    | Description |
| ------- | ----------- |
| uint128 | 틱당 최대 유동성   |

#### snapshotCumulativesInside[​](https://docs.uniswap.org/contracts/v3/reference/core/UniswapV3Pool#snapshotcumulativesinside) <a href="#snapshotcumulativesinside" id="snapshotcumulativesinside"></a>

```solidity
function snapshotCumulativesInside(
    int24 tickLower,
    int24 tickUpper
) external view returns (
    int56 tickCumulativeInside, 
    uint160 secondsPerLiquidityInsideX128, 
    uint32 secondsInside
)
```

틱 누적, 유동성당 초 및 틱 범위 내 초의 스냅샷을 반환합니다.&#x20;

스냅샷은 위치가 존재하는 기간 동안 찍은 다른 스냅샷과만 비교해야 합니다. \
즉, 첫 번째 스냅샷이 생성된 시점과 두 번째 스냅샷이 생성된 시점 사이의 전체 기간 동안 포지션이 유지되지 않으면 스냅샷을 비교할 수 없습니다.

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

<table><thead><tr><th width="184.66666666666666">Name</th><th width="137">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>tickLower</code></td><td>int24</td><td>범위의 하위 틱</td></tr><tr><td><code>tickUpper</code></td><td>int24</td><td>범위의 상위 틱</td></tr></tbody></table>

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

<table><thead><tr><th width="254.66666666666666">Name</th><th width="119">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>tickCumulativeInside</code></td><td>int56</td><td>범위에 대한 틱 누산기의 스냅샷</td></tr><tr><td><code>secondsPerLiquidityInsideX128</code></td><td>uint160</td><td>범위에 대한 유동성당 초의 스냅샷</td></tr><tr><td><code>secondsInside</code></td><td>uint32</td><td>범위에 대한 유동성당 초의 스냅샷</td></tr></tbody></table>

#### observe[​](https://docs.uniswap.org/contracts/v3/reference/core/UniswapV3Pool#observe) <a href="#observe" id="observe"></a>

```solidity
function observe(
    uint32[] secondsAgos
) external view returns (
    int56[] tickCumulatives, 
    uint160[] secondsPerLiquidityCumulativeX128s
)
```

현재 블록 타임스탬프에서 각 타임스탬프 secondsAgo 시점의 누적 틱 및 유동성을 반환합니다.&#x20;

시간 가중 평균 틱 또는 범위 내 유동성을 얻으려면 두 개의 값으로 호출해야 합니다. \
하나는 기간의 시작을 나타내고 다른 하나는 기간의 끝을 나타냅니다. \
예를 들어 지난 시간 가중 평균 틱을 얻으려면 secondsAgos = \[3600, 0]으로 호출해야 합니다. 시간 가중 평균 틱은 토큰1 / 토큰0의 로그 기준 sqrt(1.0001)에서 풀의 기하학적 시간 가중 평균 가격을 나타냅니다. TickMath 라이브러리를 사용하여 눈금 값에서 비율로 이동할 수 있습니다.

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

<table><thead><tr><th width="173.66666666666666">Name</th><th width="115">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>secondsAgos</code></td><td>uint32[]</td><td>각 누적 틱 및 유동성 값이 반환되어야 하는 시점</td></tr></tbody></table>

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

<table><thead><tr><th width="219.66666666666666">Name</th><th width="129">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>tickCumulatives</code></td><td>int56[]</td><td>현재 블록 타임스탬프에서 각 <code>secondsAgos</code>의 누적 틱 값</td></tr><tr><td><code>secondsPerLiquidityCumulativeX128s</code></td><td>uint160[]</td><td>현재 블록의 각 <code>secondsAgos</code> 기준 유동성 범위 값당 누적 초</td></tr></tbody></table>

#### slot0[​](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolState#slot0) <a href="#slot0" id="slot0"></a>

```solidity
function slot0() external view returns (
    uint160 sqrtPriceX96, 
    int24 tick, 
    uint16 observationIndex, 
    uint16 observationCardinality, 
    uint16 observationCardinalityNext, 
    uint8 feeProtocol, 
    bool unlocked
)
```

풀의 0번째 스토리지 슬롯은 많은 값을 저장하며 외부에서 액세스할 때 가스를 절약하기 위한 단일 방법으로 노출됩니다.

**Return Values:**[**​**](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolState#return-values)

<table><thead><tr><th width="184.66666666666666">Name</th><th width="104">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>sqrtPriceX96</code></td><td>uint160</td><td>sqrt(token1/token0) Q64.96 값으로 풀의 현재 가격</td></tr><tr><td><code>tick</code></td><td>int24</td><td>풀의 현재 틱, 즉 실행된 마지막 틱 전환에 따른 것입니다. 가격이 틱 경계에 있는 경우 이 값은 항상 SqrtTickMath getTickAtSqrtRatio(sqrtPriceX96)와 같지 않을 수 있습니다.</td></tr><tr><td><code>observationIndex</code></td><td>uint16</td><td>작성된 마지막 오라클 관찰의 인덱스</td></tr><tr><td><code>observationCardinality</code></td><td>uint16</td><td>풀에 저장된 현재 최대 관찰 수</td></tr><tr><td><code>observationCardinalityNext</code></td><td>uint16</td><td>관찰 시 업데이트될 다음 최대 관찰 수입니다.</td></tr><tr><td><code>feeProtocol</code></td><td>uint8</td><td>* <strong>미사용</strong> *</td></tr><tr><td><code>unlocked</code></td><td>bool</td><td>풀이 현재 재진입에 잠겨 있는지 여부</td></tr></tbody></table>

#### feeGrowthGlobal0X128[​](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolState#feegrowthglobal0x128) <a href="#feegrowthglobal0x128" id="feegrowthglobal0x128"></a>

```solidity
function feeGrowthGlobal0X128() external view returns (uint256)
```

풀의 전체 수명 동안 유동성 단위당 수집된 token0의 Q128.128 수수료로 수수료 증가&#x20;

이 값은 uint256을 오버플로할 수 있습니다.

#### feeGrowthGlobal1X128[​](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolState#feegrowthglobal1x128) <a href="#feegrowthglobal1x128" id="feegrowthglobal1x128"></a>

```solidity
function feeGrowthGlobal1X128() external view returns (uint256)
```

풀의 전체 수명 동안 유동성 단위당 수집된 token1의 Q128.128 수수료로 수수료 증가&#x20;

이 값은 uint256을 오버플로할 수 있습니다.

#### liquidity[​](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolState#liquidity) <a href="#liquidity" id="liquidity"></a>

```solidity
function liquidity() external view returns (uint128)
```

현재 풀에서 사용할 수 있는 유동성 범위&#x20;

이 값은 모든 틱의 총 유동성과 관련이 없습니다.

#### ticks[​](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolState#ticks) <a href="#ticks" id="ticks"></a>

```solidity
function ticks(
    int24 tick
) external view returns (
    uint128 liquidityGross, 
    int128 liquidityNet, 
    uint256 feeGrowthOutside0X128, 
    uint256 feeGrowthOutside1X128, 
    int56 tickCumulativeOutside, 
    uint160 secondsPerLiquidityOutsideX128, 
    uint32 secondsOutside, 
    bool initialized,
    uint256 rewardGrowthOutsideX128
)
```

풀에서 특정 틱에 대한 정보 조회

**Parameters:**[**​**](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolState#parameters)

| Name   | Type  | Description |
| ------ | ----- | ----------- |
| `tick` | int24 | 조회할 틱       |

**Return Values:**[**​**](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolState#return-values-1)

<table><thead><tr><th width="259">Name</th><th width="97.66666666666666">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>liquidityGross</code></td><td>uint128</td><td>풀을 틱 하한 또는 상한 틱으로 사용하는 총 포지션 유동성,</td></tr><tr><td><code>liquidityNet</code></td><td>int128</td><td>풀 가격이 틱을 넘을 때 유동성이 얼마나 변하는지,</td></tr><tr><td><code>feeGrowthOutside0X128</code></td><td>uint256</td><td>token0의 현재 틱에서 틱 반대편의 수수료 증가,</td></tr><tr><td><code>feeGrowthOutside1X128</code></td><td>uint256</td><td>token1의 현재 틱에서 틱 반대편의 수수료 증가, <br>feeGrowthOutsideX128 값은 틱이 초기화된 경우에만 사용할 수 있습니다. 즉, liquidityGross가 0보다 큰 경우입니다. 또한 이러한 값은 상대적이며 계산에 사용됩니다. 스냅샷.</td></tr><tr><td><code>tickCumulativeOutside</code></td><td>int56</td><td></td></tr><tr><td><code>secondsPerLiquidityOutsideX128</code></td><td>uint160</td><td></td></tr><tr><td><code>secondsOutside</code></td><td>uint32</td><td></td></tr><tr><td><code>initialized</code></td><td>bool</td><td></td></tr><tr><td><code>rewardGrowthOutsideX128</code></td><td>uint256</td><td>현재 틱에서 틱 반대편의 reward 증가</td></tr></tbody></table>

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

```solidity
function positions(
    bytes32 key
) external view returns (
    uint128 liquidity, 
    uint256 feeGrowthInside0LastX128, 
    uint256 feeGrowthInside1LastX128, 
    uint128 tokensOwed0, 
    uint128 tokensOwed1,
    uint256 rewardGrowthInsideLastX128,
    uint128 rewardOwed
)
```

포지션 키로 포지션에 대한 정보를 반환합니다.

**Parameters:**[**​**](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolState#parameters-1)

<table><thead><tr><th width="127.66666666666666">Name</th><th width="140">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>key</code></td><td>bytes32</td><td>위치의 키는 소유자인 tickLower 및 tickUpper가 구성한 사전 이미지의 해시입니다.</td></tr></tbody></table>

**Return Values:**[**​**](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolState#return-values-2)

<table><thead><tr><th width="211.66666666666666">Name</th><th width="102">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>liquidity</code></td><td>uint128</td><td>포지션의 유동성 양,</td></tr><tr><td><code>feeGrowthInside0LastX128</code></td><td>uint256</td><td>마지막 mint/burn/poke 기준 틱 범위 내에서 token0의 수수료 증가,</td></tr><tr><td><code>feeGrowthInside1LastX128</code></td><td>uint256</td><td>마지막 mint/burn/poke 기준 틱 범위 내에서 token1의 수수료 증가,</td></tr><tr><td><code>tokensOwed0</code></td><td>uint128</td><td>마지막 mint/burn/poke 시점의 포지션에 빚진 token0의 계산된 금액,</td></tr><tr><td><code>tokensOwed1</code></td><td>uint128</td><td>마지막 mint/burn/poke 시점의 포지션에 빚진 token1의 계산된 금액,</td></tr><tr><td><code>rewardGrowthInsideLastX128</code></td><td>uint256</td><td>마지막 mint/burn/poke 기준 틱 범위 내에서 reward의 증가,</td></tr><tr><td><code>rewardOwed</code></td><td>uint128</td><td>마지막 mint/burn/poke 시점의 포지션에 빚진 reward의 계산된 금액,</td></tr></tbody></table>

#### observe[​](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolDerivedState#observe) <a href="#observe" id="observe"></a>

```solidity
function observe(
    uint32[] secondsAgos
) external view returns (
    int56[] tickCumulatives, 
    uint160[] secondsPerLiquidityCumulativeX128s
)
```

현재 블록 타임스탬프에서 각 타임스탬프 `secondsAgo`시점의 누적 틱 및 유동성을 반환합니다.&#x20;

시간 가중 평균 틱 또는 범위 내 유동성을 얻으려면 두 개의 값으로 호출해야 합니다. \
하나는 기간의 시작을 나타내고 다른 하나는 기간의 끝을 나타냅니다. 예를 들어 지난 시간 가중 평균 틱을 얻으려면 secondsAgos = \[3600, 0]으로 호출해야 합니다. \
시간 가중 평균 틱은 토큰1 / 토큰0의 로그 기준 sqrt(1.0001)에서 풀의 기하학적 시간 가중 평균 가격을 나타냅니다. TickMath 라이브러리를 사용하여 눈금 값에서 비율로 이동할 수 있습니다.

**Parameters:**[**​**](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolDerivedState#parameters)

<table><thead><tr><th width="177">Name</th><th width="110.66666666666666">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>secondsAgos</code></td><td>uint32[]</td><td>각 누적 틱 및 유동성 값이 반환되어야 하는 시점부터</td></tr></tbody></table>

**Return Values:**[**​**](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolDerivedState#return-values)

<table><thead><tr><th width="241">Name</th><th width="107.66666666666666">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>tickCumulatives</code></td><td>int56[]</td><td>현재 블록 타임스탬프에서 각 <code>secondsAgos</code>의 누적 틱 값</td></tr><tr><td><code>secondsPerLiquidityCumulativeX128s</code></td><td>uint160[]</td><td>현재 블록 타임스탬프에서 각 <code>secondsAgos</code>의 범위 내 유동성 값당 누적 초</td></tr></tbody></table>

#### observations[​](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolState#observations) <a href="#observations" id="observations"></a>

```solidity
function observations(
    uint256 index
) external view returns (
    uint32 blockTimestamp, 
    int56 tickCumulative, 
    uint160 secondsPerLiquidityCumulativeX128, 
    bool initialized
)
```

특정 관찰 색인에 대한 데이터를 반환합니다.&#x20;

배열의 특정 인덱스가 아닌 일정 시간 전의 관찰을 얻기 위해 이 메서드 대신 #observe()를 사용하고 싶을 가능성이 큽니다.

**Parameters:**[**​**](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolState#parameters-2)

<table><thead><tr><th width="143.66666666666666">Name</th><th width="133">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>index</code></td><td>uint256</td><td>가져올 관찰 배열의 요소</td></tr></tbody></table>

**Return Values:**[**​**](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolState#return-values-3)

<table><thead><tr><th width="242">Name</th><th width="93.66666666666666">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>blockTimestamp</code></td><td>uint256</td><td>관찰의 타임스탬프,</td></tr><tr><td><code>tickCumulative</code></td><td>int56</td><td>관찰 타임스탬프를 기준으로 풀 수명 동안 경과된 시간(초)을 곱한 틱</td></tr><tr><td><code>secondsPerLiquidityCumulativeX128</code></td><td>uint160</td><td>관찰 타임스탬프를 기준으로 풀 수명 동안 범위 내 유동성 초당</td></tr><tr><td><code>initialized</code></td><td>bool</td><td>관찰이 초기화되었고 값이 사용하기에 안전한지 여부</td></tr></tbody></table>
{% endtab %}

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

## **State-Changing Functions**

#### increaseObservationCardinalityNext[​](https://docs.uniswap.org/contracts/v3/reference/core/UniswapV3Pool#increaseobservationcardinalitynext) <a href="#increaseobservationcardinalitynext" id="increaseobservationcardinalitynext"></a>

```solidity
function increaseObservationCardinalityNext(
    uint16 observationCardinalityNext
) external; 
```

이 풀이 저장할 가격 및 유동성 관찰의 최대 수를 늘립니다.&#x20;

이 방법은 풀에 이미 입력 observeCardinalityNext보다 크거나 같은 observeCardinalityNext가 있는 경우 작동하지 않습니다.

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

<table><thead><tr><th width="159.66666666666666">Name</th><th width="144">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>observationCardinalityNext</code></td><td>uint16</td><td>풀이 저장할 최소 관찰 수</td></tr></tbody></table>

#### initialize[​](https://docs.uniswap.org/contracts/v3/reference/core/UniswapV3Pool#initialize) <a href="#initialize" id="initialize"></a>

```solidity
function initialize(
    uint160 sqrtPriceX96
) external;
```

풀의 초기 가격을 설정합니다. 잠금 해제된 상태로 초기화되기 때문에 잠기지 않음

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

<table><thead><tr><th width="185.66666666666666">Name</th><th width="116">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>sqrtPriceX96</code></td><td>uint160</td><td>풀의 초기 sqrt 가격을 Q64.96으로</td></tr></tbody></table>

#### mint[​](https://docs.uniswap.org/contracts/v3/reference/core/UniswapV3Pool#mint) <a href="#mint" id="mint"></a>

```solidity
function mint(
    address recipient,
    int24 tickLower,
    int24 tickUpper,
    uint128 amount,
    bytes data
) external returns (uint256 amount0, uint256 amount1)
```

주어진 수신자/tickLower/tickUpper 위치에 유동성 추가

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

<table><thead><tr><th width="150.66666666666666">Name</th><th width="108">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>recipient</code></td><td>address</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>amount</code></td><td>uint128</td><td>발행할 유동성의 양</td></tr><tr><td><code>data</code></td><td>bytes</td><td>콜백으로 전달되어야 하는 모든 데이터</td></tr></tbody></table>

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

<table><thead><tr><th width="146.66666666666666">Name</th><th width="103">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/core/UniswapV3Pool#collect) <a href="#collect" id="collect"></a>

```solidity
function collect(
    address recipient,
    int24 tickLower,
    int24 tickUpper,
    uint128 amount0Requested,
    uint128 amount1Requested
) external returns (uint128 amount0, uint128 amount1)
```

포지션에 빚진 토큰을 수집합니다.&#x20;

획득한 수수료를 재계산하지 않으며, 이는 발행 또는 유동성 소각을 통해 수행되어야 합니다. \
콜렉트는 포지션 소유자가 호출해야 합니다. token0 또는 token1만 인출하려면 amount0Requested 또는 amount1Requested를 0으로 설정하면 됩니다. \
빚진 모든 토큰을 인출하기 위해 호출자는 빚진 실제 토큰보다 큰 값을 전달할 수 있습니다. 유형(uint128).max. 빚진 토큰은 누적된 스왑 수수료 또는 소진된 유동성에서 나올 수 있습니다.

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

<table><thead><tr><th width="213.66666666666666">Name</th><th width="123">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>recipient</code></td><td>address</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>amount0Requested</code></td><td>uint128</td><td>지불해야 할 수수료에서 얼마나 많은 token0을 인출해야 하는가</td></tr><tr><td><code>amount1Requested</code></td><td>uint128</td><td>지불해야 할 수수료에서 얼마나 많은 token1을 인출해야 하는가</td></tr></tbody></table>

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

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

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

```solidity
function burn(
    int24 tickLower,
    int24 tickUpper,
    uint128 amount
) external returns (uint256 amount0, uint256 amount1)
```

발신자로부터 유동성을 소각하고 유동성에 대해 포지션에 빚진 계정 토큰

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

<table><thead><tr><th width="146.66666666666666">Name</th><th width="131">Type</th><th>Description</th></tr></thead><tbody><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>amount</code></td><td>uint128</td><td>소각할 유동성의 양</td></tr></tbody></table>

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

<table><thead><tr><th width="138.66666666666666">Name</th><th width="116">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>

#### swap[​](https://docs.uniswap.org/contracts/v3/reference/core/UniswapV3Pool#swap) <a href="#swap" id="swap"></a>

```solidity
function swap(
    address recipient,
    bool zeroForOne,
    int256 amountSpecified,
    uint160 sqrtPriceLimitX96,
    bytes data
) external returns (int256 amount0, int256 amount1)
```

token0을 token1로 바꾸거나 token1을 token0으로 바꿉니다.&#x20;

이 메서드의 호출자는 IUniswapV3SwapCallback#uniswapV3SwapCallback 형식의 콜백을 받습니다.

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

<table><thead><tr><th width="225.66666666666666">Name</th><th width="102">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>recipient</code></td><td>address</td><td>스왑 출력을 수신할 주소</td></tr><tr><td><code>zeroForOne</code></td><td>bool</td><td>스왑의 방향, token0에서 token1로 true, token1에서 token0으로 false</td></tr><tr><td><code>amountSpecified</code></td><td>int256</td><td>정확한 입력(양수) 또는 정확한 출력(음수)으로 암시적으로 스왑을 구성하는 스왑의 양</td></tr><tr><td><code>sqrtPriceLimitX96</code></td><td>uint160</td><td>Q64.96 sqrt 가격 제한. token0 -> 1인 경우 가격은 스왑 후 이 값보다 낮을 수 없습니다. token1 -> 0인 경우 스왑 후 가격은 이 값보다 클 수 없습니다.</td></tr><tr><td><code>data</code></td><td>bytes</td><td>콜백으로 전달될 모든 데이터</td></tr></tbody></table>

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

<table><thead><tr><th width="137.66666666666666">Name</th><th width="104">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>amount0</code></td><td>int256</td><td>풀의 token0 잔액 델타, 음수일 때 정확, 양수일 때 최소값</td></tr><tr><td><code>amount1</code></td><td>int256</td><td>풀의 token1 잔액 델타, 음수일 때 정확, 양수일 때 최소값</td></tr></tbody></table>

#### snapshotCumulativesInside[​](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolDerivedState#snapshotcumulativesinside) <a href="#snapshotcumulativesinside" id="snapshotcumulativesinside"></a>

```solidity
function snapshotCumulativesInside(
    int24 tickLower,
    int24 tickUpper
) external returns (
    int56 tickCumulativeInside, 
    uint160 secondsPerLiquidityInsideX128, 
    uint32 secondsInside
)
```

틱 누적, 유동성당 초 및 틱 범위 내 초의 스냅샷을 반환합니다.&#x20;

스냅샷은 위치가 존재하는 기간 동안 찍은 다른 스냅샷과만 비교해야 합니다. \
즉, 첫 번째 스냅샷이 생성된 시점과 두 번째 스냅샷이 생성된 시점 사이의 전체 기간 동안 포지션이 유지되지 않으면 스냅샷을 비교할 수 없습니다.

**Parameters:**[**​**](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolDerivedState#parameters-1)

<table><thead><tr><th width="187">Name</th><th width="86.66666666666666">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>tickLower</code></td><td>int24</td><td>범위의 하위 틱</td></tr><tr><td><code>tickUpper</code></td><td>int24</td><td>범위의 상위 틱</td></tr></tbody></table>

**Return Values:**[**​**](https://docs.uniswap.org/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolDerivedState#return-values-1)

<table><thead><tr><th width="259">Name</th><th width="102.66666666666666">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>tickCumulativeInside</code></td><td>int56</td><td>범위에 대한 틱 누산기의 스냅샷</td></tr><tr><td><code>secondsPerLiquidityInsideX128</code></td><td>uint160</td><td>범위에 대한 유동성당 초의 스냅샷</td></tr><tr><td><code>secondsInside</code></td><td>uint32</td><td>범위에 대한 유동성당 초의 스냅샷</td></tr></tbody></table>
{% endtab %}
{% endtabs %}


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


# NonfungibleTokenPositionDescriptor

해당 컨트랙트는 JSON 메타데이터 문자열에 대한 데이터 URI를 포함하는 문자열을 생성합니다.

## Code

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

## Address

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

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

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

## Events

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

```solidity
event UpdateTokenRatioPriority(
    address token,
    int256 priority
)
```

표시된 가격 비율에서 토큰에 새로운 우선 순위가 부여될 때 발생합니다.

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

<table><thead><tr><th width="142.66666666666666">Name</th><th width="117">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>token</code></td><td>address</td><td>우선 순위가 부여되는 토큰</td></tr><tr><td><code>priority</code></td><td>int256</td><td>비율로 우선 순위를 나타냅니다. 더 높은 정수가 분자 우선 순위를 갖습니다.</td></tr></tbody></table>
{% endtab %}

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

## Read-Only Functions

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

```solidity
function tokenURI(
    contract INonfungiblePositionManager positionManager,
    uint256 tokenId
) external returns (string)
```

위치 관리자의 특정 토큰 ID를 설명하는 URI를 생성합니다. 이 URI는 data: JSON 콘텐츠가 직접 인라인된 URI일 수 있습니다.

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

<table><thead><tr><th width="132.66666666666666">Name</th><th width="208">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>positionManager</code></td><td><code>contract INonfungiblePositionManager</code></td><td>토큰을 설명할 <code>positionManager</code></td></tr><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/NonfungibleTokenPositionDescriptor#return-values)

<table><thead><tr><th width="132.66666666666666">Name</th><th width="107">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>String</code></td><td>string</td><td>ERC721 호환 메타데이터의 URI</td></tr></tbody></table>

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

```solidity
function flipRatio() public returns (bool)
```

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

```solidity
function tokenRatioPriority() public returns (int256)
```

{% endtab %}
{% endtabs %}


# V3SwapRouter

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

## Code

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

## Address

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

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


# V3Migrator

이 컨트랙트를 통해 KLAYswap v2 풀에서 KLAYswap v3 풀로 유동성을 마이그레이션할 수 있습니다.

## Code

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

## Address

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

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

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

## Parameter Structs

#### MigrateParams <a href="#migrate" id="migrate"></a>

```solidity
struct MigrateParams {
    address pair; // the KLAYswap v2 pair
    uint256 liquidityToMigrate; // expected to be balanceOf(msg.sender)
    uint8 percentageToMigrate; // represented as a numerator over 100
    address token0;
    address token1;
    uint24 fee;
    int24 tickLower;
    int24 tickUpper;
    uint256 amount0Min; // must be discounted by percentageToMigrate
    uint256 amount1Min; // must be discounted by percentageToMigrate
    address recipient;
    uint256 deadline;
    bool refundAsETH;
}
```

{% endtab %}

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

## **State-Changing Functions**

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

```solidity
function migrate(
    struct IV3Migrator.MigrateParams params
) external
```

v2 유동성을 소각하고 v3에 대한 새 위치를 생성하여 유동성을 v3로 마이그레이션합니다.&#x20;

슬리피지 보호는 `amount{0,1}Min`을 통해 적용되며, 이는 v2 유동성이 얻을 수 있는 최대 v3 유동성의 예상 값을 할인해야 합니다. 범위를 벗어난 위치로 이동하는 특별한 경우의 경우 `amount{0,1}Min`을 0으로 설정하여 위치가 범위를 벗어나도록 강제할 수 있습니다.

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

<table><thead><tr><th width="118.66666666666666">Name</th><th width="177">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>params</code></td><td><code>struct IV3Migrator.MigrateParams</code></td><td>calldata에서 MigrateParams로 인코딩된 v2 유동성을 마이그레이션하는 데 필요한 매개변수</td></tr></tbody></table>
{% endtab %}
{% endtabs %}


# V3Estimator

해당 컨트랙트는 V3 스왑 금액을 추정합니다.

## Code

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

## Address

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

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

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

## Read-Only Functions

**estimatePos**

```solidity
function estimatePos(
    struct IUniswapV3Pool pool, 
    address token, 
    uint256 amountIn
) external view returns (
    uint256 amountOut, 
    uint160 sqrtPriceX96After
)
```

**Parameters:**

<table><thead><tr><th width="134.66666666666666">Name</th><th width="178">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>pool</code></td><td><code>contract IUniswapV3Pool</code></td><td>풀 주소</td></tr><tr><td><code>token</code></td><td>address</td><td>교환되는 토큰</td></tr><tr><td><code>amountIn</code></td><td>uint256</td><td>원하는 투입량</td></tr></tbody></table>

[**​**](https://docs.uniswap.org/contracts/v3/reference/core/UniswapV3Pool#parameters)**Return Values:**

<table><thead><tr><th width="219.66666666666666">Name</th><th width="101">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>amountOut</code></td><td>uint256</td><td>받을 토큰의 양</td></tr><tr><td><code>sqrtPriceX96After</code></td><td>uint160</td><td>스왑 후 sqrt 가격</td></tr></tbody></table>

**estimateNeg**

```solidity
function estimateNeg(
    contract IUniswapV3Pool pool, 
    address token, 
    uint256 amountOut
) external view returns (
    uint256 amountIn, 
    uint160 sqrtPriceX96After
)
```

**Parameters:**

<table><thead><tr><th width="145.66666666666666">Name</th><th width="178">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>pool</code></td><td><code>contract IUniswapV3Pool</code></td><td>풀 주소</td></tr><tr><td><code>token</code></td><td>address</td><td>교환되어 받을토큰</td></tr><tr><td><code>amountOut</code></td><td>uint256</td><td>원하는 출력량</td></tr></tbody></table>

[**​**](https://docs.uniswap.org/contracts/v3/reference/core/UniswapV3Pool#parameters)**Return Values:**

<table><thead><tr><th width="219.66666666666666">Name</th><th width="101">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>amountIn</code></td><td>uint256</td><td><code>amountOut</code>을 받기 위해 스왑에 대한 입력으로 필요한 금액</td></tr><tr><td><code>sqrtPriceX96After</code></td><td>uint160</td><td>스왑 후 sqrt 가격</td></tr></tbody></table>

**estimate**

```solidity
function estimate(
    contract IUniswapV3Pool pool,
    bool zeroForOne,
    int256 amountSpecified
) public view returns (int256 amount0, int256 amount1, uint160 sqrtPriceX96After) {
```

**Parameters:**

<table><thead><tr><th width="202.66666666666666">Name</th><th width="178">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>pool</code></td><td><code>contract IUniswapV3Pool</code></td><td>풀 주소</td></tr><tr><td><code>zeroForOne</code></td><td>bool</td><td>스왑 방향이 0 -> 1인지?</td></tr><tr><td><code>amountSpecified</code></td><td>int256</td><td>지정된 양의 토큰</td></tr></tbody></table>

[**​**](https://docs.uniswap.org/contracts/v3/reference/core/UniswapV3Pool#parameters)**Return Values:**

<table><thead><tr><th width="219.66666666666666">Name</th><th width="101">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>amount0</code></td><td>int256</td><td>변경된 token0 수량</td></tr><tr><td><code>amount1</code></td><td>int256</td><td>변경된 token1 수량</td></tr><tr><td><code>sqrtPriceX96After</code></td><td>uint160</td><td>스왑 후 sqrt 가격</td></tr></tbody></table>

[**​**](https://docs.uniswap.org/contracts/v3/reference/core/UniswapV3Pool#parameters)
{% endtab %}
{% endtabs %}


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


# V3Treasury

해당 컨트랙트는 V3 풀 에어드랍 운영을 관리합니다. 권한을 가진 운영자는 V3Treasury 계약을 통해 에어드롭을 설정하고 실행할 수 있습니다. Airdrop은 token0과 token1만 가능합니다.

## Code

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

## Address

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

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

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

## Events

**DeployAirdropOperator**

```solidity
event DeployAirdropOperator(address operator);
```

{% endtab %}

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

## **State-Changing Functions**

**deployAirdropOperator**

```solidity
function deployAirdropOperator(
    address token, 
    address pool
) external returns (
    address operator
)
```

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

<table><thead><tr><th width="139.66666666666666">Name</th><th width="109">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>token</code></td><td>address</td><td>에어드랍 할 토큰 주소</td></tr><tr><td><code>pool</code></td><td>address</td><td>에어드랍할 풀 주소</td></tr></tbody></table>

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

<table><thead><tr><th width="139.66666666666666">Name</th><th width="115">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>operator</code></td><td>address</td><td>V3AirdropOperator이 배포된 주소</td></tr></tbody></table>
{% endtab %}
{% endtabs %}


# V3AirdropOperator

해당 컨트랙트는 각 에어드롭을 운영합니다. 에어드랍되는 LP와 토큰은 생성 시점에 결정되며 수정할 수 없습니다.

## Code

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

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

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

## Read-Only Functions

**getAirdropStat**

```solidity
function getAirdropStat() external view returns (
    uint256 totalAmount,
    uint256 blockAmount,
    uint256 distributableBlock,
    uint256 endBlock,
    uint256 distributed,
    uint256 remain,
    bool created
) 
```

**Return Values:**

<table><thead><tr><th width="239.66666666666663">Name</th><th width="107">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>totalAmount</code></td><td>uint256</td><td>에어드랍 총 물량</td></tr><tr><td><code>blockAmount</code></td><td>uint256</td><td>블록당 에어드랍된 토큰의 양</td></tr><tr><td><code>distributableBlock</code></td><td>uint256</td><td>에어드랍가능한 블록의 블록 번호</td></tr><tr><td><code>endBlock</code></td><td>uint256</td><td>에어드랍 종료되는 블록 번호</td></tr><tr><td><code>distributed</code></td><td>uint256</td><td>현재 분배된 양</td></tr><tr><td><code>remain</code></td><td>uint256</td><td>남아있는 양</td></tr><tr><td><code>created</code></td><td>bool</td><td>초기화되었는지 여부</td></tr></tbody></table>

**getDistributionId**

```solidity
function getDistributionId() public view returns (bytes32 id)
```

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

<table><thead><tr><th width="119.66666666666666">Name</th><th width="116">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>id</code></td><td>bytes32</td><td>에어드랍 ID</td></tr></tbody></table>
{% endtab %}

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

## **State-Changing Functions**

**changeNextOwner**

```solidity
function changeNextOwner(address _nextOwner) external
```

**changeOwner**

```solidity
function changeOwner() external
```

**createDistribution**

```solidity
function createDistribution(
    uint256 totalAmount,
    uint256 blockAmount,
    uint256 startBlock
) external
```

**Parameters:**

<table><thead><tr><th width="175.66666666666666">Name</th><th width="102">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>totalAmount</code></td><td>uint256</td><td>Total number of tokens to be distributed by airdrop</td></tr><tr><td><code>blockAmount</code></td><td>uint256</td><td>Token quantity to be distributed per block</td></tr><tr><td><code>startBlock</code></td><td>uint256</td><td>Airdrop start block number</td></tr></tbody></table>

**deposit**

```solidity
function deposit(uint256 amount) external
```

If there is an issue of token exhaustion or extension during the airdrop process, tokens can be recharged using the AirdropOperator's Deposit function.

* When executing the function, transfer more than the amount of tokens entered into the wallet.
* The token specified when creating the operator is charged.
* When recharging due to exhaustion, it will be applied from the block after recharging.

**refixBlockAmount**

```solidity
function refixBlockAmount(uint256 blockAmount) external
```

* Modify the amount of tokens distributed per block
* It is applied from the block after the transaction is executed.

**withdraw**

```solidity
function withdraw(address _token) external
```

* The remaining tokens can be withdrawn after the Airdrop plan is in progress.
* Withdrawal will be made to the owner's account.
  {% endtab %}
  {% endtabs %}


# UniversalRouter

해당 컨트랙트는 V2 및 V3 풀을 사용하는 KLAYswap 라우터입니다. 이 계약은 V2 및 V3 풀에서 거래를 집계하여 사용자가 매우 유연하고 개인화된 거래에 액세스할 수 있도록 합니다.

## Code

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

## Address

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

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

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

## Parameter Structs

**SwapParams**

```solidity
struct SwapParams {
    address to;
    address[] path;
    address[] pool;
    uint256 deadline;
}
```

**Parameters:**

<table><thead><tr><th width="142.66666666666663">Name</th><th width="107">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>to</code></td><td>address</td><td>교환 후 토큰을 받게 될 주소</td></tr><tr><td><code>path</code></td><td>address[]</td><td>스왑 경로(토큰 주소 목록)</td></tr><tr><td><code>pool</code></td><td>address[]</td><td>스왑의 풀 경로(풀 주소 목록) <br>v2 pool 사용 시 : <code>address(0)</code> <br>v3 pool 사용 시 : <code>v3 풀 주소</code></td></tr><tr><td><code>deadline</code></td><td>uint256</td><td>deadline</td></tr></tbody></table>
{% endtab %}

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

## Read-Only Functions

**getAmountsOut**

```solidity
function getAmountsOut(
    uint256 amountIn, 
    address[] memory path, 
    address[] memory pool
) public view returns (
    uint256[] memory amounts
)
```

**Parameters:**

<table><thead><tr><th width="142.66666666666663">Name</th><th width="107">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>amountIn</code></td><td>uint256</td><td>지불해야 하는 첫 번째 토큰의 양</td></tr><tr><td><code>path</code></td><td>address[]</td><td>스왑 경로(토큰 주소 목록)</td></tr><tr><td><code>pool</code></td><td>address[]</td><td>스왑의 풀 경로(풀 주소 목록) <br>v2 pool 사용 시 : <code>address(0)</code> <br>v3 pool 사용 시 : <code>v3 풀 주소</code></td></tr></tbody></table>

**Return Values:**

<table><thead><tr><th width="129.66666666666666">Name</th><th width="115">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>amounts</code></td><td>uint256[]</td><td>입력 토큰 금액 및 모든 후속 출력 토큰 금액.</td></tr></tbody></table>

**getAmountsIn**

```solidity
function getAmountsIn(
    uint256 amountOut, 
    address[] memory path, 
    address[] memory pool
) public view returns (
    uint256[] memory amounts
)
```

**Parameters:**

<table><thead><tr><th width="147.66666666666666">Name</th><th width="107">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>amountOut</code></td><td>uint256</td><td>마지막으로 받을 토큰의 양</td></tr><tr><td><code>path</code></td><td>address[]</td><td>스왑 경로(토큰 주소 목록)</td></tr><tr><td><code>pool</code></td><td>address[]</td><td>스왑의 풀 경로(풀 주소 목록) <br>v2 pool 사용 시 : <code>address(0)</code> <br>v3 pool 사용 시 : <code>v3 풀 주소</code></td></tr></tbody></table>

**Return Values:**

<table><thead><tr><th width="129.66666666666666">Name</th><th width="115">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>amounts</code></td><td>uint256[]</td><td>입력 토큰 금액 및 모든 후속 출력 토큰 금액.</td></tr></tbody></table>
{% endtab %}

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

## **State-Changing Functions**

**swapExactTokensForTokens**

```solidity
function swapExactTokensForTokens(
    uint256 amountIn, 
    uint256 amountOutMin, 
    struct SwapParams calldata p
) external returns (uint256[] memory amounts)
```

경로에 의해 결정된 경로를 따라 가능한 한 많은 출력 토큰에 대해 정확한 양의 입력 토큰을 교환합니다.

**Parameters:**

<table><thead><tr><th width="142.66666666666663">Name</th><th width="142">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>amountIn</code></td><td>uint256</td><td>지불할 입력 토큰의 양</td></tr><tr><td><code>amountOutMin</code></td><td>uint256</td><td>트랜잭션이 되돌리지 않기 위해 받아야 하는 출력 토큰의 최소량</td></tr><tr><td><code>p</code></td><td><code>struct SwapParams</code> </td><td>스왑을 위한 <code>struct SwapParams</code></td></tr></tbody></table>

**Return Values:**

<table><thead><tr><th width="129.66666666666666">Name</th><th width="115">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>amounts</code></td><td>uint256[]</td><td>입력 토큰 금액 및 모든 후속 출력 토큰 금액.</td></tr></tbody></table>

**swapTokensForExactTokens**

```solidity
function swapTokensForExactTokens(
    uint256 amountOut, 
    uint256 amountInMax, 
    struct SwapParams calldata p
) external returns (uint256[] memory amounts)
```

경로에 의해 결정된 경로를 따라 가능한 한 적은 입력 토큰에 대해 정확한 양의 출력 토큰을 받습니다.

**Parameters:**

<table><thead><tr><th width="169.66666666666663">Name</th><th width="142">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>amountOut</code></td><td>uint256</td><td>받을 출력 토큰의 양</td></tr><tr><td><code>amountInMax</code></td><td>uint256</td><td>트랜잭션이 되돌리기 전에 필요할 수 있는 입력 토큰의 최대 양</td></tr><tr><td><code>p</code></td><td><code>struct SwapParams</code> </td><td>스왑을 위한 <code>struct SwapParams</code></td></tr></tbody></table>

**Return Values:**

<table><thead><tr><th width="129.66666666666666">Name</th><th width="115">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>amounts</code></td><td>uint256[]</td><td>입력 토큰 금액 및 모든 후속 출력 토큰 금액.</td></tr></tbody></table>

**swapExactETHForTokens**

```solidity
function swapExactETHForTokens(
    uint256 amountOutMin, 
    struct SwapParams calldata p
) external payable returns (uint256[] memory amounts)
```

경로에 의해 결정된 경로를 따라 가능한 한 많은 출력 토큰에 대해 정확한 양의 ETH를 교환합니다.

**Parameters:**

<table><thead><tr><th width="173.66666666666663">Name</th><th width="142">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>msg.value</code></td><td>uint256</td><td>지불할 ETH 금액</td></tr><tr><td><code>amountOutMin</code></td><td>uint256</td><td>트랜잭션이 되돌리지 않기 위해 받아야 하는 출력 토큰의 최소량</td></tr><tr><td><code>p</code></td><td><code>struct SwapParams</code> </td><td>스왑을 위한 <code>struct SwapParams</code></td></tr></tbody></table>

**Return Values:**

<table><thead><tr><th width="129.66666666666666">Name</th><th width="115">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>amounts</code></td><td>uint256[]</td><td>입력 토큰 금액 및 모든 후속 출력 토큰 금액.</td></tr></tbody></table>

**swapTokensForExactETH**

```solidity
function swapTokensForExactETH(
    uint256 amountOut, 
    uint256 amountInMax, 
    struct SwapParams calldata p
) external returns (uint256[] memory amounts)
```

경로에 의해 결정된 경로를 따라 가능한 한 적은 입력 토큰에 대해 정확한 양의 ETH를 받습니다.

**Parameters:**

<table><thead><tr><th width="173.66666666666663">Name</th><th width="142">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>amountOut</code></td><td>uint256</td><td>받을 ETH 금액</td></tr><tr><td><code>amountInMax</code></td><td>uint256</td><td>트랜잭션이 되돌리기 전에 필요할 수 있는 입력 토큰의 최대 양</td></tr><tr><td><code>p</code></td><td><code>struct SwapParams</code> </td><td>스왑을 위한 <code>struct SwapParams</code></td></tr></tbody></table>

**Return Values:**

<table><thead><tr><th width="129.66666666666666">Name</th><th width="115">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>amounts</code></td><td>uint256[]</td><td>입력 토큰 금액 및 모든 후속 출력 토큰 금액.</td></tr></tbody></table>

**swapExactTokensForETH**

```solidity
function swapExactTokensForETH(
    uint256 amountIn, 
    uint256 amountOutMin, 
    struct SwapParams calldata p
) external returns (uint256[] memory amounts)
```

경로에 의해 결정된 경로를 따라 가능한 한 많은 ETH에 대해 정확한 양의 토큰을 스왑합니다.

**Parameters:**

<table><thead><tr><th width="173.66666666666663">Name</th><th width="142">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>amountIn</code></td><td>uint256</td><td>지불할 입력 토큰의 양</td></tr><tr><td><code>amountOutMin</code></td><td>uint256</td><td>트랜잭션이 되돌리지 않기 위해 받아야 하는 출력 토큰의 최소량</td></tr><tr><td><code>p</code></td><td><code>struct SwapParams</code> </td><td>스왑을 위한 <code>struct SwapParams</code></td></tr></tbody></table>

**Return Values:**

<table><thead><tr><th width="129.66666666666666">Name</th><th width="115">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>amounts</code></td><td>uint256[]</td><td>입력 토큰 금액 및 모든 후속 출력 토큰 금액.</td></tr></tbody></table>

**swapETHForExactTokens**

```solidity
function swapETHForExactTokens(
    uint256 amountOut,
    struct SwapParams calldata p
) external payable returns (uint256[] memory amounts)
```

경로에 의해 결정된 경로를 따라 가능한 한 많은 ETH에 대해 정확한 양의 토큰을 스왑합니다.

**Parameters:**

<table><thead><tr><th width="173.66666666666663">Name</th><th width="142">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>amountOut</code></td><td>uint256</td><td>받을 토큰의 양</td></tr><tr><td><code>msg.value</code> (amountInMax)</td><td>uint256</td><td>트랜잭션을 되돌리기 전에 요구할 수 있는 최대 ETH 금액</td></tr><tr><td><code>p</code></td><td><code>struct SwapParams</code> </td><td>스왑을 위한 <code>struct SwapParams</code></td></tr></tbody></table>

**Return Values:**

<table><thead><tr><th width="129.66666666666666">Name</th><th width="115">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>amounts</code></td><td>uint256[]</td><td>입력 토큰 금액 및 모든 후속 출력 토큰 금액.</td></tr></tbody></table>

{% endtab %}
{% endtabs %}


# Airdrop

Airdrop 은 Exchange 컨트랙트의 giveReward 함수가 호출될 때 Treasury에 저장된 Airdrop 계약들을 \
확인하여 유동성 공급자에게 토큰을 분배하게 됩니다.

\
**AirdropOperator**

* Airdrop 계획을 수립, 권한을 보유한 Contract

**Treasury**

* Airdrop 에 사용될 자산을 관리하는 Contract


# Airdrop Operator 권한 획득

## 1. Contract Deploy

{% tabs %}
{% tab title="Deploy Guide" %}

* **Airdrop 진행할 LP와 Token은 생성 시 정해지며 수정이 불가능합니다.**
* **Contract가 Public 환경에 배포되었는지 확인해주세요**.
* Owner 계정의 보안에 유의해주세요.
* Klaytn 의 Smart contract deploy 는 [여기](https://scope.klaytn.com/contract/submission) 를 참고해주세요.
* KLAY를 Airdrop Token으로 사용할 경우 Token Address는`0x0000000000000000000000000000000000000000` 로 설정해야 합니다.
  {% endtab %}

{% tab title="AirdropOperator Smart Contract Code" %}

```
pragma solidity 0.5.6;

interface IKIP7 {
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function approve(address spender, uint256 amount) external returns (bool);
    function decimals() external view returns (uint8);
}

interface DistributionLike {
    function estimateEndBlock() external view returns (uint);
    function totalAmount() external view returns (uint);
    function blockAmount() external view returns (uint);
    function distributableBlock() external view returns (uint);
    function distribution() external view returns (uint);
    function targetEntries(uint) external view returns (address);
    function targetCount() external view returns (uint);
    function distributionRate(address) external view returns (uint);
}

interface TreasuryLike {
    function fee() external view returns (uint);
    function validOperator(address) external view returns (bool);
    function distributions(address, address) external view returns (address);
    function createKlayDistribution(uint, uint, address[] calldata, uint[] calldata) external payable;
    function createTokenDistribution(address, uint, uint, uint, address[] calldata, uint[] calldata) external;
    function depositKlay() external payable;
    function depositToken(address, uint) external;
    function refixBlockAmount(address, uint) external;
    function refixDistributionRate(address, address[] calldata, uint[] calldata) external;
}

interface FactoryLike {
    function poolExist(address) external view returns (bool);
}

contract Operator {
    address constant public treasury = 0x29990aaF04f3D5Ac7d8C88beab1A009C1Ab4936e;
    address constant public ksp = 0xC6a2Ad8cC6e4A7E08FC37cC5954be07d499E7654;

    address public owner;
    address public nextOwner;
    address public token;
    address public lp;

    constructor(address _token, address _lp) public {
        owner = msg.sender;

        token = _token;
        if(token != address(0)) require(IKIP7(token).decimals() != 0);

        lp = _lp;
        require(FactoryLike(ksp).poolExist(lp));
    }

    function version() external pure returns (string memory) {
        return "AirdropOperator20210824";
    }

    // valid fallback
    function () payable external { }

    // ======================= owner method ===========================

    modifier onlyOwner {
        require(msg.sender == owner);
        _;
    }

    function changeNextOwner(address _nextOwner) public onlyOwner {
        nextOwner = _nextOwner;
    }

    function changeOwner() public {
        require(msg.sender == nextOwner);

        owner = nextOwner;
        nextOwner = address(0);
    }

    //withdraw tokens remaining in the operator contract
    function withdraw(address tokenAddr) public onlyOwner {
        uint balance = 0;
        if(tokenAddr == address(0)){
            balance = (address(this)).balance;
            if(balance > 0){
                (bool res, ) = owner.call.value(balance)("");
                require(res);
            }
        }
        else{
            balance = IKIP7(tokenAddr).balanceOf(address(this));
            if(balance > 0){
                require(IKIP7(tokenAddr).transfer(owner, balance));
            }
        }
    }

    // ====================== Stat ====================================

    function getAirdropStat() public view returns (
        address distributionContract, // airdrop distribution contract address
        uint totalAmount, // Total amount of tokens to be distributed
        uint blockAmount, // Amount of tokens to be distributed per block
        uint distributableBlock, // Block number to airdrop start
        uint endBlock, // Block number to airdrop end
        uint distributed,  // Amount of tokens distributed
        uint remain, // amount remaining in the contract 
        uint targetCount, // airdrop target LP count
        address[] memory targets, // airdrop target LP list
        uint[] memory rates // airdrop target lp rate list
    ){
        distributionContract = TreasuryLike(treasury).distributions(address(this), token);

        DistributionLike dis = DistributionLike(distributionContract);
        totalAmount = dis.totalAmount();
        blockAmount = dis.blockAmount();
        distributableBlock = dis.distributableBlock();
        endBlock = dis.estimateEndBlock();
        distributed = dis.distribution();
        if(token == address(0)){
            remain = (distributionContract).balance;
        }
        else{
            remain = IKIP7(token).balanceOf(distributionContract);
        }

        targetCount = dis.targetCount();
        targets = new address[](targetCount);
        rates = new uint[](targetCount);

        for(uint i = 0; i < targetCount; i++){
            targets[i] = dis.targetEntries(i);
            rates[i] = dis.distributionRate(targets[i]);
        }
    }

    // ===================== Airdrop method ===========================
    ///@param totalAmount : Total amount of tokens to be distributed
    ///@param blockAmount : Amount of tokens to be distributed per block
    ///@param startBlock  : Block number to airdrop start
    function createDistribution(
        uint totalAmount,
        uint blockAmount,
        uint startBlock
    ) public onlyOwner {
        TreasuryLike Treasury = TreasuryLike(treasury);

        require(Treasury.validOperator(address(this)));
        require(Treasury.distributions(address(this), token) == address(0));
        require(startBlock >= block.number);

        address[] memory targets = new address[](1);
        targets[0] = lp;

        uint[] memory rates = new uint[](1);
        rates[0] = 100;

        if(Treasury.fee() > 0){
            require(IKIP7(ksp).balanceOf(address(this)) >= Treasury.fee());
            require(IKIP7(ksp).approve(treasury, Treasury.fee()));
        }

        if(token == address(0)){
            require((address(this)).balance >= totalAmount);
            Treasury.createKlayDistribution.value(totalAmount)(blockAmount, startBlock, targets, rates);
        }
        else {
            require(IKIP7(token).balanceOf(address(this)) >= totalAmount);
            require(IKIP7(token).approve(treasury, totalAmount));
            Treasury.createTokenDistribution(token, totalAmount, blockAmount, startBlock, targets, rates);
        }
    }

    // Airdrop token deposit
    ///@param amount : Amount of airdrop token to deposit
    function deposit(uint amount) public onlyOwner {
        TreasuryLike Treasury = TreasuryLike(treasury);

        require(Treasury.validOperator(address(this)));
        require(Treasury.distributions(address(this), token) != address(0));
        require(amount != 0);

        if(token == address(0)){
            require((address(this)).balance >= amount);
            Treasury.depositKlay.value(amount)();
        }
        else{
            require(IKIP7(token).balanceOf(address(this)) >= amount);
            require(IKIP7(token).approve(treasury, amount));
            Treasury.depositToken(token, amount);
        }
    }

    // Airdrop amount per block modification function 
    // The function is applied immediately from the called block 
    ///@param blockAmount : airdrop block amount to change
    function refixBlockAmount(uint blockAmount) public onlyOwner {
        TreasuryLike Treasury = TreasuryLike(treasury);

        require(Treasury.validOperator(address(this)));
        require(Treasury.distributions(address(this), token) != address(0));
        require(blockAmount != 0);

        Treasury.refixBlockAmount(token, blockAmount);
    }
}

```

{% endtab %}
{% endtabs %}

## 2. Contract Submission

* [Klaytnscope Contract Submission](https://scope.klaytn.com/contract/submission)

## 3. ValidOperator Request

* &#x20;Operator 등록요청 (<support@klayswap.com>)&#x20;
* Public AirdropOperator Code로 배포된 contract 확인 과정 후 Valid Operator 설정&#x20;


# Airdrop 계획 진행

Airdrop Operator 권한을 획득한 Contract 는 생성 시 정한 유동성 풀과 토큰을 이용해 Airdrop을 시작할 수 있습니다.&#x20;

{% hint style="warning" %}

1. Amount 설정 시 사용되는 단위는 Decimal이 포함된 단위입니다.

   예) KLAY 10개 = 10 \* (10^18) = 10000000000000000000
2. KLAY를 Airdrop Token으로 설정 시 \
   zero address(`0x0000000000000000000000000000000000000000`)로 설정해야 합니다.
3. Airdrop 설정은 Contract 마다 1개의 LP, 1개의 Token 만 설정 가능하므로 다른 LP 혹은 다른 Token 설정 시 새로운 Airdrop Contract를 배포해야 합니다.&#x20;
   {% endhint %}

### Airdrop 수수료&#x20;

* Airdrop 생성에는 일정량의 KSP가 필요할 수 있습니다.&#x20;
* KSP 수수료가 있다면 생성 전 필요한 KSP를 Operator에 전송해야 합니다.

### Airdrop 생성

AirdropOperator Contract의 createDistribution 함수를 실행합니다.

* Valid Operator 권한 획득 후 진행해야 합니다.&#x20;
* 필요한 토큰의 수량과 수수료는 Contract에 Deposit이 아닌 Transfer 해두어야 합니다.&#x20;
* Request Parameters
  * totalAmount : Airdrop으로 분배할 총 Token 수량
  * blockAmount : 블럭마다 분배할 Token 수량
  * startBlock : Airdrop 시작 Block 번호

```
function createDistribution(
    uint totalAmount,
    uint blockAmount,
    uint startBlock,
) public
```

### Airdrop Token 충전

Airdrop 진행 중 Token 소진, 연장의 이슈가 있어 Token이 부족하다면 AirdropOperator Contract의  Deposit 함수로 토큰을 충전할 수 있습니다.

* 함수 실행 시 지갑에 입력한 amount 이상의 토큰을 Transfer 해두어 합니다.
* Operator 생성 시에 지정한 Token을 충전합니다.
* 물량 소진으로 재 충전 시, 충전 이후 Block 부터 적용됩니다.

```
function deposit(uint amount) public
```

### Airdrop 수정

* 블럭 당 분배되는 토큰의 양을 수정합니다
* Transaction이 실행된 다음 Block부터 적용됩니다.

```
function refixBlockAmount(uint blockAmount) public
```

### **Airdrop 토큰 출금**

* Airdrop 계획 진행 후 남아있는 토큰을 출금할 수 있습니다.
* Owner 계정으로 출금됩니다.

```
function withdraw(address tokenAddr) public
```


# 클레이스왑 가이드

{% content-ref url="/pages/-M\_eSvNsnvK4-wDcBp9R" %}
[서비스에 연결하기](/how-to-guides/wallet-connect)
{% endcontent-ref %}

{% content-ref url="/pages/-M\_3bZRTBMuIkRuSlSjT" %}
[활용할 자산 입금하기](/how-to-guides/deposit)
{% endcontent-ref %}

{% content-ref url="/pages/-M\_eUwSK5jNnb-t-ovwI" %}
[풀에 예치하기](/how-to-guides/pool-deposit)
{% endcontent-ref %}

{% content-ref url="/pages/-M\_eVD6JFt6-LcWM-aqn" %}
[\[클립\] 모바일에서 KSP 스테이킹 하기](/how-to-guides/stake-and-boost/mobile-klip)
{% endcontent-ref %}

{% content-ref url="/pages/-M\_eVLz\_3x3jHak2AIkJ" %}
[\[클립\] PC에서 풀 투표 하기](/how-to-guides/stake-and-boost/pool-vote)
{% endcontent-ref %}


# 서비스에 연결하기

탈중앙 금융 시스템 상에서는 별도의 회원 계정 체계가 아닌, 고유한 블록체인 지갑을 통해\
서비스와 상호작용(연결)을 진행합니다. KLAYswap은 클레이튼 체인 기반의 서비스로, \
클레이튼 자산을 지원하는 아래 지갑을 통해 서비스 연결이 가능합니다.<br>

* **카카오톡 클립(Klip) 지갑** \
  클립은 카카오톡 앱에 내장된 블록체인 지갑으로, PC와 모바일에서 모두 편리한 연결을 지원합니다.

{% content-ref url="/pages/-M\_nCeNxozPfoGTf5zBK" %}
[\[클립\] PC에서 연결하기](/how-to-guides/wallet-connect/pc-klip)
{% endcontent-ref %}

{% content-ref url="/pages/-M\_nDN5r4CT\_BmoCZWQy" %}
[\[클립\] 모바일에서 연결하기](/how-to-guides/wallet-connect/klip-mobile)
{% endcontent-ref %}

* **카이카스(Kaikas) 지갑**\
  크롬 브라우저의 확장 프로그램으로,  PC에서만 사용이 가능합니다.  [카이카스 설치하기 ](https://chrome.google.com/webstore/detail/kaikas/jblndlipeogpafnldhgmapagcccfchpi?hl=ko)

{% content-ref url="/pages/-M\_eUU-VpVwKAXXg5dQr" %}
[\[카이카스\] PC에서 연결하기](/how-to-guides/wallet-connect/pc-kaikas)
{% endcontent-ref %}

* **디센트(D'CENT) 지갑**\
  &#x20;하드웨어, 모바일앱 월렛을 모두 지원하는 지갑입니다.&#x20;

&#x20;       [콜드월렛 연결하기(디센트 제공 가이드)](https://userguide.dcentwallet.com/v/kr/biometric-wallet/setting-up)

&#x20;        [모바일 앱 연결하기 (디센트 제공 가이드)](https://userguide.dcentwallet.com/v/kr/mobile-app/intro)


# \[클립] PC에서 연결하기

1. 우측 상단 "**지갑연결**" 클릭 후, \[**카카오 klip 지갑으로 연결**] 버튼을 클릭합니다.&#x20;

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/qjs2XOSEgaA9yDCZkDEO/image.png)

2\. 카카오톡 앱을 실행하여 화면에 표시된 QR 코드를 스캔합니다.&#x20;

{% hint style="info" %}
1\) 카카오톡 앱 실행 - 2) 상단 검색창&#x20;
{% endhint %}

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/RsqnMoOqijVSPSsZtWRI/image.png)

3\. QR 코드 스캔 시 자동으로 클립 지갑이 실행됩니다.  \[**다음**] 버튼을 클릭하여 \
&#x20;   KLAYswap 서비스에 연결을 완료합니다.&#x20;

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/HwsElZvo4NDoNneuEluk/image.png)

4\. 지갑 연결이 완료되면 PC 화면상에서 연결된 지갑 주소를 확인할 수 있습니다.&#x20;

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/eQfJfElasSkhHxVSL8p8/image.png)


# \[클립] 모바일에서 연결하기

1. 우측 상단의 메뉴를 열어 \[**지갑연결**] 버튼을 선택합니다. 지갑 연결 팝업 상의 \
   \[**카카오 Klip 지갑으로 연결**]을 클릭하여 카카오톡에서 열기를 실행합니다. <br>

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/sE4vSjrZsuUB6oxwzQmW/image.png)

\
2\. 자동으로 클립 지갑이 실행되며,  \[**다음**] 버튼을 클릭하여 KLAYswap 서비스에 연결을 완료합니다.&#x20;

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/HwsElZvo4NDoNneuEluk/image.png)

3\. 지갑 연결이 완료되면 모바일 웹 화면상에서 연결된 지갑 주소를 확인할 수 있습니다.&#x20;

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/6FLMz2svtiBH7v5QtC7Z/image.png)


# \[카이카스] PC에서 연결하기

{% hint style="info" %}
1\) 크롬 브라우저 상에서 카이카스 지갑 설치를 완료해주세요.\
2\) 카이카스 지갑 설치 , 내 지갑 생성을 완료해주세요.&#x20;
{% endhint %}

1. 우측 상단 "**지갑연결**" 클릭 후, \[**Kaikas 지갑으로 연]** 버튼을 클릭합니다.&#x20;

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/DqxMhqSqey7YrwuJwQMh/image.png)

2\. 자동으로 브라우저에 설치된 Kaikas 지갑이 실행됩니다. \[**Connect**] 버튼을 클릭하여 \
&#x20;  KLAYswap 서비스에 연결을 완료합니다.&#x20;

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/rsWY2bSUleZ8lzxbU6wY/image.png)

3\. 지갑 연결이 완료되면 PC 화면상에서 연결된 지갑 주소를 확인할 수 있습니다.&#x20;

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/eQfJfElasSkhHxVSL8p8/image.png)

​<br>


# 활용할 자산 입금하기

거래소/개인지갑에 보유중인 암호화폐는 먼저 내 클레이튼 지갑으로 입금한 후 클레이스왑\
예치에 활용할 수 있습니다.&#x20;

이더리움, 리플, 클레이튼 등 모든 블록체인은 각 체인별로 고유의 토큰 형식이 존재하므로,  \
아래 **블록 체인별 지원 자산 목록** 에서 입금할 자산을 확인한 후, 클레이튼 지갑으로 전송하는 \
방법을 확인해주세요.

{% content-ref url="/pages/-M\_3ijbq-e2rE1ECpeiu" %}
[클레이튼 자산 입금하기](/how-to-guides/deposit/depositklaytn)
{% endcontent-ref %}

{% content-ref url="/pages/-M\_3iySDD9DbcIJI4KRy" %}
[리플 자산 입금하기](/how-to-guides/deposit/depositxrp)
{% endcontent-ref %}

{% content-ref url="/pages/-M\_3ipDeKQFdoXOw7giZ" %}
[이더리움/BSC 자산 입금하기](/how-to-guides/deposit/depositethereum)
{% endcontent-ref %}

###

### 블록 체인별 지원 자산  목록&#x20;

| Klaytn             | XRP Ledger | Ethereum       | BSC          |
| ------------------ | ---------- | -------------- | ------------ |
| 클레이 (KLAY)         | 리플 (XRP)   | 이더리움 (ETH)     | 바이낸스 코인(BNB) |
| 클레이스왑프로토콜 (KSP)    |            | 랩트비티코인 (WBTC)  | 벨트(BELT)     |
| 에스클레이 (SKLAY)      |            | 오르빗체인 (ORC)    | 비너스(XVS)     |
| 클레이튼이더리움 (KETH)    |            | 테더(USDT)       | 팬케이크스왑(CAKE) |
| 클레이튼랩트비트코인 (KWBTC) |            | 다이 (DAI)       | 오토팜(AUTO)    |
| 클레이튼오르빗체인(KORC)    |            | 트라이엄프엑스 (TRIX) | 비피(BIFI)     |
| 클레이튼테더(KUSDT)      |            | 핸디 (HANDY)     |              |
| 클레이튼다이(KDAI)       |            | 듀카토 (DUCATO)   |              |
| 클레이튼리플(KXRP)       |            | 토카막네트워크(TON)   |              |
| 클레이튼트라이엄프엑스(KTRIX) |            | 퀸비(QBZ)        |              |
| 클레이튼핸디(KHANDY)     |            | 스트림프로토콜(STPL)  |              |
| 클레이튼두카토(KDUCATO)   |            |                |              |
| 클라우드브릭(CLBK)       |            |                |              |
| 클레이튼바이낸스코인(KBNB)   |            |                |              |
| 클레이튼벨트(KBELT)      |            |                |              |
| 클레이비너스(KXVS)       |            |                |              |
| 클레이튼팬케이크스왑(KCAKE)  |            |                |              |
| 클레이튼오토팜(KAUTO)     |            |                |              |
| 클레이튼비피(KBIFI)      |            |                |              |
| 클레이튼토카막네트워크(KTON)  |            |                |              |
| 클레이튼스트림프로토콜(KSTPL) |            |                |              |
| 클레이튼퀸비(KQBZ)       |            |                |              |
| 트리클(TRCL)          |            |                |              |
| 미네랄(MNR)           |            |                |              |
| 썸씽(SSX)            |            |                |              |
| 인슈어리움(ISR)         |            |                |              |
| 에어블록(ABL)          |            |                |              |
| 위믹스(WEMIX)         |            |                |              |
| 피블(PIB)            |            |                |              |
| 프로젝트위드(WIKEN)      |            |                |              |
| 블루바이칼(BBC)         |            |                |              |
| 힌트(HINT)           |            |                |              |
| 레디(REDi)           |            |                |              |
| 아고브 (AGOV)         |            |                |              |
| 힙스(HIBS)           |            |                |              |
| 카이 토큰(KAI)         |            |                |              |
| 카이 쉐어 토큰(sKAI)     |            |                |              |
| 식스(SIX)            |            |                |              |


# 클레이튼 자산 입금하기

클레이튼 체인의 기축 암호화폐는 클레이(KLAY) 이며, 클레이스왑프로토콜(KSP), 에스클레이(SKLAY)와 \
같은 'KCT' 표준 형태를 따르는 다양한 토큰들이 존재합니다.&#x20;

클레이튼 체인 자산은 거래소에서 내 클레이튼 지갑주소로 자산을 전송하면 바로 입금됩니다.<br>

{% hint style="info" %}
암호화폐 특성 상 전송한 자산은 취소가 불가능합니다. \
자산 전송 시 반드시 소량의 입금 테스트 후 실제 자산을 전송하는 것을 권장해드립니다.&#x20;
{% endhint %}

{% tabs %}
{% tab title="클립(Klip) 지갑으로 전송하기" %}
\
1\. 카카오톡 클립에서 **내 지갑 주소**를 확인합니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/SNg99AC8oNfmb5oUlKEt/image.png)

2.거래소/개인지갑 출금 화면의 **출금주소 입력란에 내 지갑주소를 입력한 후 출금**합니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/v1y5HU5KjMkmpTs1Cgyv/image.png)
{% endtab %}

{% tab title="카이카스(Kaikas) 지갑으로 전송하기" %}
\
1\. 카이카에 지갑에서 **내 지갑 주소**를 확인합니다

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/z0rkPhRzaDsHr1E7nBIm/image.png)

\
\
2\. 거래소/개인지갑 출금 화면의 **출금주소 입력란에 내 지갑주소를 입력한 후 출금**합니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/v1y5HU5KjMkmpTs1Cgyv/image.png)
{% endtab %}

{% tab title="디센트(D'CENT) 지갑으로 전송하기" %}

1\. 디센트 지갑에서 **내 지갑 주소**를 확인합니다.&#x20;

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/iHvfqH7qCRlrehENIlk4/image.png)

<br>

2\. 거래소/개인지갑 출금 화면의 **출금주소 입력란에 내 지갑주소를 입력한 후 출금**합니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/v1y5HU5KjMkmpTs1Cgyv/image.png)
{% endtab %}
{% endtabs %}


# 이더리움/BSC 자산 입금하기

거래소/개인지갑에 보관중인 이더리움/BSC 계 자산은 오르빗 브릿지 사이트에서 직접 브릿징을 통해 \
클레이튼 체인의 자산으로 전환하여 입금해야 합니다.&#x20;

* [오르빗 브릿지 사이트 이동](https://bridge.orbitchain.io/)
* [오르빗 브릿지 가이드 확인하기](https://bridge.orbitchain.io/assets/orbitbridge_guide_en.pdf)

{% hint style="info" %}
암호화폐 특성 상 전송한 자산은 취소가 불가능합니다. \
자산 전송 시 반드시 소량의 입금 테스트 후 실제 자산을 전송하는 것을 권장해드립니다.
{% endhint %}


# 리플 자산 입금하기

\
거래소/개인지갑에 보관중인 리플은 내 리플 전용 입금주소로 전송하면 바로 클레이튼 리플(KXRP)로 전\
환하여 입금되며, 클레이스왑에서 리플 예치를 시작할 수 있습니다.   &#x20;

{% hint style="info" %}
암호화폐 특성 상 전송한 자산은 취소가 불가능합니다. \
자산 전송 시 반드시 소량의 입금 테스트 후 실제 자산을 전송하는 것을 권장해드립니다.
{% endhint %}

{% tabs %}
{% tab title="PC에서 입금하기" %}
\
1\. 지갑 연결 후, "**Asset**" 메뉴로 이동하여 \[**XRP로 입금**] 버튼을 클릭합니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/FXSDaAk0ok5qugunYSem/image.png)

\
&#x20; 2\. 내 리플 입금주소를 확인한 후, 거래소 출금 주소에 **입금주소**와 **데스티네이션** **태그**를 \
&#x20;   모두 정확히 입력합니다.\
\
\* 리플은 반드시 입금주소와 태그를 모두 정확히 입력해야 합니다. 주소, 태그 오입력 또는 미입력으로 인한 자산 오전송으로 인한 손실은 복구가 불가능합니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/EdPsaEriiNxsQNf9hYdw/image.png)

3\. 리플 입금이 완료되면, 자산 목록에서 확인할 수 있습니다.&#x20;

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/7Lp6UkLJByzSblDT9bMy/image.png)

<br>
{% endtab %}

{% tab title="모바일에서 입금하기" %}
\
1\. 지갑 연결 후, "**Asset**" 메뉴로 이동하여 \[**XRP로 입금**] 버튼을 클릭합니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/xYcEXMb1Z5HCu8PQgMqH/image.png)

2\. 내 리플 입금주소를 확인한 후, 거래소 출금 주소에 **입금주소**와 **데스티네이션** **태그**를 \
&#x20;   모두 정확히 입력합니다.\
\
\* 리플은 반드시 입금주소와 태그를 모두 정확히 입력해야 합니다. 주소, 태그 오입력 또는 미입력으로 인한 자산 오전송으로 인한 손실은 복구가 불가능합니다.&#x20;

<br>

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/7WiTgscBtC6L48X7kUj0/image.png)

3\. 리플 입금이 완료되면, 자산 목록에서 확인할 수 있습니다.&#x20;

&#x20;

\ <br>
{% endtab %}
{% endtabs %}


# 풀에 예치하기

* **단일 예치 (KLAY)**\
  단일 예치는 클레이튼(KLAY) 자산에 한해 기능을 지원합니다.

* **일반 페어 예치**\
  페어 예치는 두 개의 암호화폐 자산을 쌍(Pair)으로 스마트 컨트랙트에 예치하는 방식입니다.&#x20;

{% content-ref url="/pages/-M\_nivuTUVWDzAuRMauR" %}
[\[클립\] PC에서 일반 페어 예치 하기](/how-to-guides/pool-deposit/pc-klip)
{% endcontent-ref %}

{% content-ref url="/pages/-M\_nhz0xzmfIo4g0PVnK" %}
[\[클립\] 모바일에서 일반 페어 예치 하기](/how-to-guides/pool-deposit/mobile-klip)
{% endcontent-ref %}

{% content-ref url="/pages/-M\_n3ykDFdj1i5J8PU1H" %}
[\[카이카스\] PC에서 일반 페어 예치하기](/how-to-guides/pool-deposit/pc-kaikas)
{% endcontent-ref %}

{% hint style="success" %}
클레이스왑에서 자산을 페어로 예치하려는 경우,  내 지갑에  두 개의 자산을 \
모두 보유하지 않아도 예치가 가능합니다.\
\
아래 **활용할 자산 선택하기** 옵션에 대한 안내를 참고하여 쉽고 편리하게 예치를 진행해보세요.
{% endhint %}

* 플러스 예치<br>


# \[클립] PC에서 단일 예치하기

1\. **\[예치]** 메뉴의 **\[단일 예치]** 페이지로 이동합니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/XEpwu3lCoAM23CdpYCs4/%EC%9D%B4%EB%AF%B8%EC%A7%80%2012.png)

2\. 단일 예치에서 예치하고자 하는 자산을 확인 후 클릭합니다. 예치하고자 하는 암호화폐의 토큰명, 심볼명으로 검색하면 쉽게 토큰을 찾을 수 있습니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/PsP0vGPcGtnygN2Js92j/%EC%9D%B4%EB%AF%B8%EC%A7%80%2013.png)

3\. 목록에서 **\[예치]** 버튼 클릭 시 예치 팝업창이 뜹니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/P5MGLZvfyaeKaTT74nLc/%EC%9D%B4%EB%AF%B8%EC%A7%80%2014.png)

4\. 예치하고자 하는 자산의 수량을 기입하여 “예상 내역”에서 수익률과 지분율 변화를 확인한 후 \[다음 단계로] 버튼을 클릭합니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/OL8am8zaVYTSd8PI1O72/%EC%9D%B4%EB%AF%B8%EC%A7%80%2015.png)

{% hint style="info" %}
**수익률 정보**

* 연간 KSP 분배 수익률(%) 단일 풀 예치자는 풀에 분배되는 1일 KSP 수량에서 각자의 예치 지분율에 따라 KSP를 분배받습니다.

* 연간 예치 수익률(%) 단일 풀 예치자가 예치한 자산은 플러스 예치를 위한 재원으로 활용되며, 플러스 예치자가 자산 활용 시 지불한 비용은 다시 단일 풀 예치자에게 분배합니다. 분배된 수익은 내 예치자산 수량에 자동으로 포함됩니다.
  {% endhint %}

5\. **\[승인하기]** 버튼 클릭 후 카카오톡 앱을 실행하여 화면에 표시된 QR 코드를 스캔합니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/ZzQMYjXu2eSc599hYp82/image.png)

6\. QR 코드 스캔 시 자동으로 클립 지갑이 실행됩니다. **\[다음]** 버튼 클릭 후 클립에서 설정한 비밀번호 입력을 완료해 트랜잭션 승인을 완료합니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/5Nz5Gy7DlcxoPVHOaHok/image%20\(1\).png)

7\. **\[승인하기]** 완료 후 **\[예치하기]** 버튼을 클릭하면 예치가 최종 완료됩니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/2Q59dViqI7LVa6xK7TEK/%EC%9D%B4%EB%AF%B8%EC%A7%80%2016.png)

8\. 예치가 완료되면 예치한 자산 탭에서 “내 예치자산”, “KSP 보상”, “수익률 상세”를 확인할 수 있으며, 실시간 예치 수익률에 따른 이자가 예치한 자산에 누적되어 표시됩니다. 예치/출금으로 잔액 변동 시 현재까지 분배된 KSP 보상이 자동으로 유저 지갑으로 수령됩니다

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/lLCsiH4iX75PT1wtVD7o/%EC%9D%B4%EB%AF%B8%EC%A7%80%2017.png)


# \[부리또월렛] 모바일에서 단일 예치하기

### 요약

<figure><img src="https://lh5.googleusercontent.com/LQbtg2xOrSbQTHE1tsuG9tuhbLCnn6gbJ-N0hHNBn3QHcpXOgqtPPXyRd52B3aoFGXwb00tczUDUkPUs8UWtSXHx7rOpIXPUSplJLE5IZz4vkJvkpqp9AuFe7SMPIJwYDKYTDCaLyYgWNHVILSBQuu4" alt=""><figcaption></figcaption></figure>

1\) 빗썸 등 거래소에서 암호화폐를 구매합니다.

2\) 암호화폐를 부리또 월렛으로 전송합니다.

3\) Dapp 페이지에서 KLAYswap에 접속하고, 부리또 월렛을 연결합니다.

4\) 단일 예치, 페어 예치, 플러스 예치, 포지션 예치 중 원하는 서비스에 예치한 후, 예치 이자와 KSP 보상을 받습니다.

### 1. 빗썸에서 부리또월렛으로 자산 옮기기

암호화폐를 부리또 월렛으로 전송하는 자세한 가이드는 아래를 참고해 주세요.

{% embed url="<https://rotonda.notion.site/9481e1237e0b4b04980b58eb6c21d3e4>" %}

### 2. 부리또월렛에서 KLAYswap 연결하기

dApp > 인기 또는 Exchanges  > KLAYswap

1\) 하단 메뉴에서 “dAPP” 버튼을 클릭한 후, dAPP 페이지에서 상단의 “인기” 탭 또는 “Exchanges” 탭을 클릭합니다.

<figure><img src="https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/GsU7xjtQtPyMzDu34Svf/image.png" alt=""><figcaption></figcaption></figure>

2\) KLAYswap에 접속하고, **\[지갑 연결]** 버튼을 클릭합니다. **\[WalletConnect 지갑 연결]**&#xC744; 클릭해 메인 지갑 연결을 진행합니다.

<figure><img src="https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/XWfzXi75GgKmgrw2nlhW/image.png" alt=""><figcaption></figcaption></figure>

### 3. KLAYswap에서 자산 예치하기

1\) 상단의 **\[예치]** 메뉴의 **\[단일 예치]** 페이지로 이동합니다. &#x20;

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/IUUSKuspR7g3PwzncnkX/image.png)<br>

2\) 풀 목록에서 예치할 자산 풀을 선택한 후, **\[예치]** 버튼을 클릭합니다.

![](https://lh5.googleusercontent.com/rOD8AU4qs-lT3CPIMDFu0iIR6QWYeBzzasdBhTfG3JWOfwYRwLlc-8V5_IT0LfL89Ra_rTVj8GSmggpvLPEkJdke1PNL9cu0u72j-maYMMoKHYvf0BSJWI9EwgfYjq9qVeVJjTGxZR8XLq59T3OYYFY)

{% hint style="info" %}
**Tips**

예치하려는 자산의 이름, 심볼로 검색하면 빠르고 쉽게 찾을 수 있습니다.
{% endhint %}

3\) 자산 예치 팝업에서 보유 수량을 확인한 후, 예치할 수량을 입력하세요. “예상 내역”에서 예치를 진행할 경우의 총 예치 이율과 지분율을 확인할 수 있습니다. 확인을 마친 후 **\[다음 단계로]** 버튼을 클릭해 주세요.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/oXGH9SvwLnwK7T1reXL1/Screenshot_20230213_151225_Burrito.png)

{% hint style="info" %}
**Tips**

"max" 버튼 클릭하면, 실시간으로 가능한 최대 수량으로 트랜잭션이 요청됩니다.&#x20;
{% endhint %}

&#x20;4\) “트랜잭션 요청” 팝업창에서 진행할 단일 예치에 대한 예상 정보를 확인한 후, **\[예치하기]** 버튼을 클릭합니다. 최종적으로 정보를 확인하였다면, 부리또월렛에서 **\[서명 하기]** 버튼을 눌러주세요.

<figure><img src="https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/b5QOV8DONKfibeYjgGbs/image.png" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Tips**

선택한 자산을 KLAYswap에서 거래한 이력이 없다면, 단일 예치 트랜잭션을 진행하기 전에 **토큰 승인 트랜잭션**이 선행됩니다 (최초 1회에 한함).
{% endhint %}

5\) 예치를 완료하면, “내 예치 자산”, “수령 가능 KSP” 를 확인할 수 있습니다. 실시간 예상 수익률에 따라, 이자가 실시간으로 누적됩니다. 만약 추가로 예치하거나 예치중인 자산을 출금하여 “내 예치 자산” 수량이 변경되는 경우, 현재까지 분배된 KSP 보상이 자동으로 유저 지갑으로 수령됩니다.

![](https://lh5.googleusercontent.com/CZjQ98UiX6XoqZnbfqbrx2R5NfgC2-u4SPKcgiDl2cdwpuYofLDjnS6DaCdqmdJSCuXkH8IsvX1f3ffGiEGqHMVeYTfrS7ckNIKo_vjtBVPZ6teJUn2cPV8i_Krdx_2Ol77hatWmUMd5hAjyyBA0T9A)

{% hint style="info" %}
**Tips**

“상세” 버튼 클릭 시, 수익률 상세 정보를 확인할 수 있습니다.

* **예치 수익률 (%)**: 단일 예치자가 예치한 자산은 플러스 예치를 위한 재원으로 활용하며, 플러스 예치자가 지불하는 이자 비용은 단일 풀 예치자에게 분배합니다. 예치 이자는 예치한 자산 수량에 자동으로 포함되며, 원하는 시점에 출금할 수 있습니다.
* **KSP 분배 (%)**: 단일 예치자는 풀에 분배되는 1일 KSP 수량에서 각자의 예치 지분율에 따라 MESH를 분배 받습니다.
  {% endhint %}

<figure><img src="https://lh3.googleusercontent.com/36tpnRhKG3NIR55QV3QZ34cTAq1krKECgsdMX9X04jMcFOuNKJ0Ro4kCeKV_kb9nL8MVKR3SOmmkrm_iv_Z3xZl1fcMesYkjQVIPStz6EnX_Dd-zKiqxyy3E1VzI7KM0aqGaYnXBsREzvu1d_QJSK4E" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Tips**

클레이튼 뿐 아니라 이더리움, 리플, 톤 등 여러 체인의 자산을 KLAYswap의 다양한 서비스에 예치할 수 있습니다. 단일 예치, 페어 예치, 플러스 예치, 롱/숏 포지션 예치 중 투자 성향에 맞는 서비스에 예치하고, 이자 수익과 KSP 보상을 받으세요.
{% endhint %}


# \[클립] PC에서 일반 페어 예치 하기

1. "**Pool**" 메뉴에서 예치할 페어를 확인 후 클릭합니다. 예치하고자 하는 암호화폐의 \
   토큰명, 심볼명으로 검색하면 쉽게 페어를 찾을 수 있습니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/C08UN7gv9smkHdWXlAg3/image.png)

2\. 풀 목록에서 \[**예치**] 를 클릭하여 상세페이지로 이동합니다. "**Deposit**" 메뉴에서 한 쪽 \
자산 수량을 입력하면, 함께 예치하기 위해 필요한 반대쪽 자산 수량이 자동으로 계산되어 입력됩니다.&#x20;

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/8J3Bg76dYgLJ1Pu5c1g2/image.png)

\
\
3\. 이때, 화면 하단에서 예치와 관련된 상세 내역을 확인할 수 있습니다. 사용자는 내 예치과정에서 \
&#x20;   발생할 수 있는 변동 사항에 대해 충분히 숙지하고, 이를 이해한 경우에 예치를 진행해야 합니다. \
&#x20;   표시되는 정보는 모두 **실시간 예상 정보로, 실제 예치 과정에서 차이가 발생할 수 있습니다.**&#x20;

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/6U1B36JppbVRHJpSAFg0/image.png)

{% hint style="info" %}
&#x20;**상세 내역 정보**&#x20;

* **교환비율** \
  현재 KLAYswap 내에서의 두 자산의 가격을 확인할 수 있습니다. <br>
* **지분율** \
  현재 풀 규모를 기준으로, 입력한 자산 예치 시 내 예상 지분율을 확인할 수 있습니다. <br>
* **데일리 보상** \
  현재 풀의 KSP 분배 수익률을 기준으로 입력한 자산 예치 시 1일 동안 분배될 KSP 수량을 확인할 수 있습니다. <br>
* **교환 비율 범위**\
  현재 화면에서 표시된 토큰의 교환 비율(가격)에서  ±1% 범위내에서만 예치를 진행합니다.

  만약, 다른 참여자들이 풀에서  예치와 출금을 진행하여 토큰 교환비율(가격)이 크게 변동하는 경우 내가 예상하지 않은 토큰 가격으로 풀에 예치가 진행되지 않도록 방지하기 위한 안전 장치입니다.반드시 변동 가능한 범위를 충분히 숙지 후 예치를 진행해야 합니다.
  {% endhint %}

4\. 상세 내용 확인 후, \[**Deposit**] 버튼을 클릭합니다. 최초로 예치하는 경우 토큰 승인 절차가 필요할 수 있습니다.  \[**승인하기**] 버튼을 클릭합니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/oFA2XXR8FtDn74ywijDW/image.png)

\
5\. 카카오톡 앱을 실행하여 화면에 표시된 QR 코드를 스캔합니다. <br>

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/pN1aB4OZ6RRoG6OyfVUd/image.png)

\
\
6\. QR 코드 스캔 시 자동으로 클립 지갑이 실행됩니다.  \[**다음**] 버튼 클릭 후 클립에서 설정한 비밀번호 입력을 완료해 트랜잭션 승인을 완료합니다

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/y0XcY9r7Lkoyx2Nz6k1Y/image.png)

\
7\. 최종 예치내역을 확인 후 \[**예치하기**] 버튼을 클릭합니다.&#x20;

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/Dv94PownX0am8e4X8CS3/image.png)

\
\
\
8\. 카카오톡 앱을 실행하여 다시 한번 화면에 표시된 QR 코드를 스캔합니다. 자동으로 실행된 클립 지갑에서 예치 트랜잭션 승인을 완료합니다. <br>

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/pN1aB4OZ6RRoG6OyfVUd/image.png)

\
\
9\. 예치가 완료되면, 상단 "내 **예치자산**" 영역에서 확인할 수 있습니다. 예치 완료 후 부터 \
&#x20;    보상이 실시간으로 분배됩니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/5f9PIp2oZqmiRPOLEAAJ/image.png)


# \[클립] 모바일에서 일반 페어 예치 하기

1. "**Pool**" 메뉴에서 예치할 페어를 확인 후 클릭합니다. 예치하고자 하는 암호화폐의 \
   토큰명, 심볼명으로 검색하면 쉽게 페어를 찾을 수 있습니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/CY45ymtGDF6MM55vFPW7/image.png)

2\. 풀 목록에서 \[**예치**] 를 클릭하여 상세페이지로 이동합니다. "**Deposit**" 메뉴에서 한 쪽 \
자산 수량을 입력하면, 함께 예치하기 위해 필요한 반대쪽 자산 수량이 자동으로 계산되어 입력됩니다.&#x20;

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/GvFUxeN3Ln0vauRoGtwR/image.png)

\
\
3\. 이때, 화면 하단에서 예치와 관련된 상세 내역을 확인할 수 있습니다. 사용자는 내 예치과정에서 \
&#x20;   발생할 수 있는 변동 사항에 대해 충분히 숙지하고, 이를 이해한 경우에 예치를 진행해야 합니다. \
&#x20;   표시되는 정보는 모두 **실시간 예상 정보로, 실제 예치 과정에서 차이가 발생할 수 있습니다.**&#x20;

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/8Lwa4IzavFYpnLLV7k6e/image.png)

{% hint style="info" %}
&#x20;**상세 내역 정보**&#x20;

* **교환비율** \
  현재 KLAYswap 내에서의 두 자산의 가격을 확인할 수 있습니다. <br>
* **지분율** \
  현재 풀 규모를 기준으로, 입력한 자산 예치 시 내 예상 지분율을 확인할 수 있습니다. <br>
* **데일리 보상** \
  현재 풀의 KSP 분배 수익률을 기준으로 입력한 자산 예치 시 1일 동안 분배될 KSP 수량을 확인할 수 있습니다. <br>
* **교환 비율 범위**\
  현재 화면에서 표시된 토큰의 교환 비율(가격)에서  ±1% 범위내에서만 예치를 진행합니다.

  만약, 다른 참여자들이 풀에서  예치와 출금을 진행하여 토큰 교환비율(가격)이 크게 변동하는 경우 내가 예상하지 않은 토큰 가격으로 풀에 예치가 진행되지 않도록 방지하기 위한 안전 장치입니다.반드시 변동 가능한 범위를 충분히 숙지 후 예치를 진행해야 합니다.
  {% endhint %}

4\. 상세 내용 확인 후, \[**Deposit**] 버튼을 클릭한 후, 최종 예치내역을 확인한 후 \[**예치하기**] 버튼을 클릭합니다. \
&#x20;   카카오톡에서 연결 팝업에서 \[**열기**]를 선택합니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/KL8N4BnM7dbUm8Jlu6gW/image.png)

{% hint style="info" %}
최초로 예치하는 경우 토큰 승인 절차가 필요할 수 있습니다.  \[**승인하기**] 절차가 먼저 표시되는 경우, 승인하기 트랜잭션 완료 후 계속해서 예치하기를 진행할 수 있습니다.
{% endhint %}

\
\
5\. 자동으로 클립 지갑이 실행됩니다.  \[**다음**] 버튼 클릭 후 클립에서 설정한 비밀번호 입력을 완료해 트랜잭션 승인을 완료합니다

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/y0XcY9r7Lkoyx2Nz6k1Y/image.png)

\
\
6\. 예치가 완료되면, 상단 "**내** **예치자산**" 영역에서 확인할 수 있습니다. 예치 완료 후 부터 \
&#x20;    보상이 실시간으로 분배됩니다.<br>

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/FBJiM00UCFBVulQO7Fqy/image.png)


# \[카이카스] PC에서 일반 페어 예치하기

1. "**Pool**" 메뉴에서 예치할 페어를 확인 후 클릭합니다. 예치하고자 하는 암호화폐의 \
   토큰명, 심볼명으로 검색하면 쉽게 페어를 찾을 수 있습니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/C08UN7gv9smkHdWXlAg3/image.png)

2\. 풀 목록에서 \[**예치**] 를 클릭하여 상세페이지로 이동합니다. "**Deposit**" 메뉴에서 한 쪽 \
자산 수량을 입력하면, 함께 예치하기 위해 필요한 반대쪽 자산 수량이 자동으로 계산되어 입력됩니다.&#x20;

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/8J3Bg76dYgLJ1Pu5c1g2/image.png)

\
\
3\. 이때, 화면 하단에서 예치와 관련된 상세 내역을 확인할 수 있습니다. 사용자는 내 예치과정에서 \
&#x20;   발생할 수 있는 변동 사항에 대해 충분히 숙지하고, 이를 이해한 경우에 예치를 진행해야 합니다. \
&#x20;   표시되는 정보는 모두 **실시간 예상 정보로, 실제 예치 과정에서 차이가 발생할 수 있습니다.**&#x20;

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/6U1B36JppbVRHJpSAFg0/image.png)

{% hint style="info" %}
&#x20;**상세 내역 정보**&#x20;

* **교환비율** \
  현재 KLAYswap 내에서의 두 자산의 가격을 확인할 수 있습니다. <br>
* **지분율** \
  현재 풀 규모를 기준으로, 입력한 자산 예치 시 내 예상 지분율을 확인할 수 있습니다. <br>
* **데일리 보상** \
  현재 풀의 KSP 분배 수익률을 기준으로 입력한 자산 예치 시 1일 동안 분배될 KSP 수량을 확인할 수 있습니다. <br>
* **교환 비율 범위**\
  현재 화면에서 표시된 토큰의 교환 비율(가격)에서  ±1% 범위내에서만 예치를 진행합니다.

  만약, 다른 참여자들이 풀에서  예치와 출금을 진행하여 토큰 교환비율(가격)이 크게 변동하는 경우 내가 예상하지 않은 토큰 가격으로 풀에 예치가 진행되지 않도록 방지하기 위한 안전 장치입니다.반드시 변동 가능한 범위를 충분히 숙지 후 예치를 진행해야 합니다.
  {% endhint %}

4\. 상세 내용 확인 후, \[**Deposit**] 버튼을 클릭합니다. 최초로 예치하는 경우 토큰 승인 절차가 필요할 수 있습니다.  \[**승인하기**] 버튼을 클릭합니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/xNcV4U4HsEscfMnvrEbJ/image.png)

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/oFA2XXR8FtDn74ywijDW/image.png)

자동으로 카이카스 지갑으로 트랜잭션 요청이 실행되며, \[**Confirm**] 버튼을 클릭하여 승인 트랜잭션을 완료합니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/kQbkZs4AO5QU5CX7WP7W/image.png)

\
\
5\. 최종 예치내역을 확인 후 \[**예치하기**] 버튼을 클릭합니다.&#x20;

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/Dv94PownX0am8e4X8CS3/image.png)

자동으로 카이카스 지갑으로 트랜잭션 요청이 실행되며, \[**Confirm**] 버튼을 클릭하여 예치 트랜잭션을 완료합니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/aQx0kt4zNe9dD7NXxhDh/image.png)

6\. 예치가 완료되면, 상단 "**내** **예치자산**" 영역에서 확인할 수 있습니다. 예치 완료 후 부터 \
&#x20;    보상이 실시간으로 분배됩니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/5f9PIp2oZqmiRPOLEAAJ/image.png)


# \[클립] PC에서 플러스 페어 예치하기

1\. **\[예치]** 메뉴의 **\[플러스 예치]** 페이지로 이동합니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/moLfbD4ubpBHMOXGBMD6/%EC%9D%B4%EB%AF%B8%EC%A7%80%2019.png)

2\. 플러스 예치 하고자하는 페어를 확인한 후, 풀 목록에서 **\[예치]** 버튼을 클릭하여 상세페이지로 이동합니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/WauHAi2qGzPwy2wKihzr/%EC%9D%B4%EB%AF%B8%EC%A7%80%2020.png)

3\. 예치할 자산의 수량을 입력합니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/A13yyySIaRLuBHQsjll3/%EC%9D%B4%EB%AF%B8%EC%A7%80%2021.png)

{% hint style="info" %}

* \[자유비율로 추가] 버튼을 클릭하지 않고 그냥 수량을 입력하는 경우 일반 페어예치와 동일하게 가격 교환 비율에 따라 예치가 진행됩니다.
* \[자유비율로 추가] 버튼을 클릭하는 경우 가격 교환 비율에 상관 없이 페어에 해당 하는 하나 혹은 두 개의 자산을 입력해 예치할 수 있습니다. 자유 비율로 추가 시 자동으로 해당 풀의 교환 비율에 따라 최적에 비율로 페어로 예치합니다.
  {% endhint %}

4\. 유저는 예치하는 자산의 달러 환산 가치를 기준으로 추가 자산을 얼마나 투입할 것인지 플러스 배수 설정을 통해 선택할 수 있습니다. (예치자산 달러 환산 가치) \* (선택한 플러스 배수 - 1) 의 규모만큼 추가로 자산을 투입하게 됩니다. 배수 선택은 기본 1.0배부터 0.5단위로 올릴 수 있으며, 페어별로 최대치가 다릅니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/hJGLYn73JpejCY7eWUcR/%EC%9D%B4%EB%AF%B8%EC%A7%80%2022.png)

5\. 활용할 자산을 선택합니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/AXFqklkwdXemUApMPurw/%EC%9D%B4%EB%AF%B8%EC%A7%80%2022.png)

6\. 예상 내역에서 플러스 예치에 따른 여러 정보를 확인합니다. “자산활용비율” 85% 초과 시 자동반환이 진행됩니다. 따라서 “자산활용비율”을 반드시 확인한 후 **\[예치하기]** 버튼을 클릭해주세요.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/bcacYjbqMjUG2HkGLGot/%EC%9D%B4%EB%AF%B8%EC%A7%80%2023.png)

7\. 플러스 예치 트랜잭션 요청창에서 플러스 예치에 대한 정보를 확인한 뒤 **\[모두 확인하였으며, 계속해서 진행합니다]**&#xCCB4;크박스 선택 후 **\[다음단계로]** 버튼을 클릭합니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/9p7dypwtxFxF7MFFz7yv/%EC%9D%B4%EB%AF%B8%EC%A7%80%2024.png)

8\. **\[승인하기]** 버튼 클릭 후 카카오톡 앱을 실행하여 화면에 표시된 QR 코드를 스캔합니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/OKg9sDC5ROKVf80SpM1i/image.png)

9\. QR 코드 스캔 시 자동으로 클립 지갑이 실행됩니다. **\[다음]** 버튼 클릭 후 클립에서 설정한 비밀번호 입력을 완료해 트랜잭션 승인을 완료합니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/Xx4rRkdz7Ep0FoV3uPz4/image%20\(1\).png)

10\. **\[승인하기**] 완료 후 **\[예치하기]** 버튼을 클릭하면 예치가 최종 완료됩니다. 예치/출금으로 잔액 변동 시 현재까지 분배된 KSP 보상이 자동으로 유저 지갑으로 수령됩니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/troM2BlLT3S90tbaeT71/%EC%9D%B4%EB%AF%B8%EC%A7%80%2025.png)


# \[공통] 활용할 자산 선택하기

클레이스왑에서 자산을 페어로 예치하려는 경우, 내 지갑에 두 개의 자산을 모두 보유하지 않아도 \
쉽고 편리하게 예치가 가능합니다.  \
\
만일 사용자가 예치하려는 페어(A토큰+B토큰)중 한 가지 자산(A또는 B)으로만 예치를 하려고 한다면,\
스마트컨트랙트가 최대의 지분율을 획득할 수 있도록 예치를 요청한 자산의 일정 부분을 \
반대 페어로 스왑(교환)하여 자동으로 페어 예치를 진행하도록 기능을 지원합니다. \ <br>

1. 예치할 페어의 상세 페이지상에서 "**활용할 자산**" 옵션을 확인합니다. \[**클레이튼+리플**] 옵션이 \
   기본 선택된 상태에서 예치하기 위해서는 두 개의 자산을 모두 보유하고 있어야 합니다.&#x20;

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/QfyvgfgIgC6Qx1eaS543/image.png)

&#x20;2\.  활용할 자산 옵션에서 \[**클레이튼**] 또는 \[**리플**] 선택하여 예치할 수 있습니다. 클레이튼(KLAY)를 \
&#x20;     선택하여 예치하면, 일정 수량을 리플(KXRP)로 교환하여 클레이튼+리플로 자동 예치합니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/eUuNu78UAJQPXV1sZew0/image.png)

3\. 이때, 화면 하단에서 스왑 후 예치와 관련된 상세 내역을 확인할 수 있습니다. 사용자는 내 예치과정에서 \
&#x20;   발생할 수 있는 변동 사항에 대해 충분히 숙지하고, 이를 이해한 경우에 예치를 진행해야 합니다. \
&#x20;   표시되는 정보는 모두 **실시간 예상 정보로, 실제 예치 과정에서 차이가 발생할 수 있습니다.**&#x20;

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/NSiTprbFwq6fzTEgKuwV/image.png)

{% hint style="info" %}
&#x20;**상세 내역 정보**&#x20;

* **교환비율 / 현재 비율 대비 차이**\
  사용자가 예치를 요청한 자산 중 일정 부분을 반대 페어 자산로 스왑(교환)할 때 \
  적용되는 교환비율(가격)을 확인할 수 있습니다.  \
  현재 비율 대비 차이는 현재 풀 상황 기준의 교환 비율과 사용자가 적용받게 될 \
  교환 비율간의 차이(슬리피지)를 의미합니다.  <br>
* **지분율** \
  현재 풀 규모를 기준으로, 입력한 자산 예치 시 내 예상 지분율을 확인할 수 있습니다. <br>
* **데일리 보상** \
  현재 풀의 KSP 분배 수익률을 기준으로 입력한 자산 예치 시 1일 동안 분배될 KSP 수량을 확인할 수 있습니다. <br>
* **교환 비율 범위**\
  현재 화면에서 표시된 토큰의 교환 비율(가격)에서  ±1% 범위내에서만 예치를 진행합니다.

  만약, 다른 참여자들이 풀에서  예치와 출금을 진행하여 토큰 교환비율(가격)이 크게 변동하는 경우 내가 예상하지 않은 토큰 가격으로 풀에 예치가 진행되지 않도록 방지하기 위한 안전 장치입니다.반드시 변동 가능한 범위를 충분히 숙지 후 예치를 진행해야 합니다.
  {% endhint %}

4\. 상세 내용 확인 후, \[**Deposit**] 버튼을 클릭합니다. 예치 내역을 다시 한번 확인하고, 동의하는 경우에\
&#x20;   다음 단계로 이동합니다.&#x20;

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/wzCIdfSP1K0p7Jqn36oh/image.png)

5\. 최종 예치내역을 확인 후 \[**예치하기**] 버튼을 클릭합니다. 자동으로 카이카스 지갑으로 트랜잭션 요청이 \
&#x20;    실행되며, \[**Confirm**] 버튼을 클릭하여 예치 트랜잭션을 완료합니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/urWcK4aKTH7ti9Ri1Mg7/image.png)

\
\
6\. 예치가 완료되면, 상단 "**내** **예치자산**" 영역에서 확인할 수 있습니다.  예치 완료 후 부터 \
&#x20;    보상이 실시간으로 분배됩니다.\ <br>

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/w0mmjsLYgJHUeo0jrjni/image.png)


# 풀에서 출금하기

업데이트 예정입니다.


# \[클립] PC에서 단일 예치출금하기

1\. \[**예치**] 메뉴의 \[**단일 예치**] 페이지로 이동합니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/jgKpjs6DYsdnTKecHJxH/%EC%9D%B4%EB%AF%B8%EC%A7%80%2026.png)

2\. 출금하고자 하는 자산을 확인 후 **\[출금]** 버튼을 클릭합니다. 암호화폐의 토큰명, 심볼명으로 검색하면 쉽게 토큰을 찾을 수 있습니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/5fNkOz4Hvoi0mvhCNeN3/%EC%9D%B4%EB%AF%B8%EC%A7%80%2027.png)

3\. 출금하고자 하는 자산의 수량을 기입하여 “예상 내역”  확인한 후 **\[다음 단계로]** 버튼을 클릭합니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/Jo9QpsUMr7vzrdm6grLI/%EC%9D%B4%EB%AF%B8%EC%A7%80%2029.png)

{% hint style="info" %}
**수익률 정보**

* &#x20;연간 KSP 분배 수익률(%) 단일 풀 예치자는 풀에 분배되는 1일 KSP 수량에서 각자의 예치 지분율에 따라 KSP를 분배받습니다.

* &#x20;연간 예치 수익률(%) 단일 풀 예치자가 예치한 자산은 플러스 예치를 위한 재원으로 활용되며, 플러스 예치자가 자산 활용 시 지불한 비용은 다시 단일 풀 예치자에게 분배합니다. 분배된 수익은 내 예치자산 수량에 자동으로 포함됩니다.

{% endhint %}

4\. **\[출금하기]** 버튼 클릭 후 카카오톡 앱을 실행하여 화면에 표시된 QR 코드를 스캔합니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/uYjCGdrHWiHNxLZ8Mvc4/%EC%9D%B4%EB%AF%B8%EC%A7%80%2030.png)

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/xqgKqv1zpineEPUCVPzI/image.png)

5\. QR 코드 스캔 시 자동으로 클립 지갑이 실행됩니다. **\[다음]** 버튼 클릭 후 클립에서 설정한 비밀번호 입력을 완료해 트랜잭션 승인을 완료합니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/f5Z3H473FW9AK6mR8pf4/image%20\(1\).png)

6\. 출금이 완료되면 지갑에서 출금한 자산을 확인할 수 있습니다. 예치/출금으로 잔액 변동 시 현재까지 분배된 KSP 보상이 자동으로 유저 지갑으로 수령됩니다. 출금과 별도로 KSP 보상은 언제든지 **\[보상수령]** 버튼을 클릭해서 수령할 수 있습니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/SvJ21TlwUriKreOhsCzs/%EC%9D%B4%EB%AF%B8%EC%A7%80%2032.png)


# \[클립] PC에서 플러스 예치 출금하기

1\. **\[예치]** 메뉴의 **\[플러스 예치]** 페이지에서 **\[관리]** 버튼을 클릭하여 예치 중인 페어로 이동합니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/lH8pN2cR1obOPAf4Y6nm/%EC%9D%B4%EB%AF%B8%EC%A7%80%2034.png)

2\. **\[Withdraw]** 메뉴 클릭 후 출금할 수량을 기입합니다.출금 수량입력란 하단에 표시된 용어의 의미는 아래와 같습니다. (각 용어에 해당하는모든 값은 LP토큰 수량을 기준으로 표시됩니다.)

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/9qA6G5FuuAjqQrRYAPOt/%EC%9D%B4%EB%AF%B8%EC%A7%80%2035.png)

{% hint style="info" %}

* 보유&#x20;

현재 총 예치중인 자산에 해당하는 LP Token 수량을 의미합니다.

* 플러스&#x20;

플러스 예치를 통해 추가로 예치된 자산에 해당하는 LP Token 수량입니다. 현재 활용중인 자산이 있는 경우, 플러스 자산에 해당하는 LP 토큰 수량부터 출금하여 활용자산 반환을 완료합니다. 플러스 자산에 해당하는 LP Token을 모두 출금하면 플러스 예치가 종료됩니다. 플러스 자산 LP 토큰 수량이 '0'인 시점부터 유저가 출금 요청한 자산이 유저 지갑으로 출금됩니다.

-> 플러스 자산에 해당하는 LP 토큰 수량의 일부만 출금하면 활용자산의 일부만 반환하게 되므로, 자산 활용비율을 낮출 수 있습니다.

* 내 자산&#x20;

총 예치중인 자산에서 플러스 자산을 제외한 자산에 해당하는 LP Token 수량을 의미합니다.

* 반환 자산&#x20;

유저가 출금 요청한 자산 중 활용자산 반환을 위해 사용되는 자산 수량&#x20;

* You get 유저가 출금 요청한 자산 중 유저 지갑으로 출금되는 자산

3-1) 자산 활용 비율을 낮추고자 한다면, '플러스 자산' 에 해당하는 LP 토큰 수량 중 일부를 입력해서 출금합니다.

* 자산활용 비율을 낮추기 위해선 ‘플러스 자산’에 해당하는 LP 토큰 수량의 일부를 입력해주세요. 출금 요청한 LP토큰 수량 중 반환 되는 자산의 상세 수량을 반환자산 영역에서 확인할 수 있습니다. 반환 수량 확인 후 \[출금하기] 버튼을 누르면 정상적으로 출금이 완료됩니다. 활용자산의 일부만 반환하였으므로 유저 지갑으로 수령되는 LP토큰 자산은 없고, KSP 보상 혹은 에어드랍 보상만 지갑으로 수령됩니다.

3-2) 플러스 예치를 종료하고, 남은 자산을 출금하고자 한다면, '플러스 자산'에 해당하는 LP 토큰 수량과 같거나, 그보다 크게 입력(MAX)해서 출금합니다.

* ‘플러스 자산’에 해당하는 LP토큰을 우선 반환해야 남은 자금을 출금할 수 있습니다. 출금 요청한 LP토큰 수량 중 반환 되는 자산의 상세 수량을 반환자산 영역에서 확인할 수 있습니다. 출금 완료 시 활용자산 전체를 반환하였기 때문에 플러스 자산은 0으로 표시되고, 활용 자산 전체 반환 후 출금되는 LP토큰 자산과 KSP / 에어드랍 보상은 유저 지갑으로 수령됩니다
  {% endhint %}

4\. **\[출금하기]** 버튼 클릭 후 반환 내역을 확인하고 **\[다음 단계로]** 버튼을 클릭합니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/WTdaesuNRg1HWNJkgEMe/%EC%9D%B4%EB%AF%B8%EC%A7%80%2036.png)

{% hint style="info" %}

* 교환비율(가격) - 현재 풀 교환비율과 가격에 대한 정보

* 수수료 - 전환 자산 스왑 시 발생하는 수수료에 대한 정보

* 교환비율 범위 - 슬리피지 1.0% 고정
  {% endhint %}

5\. **\[출금하기]** 버튼 클릭 후 카카오톡 앱을 실행하여 화면에 표시된 QR 코드를 스캔합니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/LAPTcyaknauhjfv11HBJ/image.png)

6\. QR 코드 스캔 시 자동으로 클립 지갑이 실행됩니다. **\[다음]** 버튼 클릭 후 클립에서 설정한 비밀번호 입력을 완료해 트랜잭션 승인을 완료합니다. 예치/출금으로 잔액 변동 시 현재까지 분배된 KSP 보상이 자동으로 유저 지갑으로 수령됩니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/p4gQtf1UMYKFP6M0aqha/image%20\(1\).png)

{% hint style="info" %}
**자동 반환 내역의 확인**

* 자산 활용 비율 85% 초과로 자동반환 발생 시, 관련 팝업을 확인할 수 있습니다.

* &#x20;자동 반환 시 예치 된 자산으로 활용중인 자산을 모두 반환한 후, 반환 수수료(20%)를 제외한 나머지 자산은 \[자산 상세 팝업\_반환 내역] 탭에서 수령할 수 있습니다.

* \[자산 상세 팝업\_반환 내역] 탭을 통해 직접 자산을 수령한 경우 유저의 지갑에서 확인할 수 있습니다.
  {% endhint %}


# KSP 스테이킹 & 풀 투표하기

보유한 클레이스왑(KSP)은 다시 다른 자산과 함께 예치하여 KSP 보상을 획득하거나, \
**KSP스테이킹**과 **풀 투표**에 참여하여 추가 보상을 획득할 수 있습니다.  <br>

* **KSP 스테이킹 하기**\
  \
  보유한 KSP를 일정 기간 동안 스테이킹(락업)하여, 추가로 **KSP 보상**을 분배받을 수 있습니다.  \
  스테이킹을 통해 거버넌스 토큰 안정화에 기여한 KSP 홀더는 동시에 **풀 투표에 참여할 수 있는** \
  **투표권도 획득**할 수 있습니다.

{% content-ref url="/pages/-M\_p3ttvPYWW4Q4scQEx" %}
[\[클립\] PC에서 KSP 스테이킹 하기](/how-to-guides/stake-and-boost/pc-klip)
{% endcontent-ref %}

{% content-ref url="/pages/-M\_eVD6JFt6-LcWM-aqn" %}
[\[클립\] 모바일에서 KSP 스테이킹 하기](/how-to-guides/stake-and-boost/mobile-klip)
{% endcontent-ref %}

{% content-ref url="/pages/-M\_p5N4medrWu7BE\_dQ7" %}
[\[카이카스\] PC에서 KSP 스테이킹 하기](/how-to-guides/stake-and-boost/pc-kaikas)
{% endcontent-ref %}

* **풀 투표하기** \
  \
  스테이킹 후 획득한 투표권(vKSP)으로 지지하는 페어(풀)에 투표를 할 수 있습니다. 풀 투표 참여자는 투표한 페에서 발생하는 **거래 수수료를 분배**받을 수 있습니다. 더 많은 사용자의 투표를 받은 페어\
  일수록  더 많은 KSP가 분배됩니다. <br>

{% content-ref url="/pages/-M\_eVLz\_3x3jHak2AIkJ" %}
[\[클립\] PC에서 풀 투표 하기](/how-to-guides/stake-and-boost/pool-vote)
{% endcontent-ref %}

{% content-ref url="/pages/-M\_pLF3V1uF2ZL1M1kOo" %}
[\[클립\] 모바일에서 풀 투표 하기](/how-to-guides/stake-and-boost/undefined)
{% endcontent-ref %}

{% content-ref url="/pages/-M\_pBTrhtRxURKAb\_wEf" %}
[\[카이카스\] PC에서 풀 투표 하기](/how-to-guides/stake-and-boost/pc)
{% endcontent-ref %}

스테이킹과 풀 투표와 관련된 상세 정책은 \
\<KSP 토큰 이코노미  및 거버넌스>  아티클을 통해 확인할 수 있습니. [관련 정책 보기](https://medium.com/klayswap/%ED%81%B4%EB%A0%88%EC%9D%B4%EC%8A%A4%EC%99%91%EB%8B%A4%EC%98%A4-ksp-%ED%86%A0%ED%81%B0%EC%9D%B4%EC%BD%94%EB%85%B8%EB%AF%B8-%EB%B0%8F-%EA%B1%B0%EB%B2%84%EB%84%8C%EC%8A%A4-4104dd6731f3)&#x20;


# \[클립] PC에서 KSP 스테이킹 하기

1."**Stake & Boost**" 메뉴로 진입하여 \[**스테이킹**] 버튼을 클릭합니다. <br>

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/2Q2N2YKkX0jstOMj1VoP/image.png)

\
2\. 팝업상에서 **스테이킹 할 KSP 수량** 을 입력하고,  **스테이킹 기간**을 선택합니다. 팝업 하단에서 \
&#x20;   스테이킹 종료일시 및 상세 내역을 확인한 후 \[**다음 단계로**]  버튼을 클릭합니다.  표시되는 정보는  \
&#x20;    모두  실시간 예상  정보로 , 실제 스테이킹  완료 후  차이가 발생할 수 있습니다.&#x20;

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/DSEzMV7WbCafH4tMQavg/image.png)

{% hint style="info" %}
**상세 내역 정보**&#x20;

* **수익률** \
  스테이킹으로 획득할  연간 예상 KSP 수익률 입니다. 장기 KSP 스테이킹 계약일수록 \
  더 높은 스테이킹 수익률을 적용받습니다. <br>
* **지분**\
  현재  총 스테이킹 규모를 기준으로, 입력한 KSP 수량을 스테이킹 시 내 예상 지분율을 확인할 수 있습니다. \
  &#x20;
* **획득 투표권** \
  입력한 KSP 수량 스테이킹 시 획득하게 될 투표권 수량을 확인할 수 있습니다. 장기 KSP\
  스테이킹 계약일수록 더 많은 투표권을 획득합니다.&#x20;
  {% endhint %}

\
3\. 카카오톡 앱을 실행하여 화면에 표시된 QR 코드를 스캔합니다. <br>

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/pN1aB4OZ6RRoG6OyfVUd/image.png)

\
\
4\. QR 코드 스캔 시 자동으로 클립 지갑이 실행됩니다.  \[**다음**] 버튼 클릭 후 클립에서 설정한 비밀번호 입력을 완료해 트랜잭션 승인을 완료합니다

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/y0XcY9r7Lkoyx2Nz6k1Y/image.png)

5\. 스테이킹이 완료되면, "**스테이킹 수량**" 영역에서 확인할 수 있습니다. "**보상 수량**" 영역에서 \
&#x20;    실시간으로 분배되는 보상을 확인할 수 있습니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/I2cMtbeXBfKcGwF1liCo/image.png)


# \[클립] 모바일에서 KSP 스테이킹 하기

1."**Stake & Boost**" 메뉴로 진입하여 \[**스테이킹**] 버튼을 클릭합니다. <br>

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/XUOSkNov1QLciD0096Bt/image.png)

\
2\. 팝업상에서 **스테이킹 할 KSP 수량** 을 입력하고,  **스테이킹 기간**을 선택합니다. 팝업 하단에서 \
&#x20;   스테이킹 종료일시 및 상세 내역을 확인한 후 \[**다음 단계로**]  버튼을 클릭합니다.  표시되는 정보는  \
&#x20;    모두  실시간 예상  정보로 , 실제 스테이킹  완료 후  차이가 발생할 수 있습니다.&#x20;

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/7mdmIqacqEJ4X7dWfQue/image.png)

{% hint style="info" %}
**상세 내역 정보**&#x20;

* **수익률** \
  스테이킹으로 획득할  연간 예상 KSP 수익률 입니다. 장기 KSP 스테이킹 계약일수록 \
  더 높은 스테이킹 수익률을 적용받습니다. <br>
* **지분**\
  현재  총 스테이킹 규모를 기준으로, 입력한 KSP 수량을 스테이킹 시 내 예상 지분율을 확인할 수 있습니다. <br>
* **획득 투표권** \
  입력한 KSP 수량 스테이킹 시 획득하게 될 투표권 수량을 확인할 수 있습니다. 장기 KSP\
  스테이킹 계약일수록 더 많은 투표권을 획득합니다.&#x20;
  {% endhint %}

\
\
3\.  최종 내역 확인 후, \[**스테이킹 하기**] 버튼을 클릭한 후, 카카오톡에서 연결 팝업에서 \[**열기**]를 선택합니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/PuDNoJifongggcPJWzph/image.png)

\
4\. 자동으로 클립 지갑이 실행됩니다.  \[**다음**] 버튼 클릭 후 클립에서 설정한 비밀번호 입력을 완료해 트랜잭션 승인을 완료합니다

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/y0XcY9r7Lkoyx2Nz6k1Y/image.png)

5\. 스테이킹이 완료되면, "**스테이킹 수량**" 영역에서 확인할 수 있습니다. "**보상 수량**" 영역에서 \
&#x20;    실시간으로 분배되는 보상을 확인할 수 있습니다.<br>

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/xepYVbBxiFVBPqJCRnkU/image.png)


# \[카이카스] PC에서 KSP 스테이킹 하기

1."**Stake & Boost**" 메뉴로 진입하여 \[**스테이킹**] 버튼을 클릭합니다. <br>

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/2Q2N2YKkX0jstOMj1VoP/image.png)

\
2\. 팝업상에서 **스테이킹 할 KSP 수량** 을 입력하고,  **스테이킹 기간**을 선택합니다. 팝업 하단에서 \
&#x20;   스테이킹 종료일시 및 상세 내역을 확인한 후 \[**다음 단계로**]  버튼을 클릭합니다.  표시되는 정보는  \
&#x20;    모두  실시간 예상  정보로 , 실제 스테이킹  완료 후  차이가 발생할 수 있습니다.&#x20;

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/DSEzMV7WbCafH4tMQavg/image.png)

{% hint style="info" %}
**상세 내역 정보**&#x20;

* **수익률** \
  스테이킹으로 획득할  연간 예상 KSP 수익률 입니다. 장기 KSP 스테이킹 계약일수록 \
  더 높은 스테이킹 수익률을 적용받습니다. <br>
* **지분**\
  현재  총 스테이킹 규모를 기준으로, 입력한 KSP 수량을 스테이킹 시 내 예상 지분율을 확인할 수 있습니다. <br>
* **획득 투표권** \
  입력한 KSP 수량 스테이킹 시 획득하게 될 투표권 수량을 확인할 수 있습니다. 장기 KSP\
  스테이킹 계약일수록 더 많은 투표권을 획득합니다.&#x20;
  {% endhint %}

\
3\. 최종 스테이킹 내역을 확인 후 \[**스테이킹 하기**] 버튼을 클릭합니다. 자동으로 카이카스 지갑으로 트랜잭션 요청이 실행되며, \[**Confirm**] 버튼을 클릭하여 스테이킹 트랜잭션을 완료합니다.<br>

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/yC5ovRc9RPp2xB75yaRQ/image.png)

4\. 스테이킹이 완료되면, "**스테이킹 수량**" 영역에서 확인할 수 있습니다. "**보상 수량**" 영역에서 \
&#x20;    실시간으로 분배되는 보상을 확인할 수 있습니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/I2cMtbeXBfKcGwF1liCo/image.png)


# \[클립] PC에서 풀 투표 하기

1."**Stake & Boost**" 메뉴로 진입하여 투표 가능한 풀 목록에서  투표할 풀을 클릭합니다. \
&#x20;   현재 내가 보유한 총 투표권 수량은 "**보유 투표권**" 영역에서 확인할 수 있습니다.  <br>

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/S0QGWNCoK5PnPemPZsiX/image.png)

\
2\. 팝업상에서 **투표할 수량**을 입력합니다. 팝업 하단에서 상세 내역을 확인한 후 \[**다음 단계로**]  \
&#x20;   버튼을 클릭합니다.  표시되는 정보는 모두 실시간 예상  정보로 , 실제 스테이킹  완료 후  \
&#x20;   차이가 발생할 수 있습니다. <br>

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/SMxLSH4HOBTBG0tWGEiY/image.png)

{% hint style="info" %}
**상세 내역 정보**&#x20;

* **수익률** \
  풀 투표로  획득할  연간 예상 수익률 입니다. <br>
* **지분율** \
  현재  총 풀 투표 규모를 기준으로, 입력한 투표권 수량 행사 시 예상 지분율을 \
  확인할 수 있습니다.&#x20;
  {% endhint %}

\
3\. 카카오톡 앱을 실행하여 화면에 표시된 QR 코드를 스캔합니다. <br>

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/pN1aB4OZ6RRoG6OyfVUd/image.png)

\
\
4\. QR 코드 스캔 시 자동으로 클립 지갑이 실행됩니다.  \[**다음**] 버튼 클릭 후 클립에서 설정한 비밀번호 입력을 완료해 트랜잭션 승인을 완료합니다

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/y0XcY9r7Lkoyx2Nz6k1Y/image.png)

5\. 풀 투표가 완료되면, "**투표한 풀**" 영역에서 확인할 수 있습니다. 투표가 완료된 시점부터 \
&#x20;   실시간으로 분배되는 거래 수수료 보상을 확인할 수 있습니다.&#x20;

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/QZqcsA5Vlli2rQZHJzgQ/image.png)


# \[클립] 모바일에서 풀 투표 하기

1."**Stake & Boost**" 메뉴로 진입하여 투표 가능한 풀 목록에서  투표할 풀을 클릭합니다. \
&#x20;   현재 내가 보유한 총 투표권 수량은 "**보유 투표권**" 영역에서 확인할 수 있습니다. &#x20;

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/iwpZCH3DMRHAAtRlLAs1/image.png)

\
2\. 팝업상에서 **투표할 수량**을 입력합니다. 팝업 하단에서 상세 내역을 확인한 후 \[**다음 단계로**]  \
&#x20;   버튼을 클릭합니다.  표시되는 정보는 모두 실시간 예상  정보로 , 실제 스테이킹  완료 후  \
&#x20;   차이가 발생할 수 있습니다. <br>

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/GKR7p34UICzMU0e09wcP/image.png)

{% hint style="info" %}
**상세 내역 정보**&#x20;

* **수익률** \
  풀 투표로  획득할  연간 예상 수익률 입니다. <br>
* **지분율** \
  현재  총 풀 투표 규모를 기준으로, 입력한 투표권 수량 행사 시 예상 지분율을 \
  확인할 수 있습니다.&#x20;
  {% endhint %}

\
3\. 최종 풀 투표 내역을 확인하여  \[**투표하기**] 버튼을 클릭한 후, 카카오톡에서 \
&#x20;    연결 팝업에서 \[**열기**]를 선택합니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/PIdqasvjvWZawSdks1uj/image.png)

4\. 자동으로 클립 지갑이 실행됩니다.  \[**다음**] 버튼 클릭 후 클립에서 설정한 비밀번호 입력을 완료해 트랜잭션 승인을 완료합니다

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/y0XcY9r7Lkoyx2Nz6k1Y/image.png)

\
\
5\.  풀 투표가 완료되면, "**투표한 풀**" 영역에서 확인할 수 있습니다. 투표가 완료된 시점부터 \
&#x20;   실시간으로 분배되는 거래 수수료 보상을 확인할 수 있습니다. <br>

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/C86jg7orIM5sWvPakvsd/image.png)


# \[카이카스] PC에서 풀 투표 하기

1."**Stake & Boost**" 메뉴로 진입하여 투표 가능한 풀 목록에서  투표할 풀을 클릭합니다. \
&#x20;   현재 내가 보유한 총 투표권 수량은 "**보유 투표권**" 영역에서 확인할 수 있습니다. &#x20;

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/S0QGWNCoK5PnPemPZsiX/image.png)

\
2\. 팝업상에서 **투표할 수량**을 입력합니다. 팝업 하단에서 상세 내역을 확인한 후 \[**다음 단계로**]  \
&#x20;   버튼을 클릭합니다.  표시되는 정보는 모두 실시간 예상  정보로 , 실제 스테이킹  완료 후  \
&#x20;   차이가 발생할 수 있습니다. <br>

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/SMxLSH4HOBTBG0tWGEiY/image.png)

{% hint style="info" %}
**상세 내역 정보**&#x20;

* **수익률** \
  풀 투표로  획득할  연간 예상 수익률 입니다. <br>
* **지분율** \
  현재  총 풀 투표 규모를 기준으로, 입력한 투표권 수량 행사 시 예상 지분율을 \
  확인할 수 있습니다.&#x20;
  {% endhint %}

3\. 최종 풀 투 내역을 확인 후 \[**투표하기**] 버튼을 클릭합니다. 자동으로 카이카스 지갑으로 트랜잭션 요청이 실행되며, \[**Confirm**] 버튼을 클릭하여 투표하 트랜잭션을 완료합니다.

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/B3hXGfbHgiSBBAXaepUX/image.png)

4\. 풀 투표가 완료되면, "**투표한 풀**" 영역에서 확인할 수 있습니다. 투표가 완료된 시점부터 \
&#x20;   실시간으로 분배되는 거래 수수료 보상을 확인할 수 있습니다.&#x20;

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/QZqcsA5Vlli2rQZHJzgQ/image.png)


# 보상 수령하기

업데이트 예정입니다.


# FAQ

{% content-ref url="/pages/-M\_e8gko7K8xKIz8Th2o" %}
[클레이스왑은 어떤 서비스인가요?](/how-to-guides/faq/klayswap-service)
{% endcontent-ref %}

{% content-ref url="/pages/-M\_e92LJH\_sHMwqBp1Lx" %}
[클레이(KLAY) & 클레이스왑(KSP)은 무엇인가요?](/how-to-guides/faq/klay-and-ksp)
{% endcontent-ref %}

{% content-ref url="/pages/-M\_e9OZi3CQRFZboX7ho" %}
[유동성 풀(Liquidity pool)이 무엇인가요?](/how-to-guides/faq/liquidity-pool)
{% endcontent-ref %}

{% content-ref url="/pages/-M\_e9TroUs2WCGl\_fdOn" %}
[유동성 풀의 예치방법, 특징이 무엇인가요?](/how-to-guides/faq/liquidity-feature)
{% endcontent-ref %}

{% content-ref url="/pages/-M\_e9XknQnWTToJxJ5Fu" %}
[왜 클레이스왑에서 예치해야 하나요?](/how-to-guides/faq/klayswap-descripton2)
{% endcontent-ref %}

{% content-ref url="/pages/-M\_e9dhBj7SMdTWYePqY" %}
[획득한 보상은 어떻게 활용하나요?](/how-to-guides/faq/rewards)
{% endcontent-ref %}


# 클레이스왑은 어떤 서비스인가요?

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/Rtf4KbKn4ia5wIXjGNVb/01@2x.png)

클레이스왑은 다양한 암호화폐 보유자들이 자신의 자산을 더 효율적으로 활용해 \
부가가치를 창출할 수 있도록 설계된 클레이튼 체인상의 탈중앙 금융 플랫폼입니다. \
\
클레이튼 체인은 카카오 그룹 계열사인 그라운드X의 블록체인으로, \
카카오의 블록체인 지갑인 클립(klip), 클레이(KLAY) 자산을 예치하고 스테이킹을 할 수 있는 \
클레이스테이션(Klaystation)등 국내 디파이 생태계를 선도하고 있습니다. \
\
탈중앙은 개인정보 제공을 통한 계정가입 없이, 사용자가 자신이 소유한 블록체인 지갑과 \
지갑 자산의 입출금, 거래를 승인하는 개인키를 모두 사용자 스스로 관리하며 자산에 대한 통제권을 넘겨주지 않음을 의미합니다. 클레이스왑에서의 모든 금융 활동은 온체인(On-chain)으로 블록체인 상에 기록되어 투명하게 관리됩니다.\
\
이를 바탕으로 클레이스왑의 사용자는 암호화폐 거래 뿐 아니라, 자신이 보유하고 있는 클레이튼, 리플, 이더리움, 바이낸스 스마트 체인상의 다양한 암호화폐 예치, 스테이킹 등 다양한 유형의 암호화폐 투자를 진행할 수 있습니다.


# 클레이(KLAY) & 클레이스왑(KSP)은 무엇인가요?

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/1llkuQO0wmrgISTTHDGh/02@2x.png)

클레이(KLAY) 토큰은 클레이튼 체인의 기축 암호화폐입니다. 클레이스왑 내에서 클레이를 활용하여 다양한 예치상품에 참여할 수 있으며, 특히 클레이(KLAY)는 클레이튼 지갑으로 바로 입출금이 가능하여 암호화폐 교환과 예치에 유용하게 활용할 수 있습니다. 클레이스왑 프로토콜(KSP) 토큰은 클레이스왑의 각 유동성 풀에 KSP 보상을 분배하거나, 교환 수수료를 변경하는 등 중요 의제를 결정하는 거버넌스 토큰입니다. 클레이스왑 생태계에서 기여한 유동성 풀 예치자에게 보상으로 분배되며, 분배된 KSP는 거래에 활용하거나, KSP 스테이킹과 풀 투표를 통해 추가 수익 획득이 가능합니다.


# 유동성 풀(Liquidity pool)이 무엇인가요?

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/rUUAbqtsDdMdiHTzr68L/03@2x.png)

누군가가 자신이 가진 리플중의 일부를 이더리움으로 교환하고 싶다면, \
중앙거래소에서 암호화폐를 구매하기 위해 이더리움 매수주문을 등록하고, 거래에 응해줄 상대방이 \
나타날때까지 기다려야할까요? 또한 거래할만큼 충분한 수량을 보유하고 있어야 원하는 거래를 완료할 수 있습니다. \
\
즉, 암호화폐 시장에서의 유동성은 내가 거래하고자 하는 암호화폐를 얼마나 빠르고 쉽게 교환할 수 있는지의 정도를 의미합니다. 그러므로 풍부한 유동성은 쉽고 편리한 암호화폐 교환을 위해 필수적인 요소이며, \
클레이스왑을 비롯한 디파이(DeFi, Dentralized Finance)세계에서는 이를 해결하기 위해 거대한 \
규모의 암호화폐가 예치된 스마트 컨트랙트 자산 풀(Poo)을 기반으로 \
암호화폐 교환이 가능하도록 설계되어 있습니다.


# 유동성 풀의 예치방법, 특징이 무엇인가요?

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/9EIPht5Igf4eifkf5Sdk/04@2x.png)

유동성 풀에는 두개의 암호화폐 자산을 쌍(Pair)으로 예치할 수 있으며, 안전하게 자산이 \
예치된 스마트 컨트랙트를 하나의 자산 '풀(Pool)'이라고 부릅니다.

1. 우리는 스마트 컨트랙트 풀에 자산을 예치하는 사용자를 유동성 공급자(LP, Liquidity Provider)라고 부릅니다. 만약 리플+이더리움 풀이 있다면, 시장의 누구나 풀에 원하는만큼 리플과 이더리움을 예치할 수 있습니다.<br>
2. 예치 시 각 토큰의 현재 가격 기준으로, 동등한 가치의 토큰 수량을 예치하게 됩니다. 만일 리플과 이더리움의 현재 가격이 각각 $2.0, $4,000인 상황에서 100 XRP를 예치하고자 하는 사용자는 200달러 어치의 리플(2.0\*100)과 동일한 가치의 이더리움을 예치해야 하므로, 0.05 ETH를 함께 예치해야 합니다. \
   (200/4000) 이때 암호화폐의 가격은 외부 거래소 가격이 아니라, 클레이스왑 내의 컨트랙트 풀의 예치된 두 자산의 교환비율(가격)을 기준으로 합니다.<br>
3. 자산 예치를 완료한 시점부터 매초마다 보상이 분배되며, 풀에 예치한 자산은 원한다면 언제든지 다시 출금할 수 있습니다.


# 왜 클레이스왑에서 예치해야 하나요?

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/atXs7UJE6eebDr1EnslY/05@2x.png)

유동성 공급자는 유동성 공급에 기여했으므로, 그 기여도에 따라 보상을 분배받습니다. \
만일 리플+이더리움풀에 자산을 예치했다면, 해당 풀에서 누군가 발생시킨 교환(거래)으로 인해 \
발생한 수수료와, 해당 풀의 전체 유동성 규모에서 내가 차지하는 예치 지분율에 따라 \
클레이스왑(KSP) 토큰을 분배받습니다.

내가 보유한 암호화폐의 장기 성장 가능성을 믿는 투자자라면 유동성 풀은 \
효과적인 투자처가 될 수 있습니다. 거래소나 개인지갑에 보관중인 암호화페는 가격 변동에 따른 \
이익을 기대할 수 있지만, 유동성 풀에 예치해둔 암호화폐는 그와 함께 추가적인 \
보상까지 얻을 수 있기 때문입니다.


# 획득한 보상은 어떻게 활용하나요?

![](https://content.gitbook.com/content/RM76CLSvWgT5g122HIcr/blobs/ePwrBHSt9VUfRozhU2OF/06@2x.png)

자산을 예치한 풀에서 분배되는 수수료는 자동으로 풀에 누적되어 내 예치자산 수량에 포함되어, \
예치 자산 출금 시 함께 출금할 수 있습니다. 유동성 공급을 통해 분배받은 클레이스왑(KSP) 보상은 \
다음과 같이 활용하여 추가 수익을 분배받을 수 있습니다.

1. 클레이스왑(KSP) 페어 예치에 할용할 수 있습니다. 분배받은 클레이스왑(KSP) 토큰을 클레이(KLAY), 리플(XPR), 이더리움(ETH), 랩트비트코인(WBTC) 등 주요 자산과 함께 다시 풀에 예치하여 클레이스왑(KSP) 보상을 분배받을 수 있습니다.<br>
2. 클레이스왑(KSP)스테이킹에 참여할 수 있습니다. 분배받은 클레이스왑(KSP) 토큰을 일정기간 동안 락업하는 경우, 거버넌스 토큰 안정화 기여에 따라 추가로 클레이스왑(KSP) 보상을 분배받을 수 있습니다. 이때 스테이킹 참여자는 보상과 함께 풀 투표권을 획득합니다. 클레이스왑에서는 투표권을 보유한 사용자들의 투표를 통해 각 유동성 풀에 분배될 클레이스왑(KSP) 수량을 자율적으로 결정합니다.<br>
3. 풀 투표에 참여하여 추가로 풀에서 발생한 거래 수수료를 분배받을 수 있습니다. 풀에서 발생한 거래수수료는 풀에 자산을 예치한 사용자와 풀에 투표한 사용자에게 각각 50%씩 분배됩니다.


# ‭

<figure><img src="https://2618380029-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlEjyveZVVY0NXibsLATk%2Fuploads%2FfDrovAJQl41I9Sv910kY%2Fimage.png?alt=media&amp;token=cf5a2a44-e8d4-49e7-ac21-f15f6bcd9dc5" alt=""><figcaption></figcaption></figure>


# Introduction

Welcome to the KLAYswap documentation!

#### In this documentation, we introduce KLAYswap, the AMM protocol for the Klaytn Network, as well as KLAYswap’s capabilities and governance token, KSP (KLAYswap Protocol).

The AMM (Automated Market Maker) protocol we are launching is a decisive DEX protocol that has now brought the Decentralized Finance (DeFi) market to the general public. Simply put, AMM is a protocol that supports immediate swapping between tokens by replacing the existing buy/sell orderbook structure with a Liquidity Pools created on- chain by liquidity providers.

Looking at representative DEX examples like Uniswap, an Ethereum-based AMM protocol currently hosting around $2.7B USD in liquidity pools, it is clear that plentiful liquidity is needed to boost the Decentralized Finance ecosystem as a whole by allowing easy transactions. For this reason, ozys, the developers of KLAYswap, created a high liquidity environment in which assets not only of the Klaytn network but also of other networks, including Ethereum, can enter Klaytn.&#x20;

We even take it a step further than Uniswap by ensuring significant trade volume by using a transparent IBC bridge, ozys’ Orbit Bridge, to offer yield farming with asset pairings previously unconnected in the decentralized world. We’ll touch upon more of that later. Today, we introduce KLAYswap, a DeFi solution that can take advantage of this high liquidity environment.

#### KLAYswap awaits your participation

In KLAYswap, a complete on-chain instant swap protocol, traders can not only experience immediate transactions via liquidity pools, but also develop services by deciding the policy and direction of KLAYswap with the KSP governance token.

In addition, users can receive various forms of compensation, including transaction fee revenue, for contributing to the growth of the protocol. Various people can participate in the KLAYswap ecosystem, including long-term investors who want to hold cryptocurrency for a long time, investors who want to earn income through commission fees, and miners who want to participate in KLAYswap governance through KSP mining.\
\
For those of you who have wanted to experience DeFi but have had difficulty participating due to its low accessibility and being unfamiliar with how it works, we expect that you will be able to experience and enjoy DeFi easily with the launch of KLAYswap.

For those of you who are familiar with DeFi, we expect that you will be able to experience a new avenue of growth opportunities, where returns and APY are set with full transparency with Orbit Bridge. With KLAYswap you have the chance to be an initial user, with the initial allocation volume being zero. Everyone has free opportunity to grow. You will be the first users that decide and make the system.&#x20;

We look forward to your participation and look forward to the various DEFi protocols that will be created in the Klaytn network with the start of KLAYswap.


# Protocol Overview

Introducing KLAYswap's AMM-based Instant Swap Protocol

AMM is an innovative trading mechanism that evolved from order book-based DEXs to change the way we trade cryptocurrencies on-chain. Instead of buy/sell order books, liquidity pools created by liquidity providers allow traders to trade freely, and liquidity providers share any generated pool usage fees as revenue in proportion to their individual liquidity contributions. In addition, any holder of KCT (Klaytn Compatible Token) can become a liquidity provider.

The AMM mechanism of KLAYswap is based on the formula **x \* y = k** where x = KLAY, y = KCT , and k = Constant Function. The token price range is set according to the quantity of each token when the corresponding liquidity pool is created. For example, if the liquidity supply of x (KLAY) increases, the supply of y (KCT) decreases to maintain the constant function, k. In this way, the supply of each token in the liquidity pool is designed to fluctuate with prices set accordingly.

**PARTICIPANTS:**

In other words, KLAYswap is an instant swap protocol that operates with an on-chain liquidity pool, where liquidity is guaranteed by automated market-making (AMM) mechanisms. It is an on-chain swap service that allows anyone that has any KLAY or KCT-type cryptocurrency to become a liquidity provider and earn income from pool usage fee commissions.

* **Single Pool Participant**: By supplying a single asset to the pool, participants can receive the supply reward (APR) for the respective token and KSP rewards. Single pool suppliers will receive aToken, a proof of supply, in their wallet when they supply assets to the pool (contract), and they will be distributed various rewards based on their aToken share ratio within the pool.
* **V2 Pool Participant**: By supplying two assets to the V2 pool, participants can receive KSP rewards and additional airdrop rewards. V2 pool suppliers will receive LP (Liquidity Provider) Tokens, a proof of supply, in their wallet when they supply assets to the pool (contract), and they will be distributed various rewards based on their LP Token share ratio within the pool.
* **V3 Pool Participant**: By supplying two assets to the V3 pool, participants can receive pool usage fee rewards, KSP rewards, and additional airdrop rewards. V3 pool participants will receive LP (Liquidity Provider) NFTs, a proof of supply, in their wallet when they supply assets to the pool (contract), and they will be distributed various rewards based on their share ratio within the pool.
* **Traders:** Tokens listed in the protocol can be traded with KLAY or KCT within the scope of the respective pool. The transaction price is based on the existent number of pairs of the respective tokens.&#x20;
* **Staker**: Stakers can stake KSP and receive KSP inflation rewards. The longer the staking period, the more vKSP (voting rights) they acquire. Based on their share ratio in the total protocol vKSP, they will automatically receive 10% of the pool usage fee rewards from KLAYswap along with the KSP rewards.

\*Note that slippage (a difference in the estimated price at the point of transaction and the actual price at time of transaction) may occur in AMM-based swap protocols. In addition, a liquidity provider may experience Impermanent Loss (change in price of supplied assets compared to when they are supplied) as token prices in pools are adjusted by an AMM mechanism after the point of supply.

Please keep these risks in mind when providing liquidity or conducting transactions.<br>




---

[Next Page](/llms-full.txt/1)

