# Klaybank를 소개합니다

Welcome to the next generation bank. Klaybank(클레이뱅크)에 오신 것을 환영합니다.

[**Klaybank(클레이뱅크)**](https://klaybank.org/)**는 Klaytn(클레이튼) 최초의 Flashloan Lending 프로토콜입니다**. Lending, Flashloan 모두 Web 3.0 생태계 내 필수적인 서비스인 만큼, Klaybank는 Deposit\&Borrowing부터 Bond, Staking 그리고 Flashloan까지 통합적인 디지털자산 서비스를 제공합니다.

![](/files/pltFISuANvR56uhtjzzd)

현재 클레이튼 생태계에도 단순히 암호화폐를 거래소에 보관하는 것이 아니라 적극적으로 다양한 디파이 서비스를 사용하는 사용자들이 빠르게 늘어나고 있습니다. Klaybank 팀은 빠르게 성장하는 클레이튼 생태계에서 여전히 Deposit\&Borrowing 영역이 부족한 것을 알 수 있었습니다. **특히 Flashloan(플래시론)의 부재로 인해 그동안 클레이튼 사용자들은 아비트라지와 같은 투자 기회로부터 멀어질 수 밖에 없었습니다.**

이러한 배경에서 Klaybank는 디파이의 가장 기본이자 핵심인 Deposit\&Borrowing 서비스를 제공하게 되었습니다. **추가로 Bonding을 통해 기존 디파이들이 가지고 있는 이자 농사 방식의 단점을 극복하고, Flashloan의 무담보 대출 기능을 제공하여 프로토콜에 유입되는 자금을 늘리고, 다양한 만기의 Guardian Vault를 제공해 사용자들에게 Staking option을 제공합니다.** 이러한 기능들은 스테이블 코인과 더불어 탈중앙화 금융의 가장 기본적이고 필수적인 기능입니다. 디파이에서 스테이블 코인이 통화의 대용으로 한 축을 담당하고 Deposit\&Borrowing은 유휴자산의 적절한 분배를 담당하는 또 다른 한 축인 것처럼, Klaybank는 클레이튼 생태계의 핵심 기둥(Pillar)가 될 것입니다.

## Klaybank의 6가지 핵심 기능들

1. **Deposit & Borrowing**
   * 디파이에서 은행 역할을 하는 Klaybank의 Deposit & Borrowing 프로토콜은 스테이블 코인, DEX와 더불어 디파이 생태계를 이루는 가장 핵심적인 서비스입니다.
   * 같은 Deposit & Borrowing 플랫폼인 AAVE와 COMPOUND는 각각 10조가 넘는 TVL로 DEX인 UNISWAP과 SUSHISWAP의 TVL을 초과하며, 이더리움 네트워크에서 지속해서 성장하고 있습니다.
   * Klaybank팀은 디파이가 한국에서 점차 발전함에 따라 클레이튼 네트워크에서도 같은 과정을 따를 것이라고 믿습니다.
2. **Multi Guardian Vaults**
   * 유동성 채굴을 통해 무분별하게 공급되는 거버넌스 토큰은 Next step이 없다는 측면에서 빠른 이탈의 악순환을 불러옵니다.
   * **Klaybank에서 KBT 토큰의 분배는 오직 프로토콜의 강화에 이바지하는 행위에만 제공됩니다.** 예치자산의 증가를 가져오는 행위, 대출 서비스 이용 행위, 여기에 프로토콜의 안전에 이바지하는 AAVE의 Safety Module 로직을 가져와 프로토콜의 안정성을 보장해주는 행위에 대해서 Staked KBT가 분배됩니다.
   * 이러한 구조는 모두 Klaybank 사용자들이 KBT의 가치를 알아가고 유지하게끔 합니다.
3. **Flashloan. For developers by developers.**
   * 플래시론은 담보 없이 한 블록 안에 대출과 상환을 동시에 일으키는 행위입니다. 혹자는 플래시론이 디파이 해킹의 주범이라고 이야기합니다. **하지만 플래시론은 해킹할 수 없는 것을 가능하게 하는 도구가 아니라, 단지 자본의 규모를 leveraging하게 해 주는 도구일 뿐입니다. 또한 기존 해킹 사례는 플래시론을 제공한 기업이 해킹된 것이 아닌 플래시론을 이용한 해킹이었습니다.**
   * 만약 플래시론이 없으면 취약점이 있는 컨트랙트는 추후에 더 큰 규모의 탈취를 경험할 것이라는 점에서 예방적인 성격까지 지니고 있습니다. Klaybank의 Flashloan은 이미 여러 번 보안감사를 받은 AAVE의 코드에 기반하므로 안전합니다.
   * 자본 시장에서는 필연적으로 차익거래 기회들이 일어납니다. 차익거래 기회가 많을수록 해당 시장은 일반 사용자들에게 불공평해지고 그들에게 손해를 끼치게 됩니다.
   * **Klaybank는 플래시론을 통해 적은 자본으로도 차익거래 기회들을 실현함으로써 클레이튼 생태계에 이바지하는 한편, Klaybank가 가진 유동성을 활용해 각 차익거래에서 나오는 모든 수수료를 KBT 가격에 반영할 수 있도록 운영하는 구조를 만들었습니다.**
4. **Protocol Owned Liquidity**
   * 기존의 유동성 풀들은 Mercenary capital(약탈적 자본)의 초기 참여로 곤란을 겪는 일이 많았습니다. 이들은 서비스 오픈 시 대거 참여해 초반 서비스의 높은 APY를 얻다가 적당한 시점에 획득한 거버넌스 토큰을 매도하면서 유동성을 회수해가는 일이 많았습니다. 이는 유동성 채굴 방식을 선택하는 어떠한 프로토콜도 예외가 없었다고 할 수 있습니다.
   * **Klaybank는 POL을 도입하여 거버넌스 토큰을 판매하여 유동성을 프로토콜의 소유로 귀속시키는 방식을 도입해 이러한 약탈적 자본이 프로토콜에 악영향을 미치지 못하게 하고자 합니다.** 할인하여 구매한 거버넌스 토큰에 대해 사용자들은 Vesting 기간이 끝난  바로 차익을 실현할 수 있지만, 이보다는 프로토콜을 수호하는 Guardian Vault에 맡기어 중장기적으로 높은 이율을 누리는 편이 낫습니다. 이를 통해 KBT 홀더들은 Klaybank의 장기적인 비전에 함께하게 됩니다.
   * Klaybank는 OlympusDAO로 대표되는 보통의 Defi 2.0이 추구하는 Reserve Currency가 되고 싶은 생각은 없습니다. **하지만 POL의 채택으로 Klaybank가 소유한 자산이 늘어감에 따라 KBT 홀더들에게 가시적인 Backup을 보여줄 수 있을 것으로 생각합니다.**
5. **Open-source. Of course.**
   * **Klaybank는 출시 후 오딧 보고서와 함께 코드를 공개할 예정입니다.** 그동안 클레이튼 디파이에서는 암호화폐 생태계의 발전을 이끌어 온 Opensource 원칙을 지키지 않았습니다. 코드를 공개한다는 것은 탈중앙화 금융을 추구하는 디파이에서 필연적입니다. 관리자 없이 동작하는 코드에 대해 Defi 이용자들이 블랙박스처럼 내부를 들여다보지 못하는 것은 합리적이지도 않으며, 암호화폐 정신에도 어긋납니다. KlayBank는 안전한 운영을 위해 오딧을 진행 중에 있으며 코드는 완료 보고서와 함께 Github에 공개될 예정입니다.&#x20;
   * Klaybank 개발진들은 이에 대해 근본적인 의문을 품고, 더욱 더 사용자들에게 합리적인 선택지를 주고자 합니다. 저희가 영향을 받은 AAVE, OlympusDAO의 코드들에 감사를 표하며, 저희가 공개하는 코드들이 클레이튼 생태계에서 다른 Defi를 만들 팀들에게 영향을 주길 바랍니다. 그리고 이에 따라 궁극적으로 한국에서 선도적인 디파이들이 탄생하기를 바랍니다.
6. **Governance**
   * Klaybank 팀이 오픈소스를 강조한 것과 같은 이유로, Klaybank 팀은 여러분의 Governance 참여 또한 중요하게 여깁니다. Klaybank 서비스를 오직 개발진이 만들고, 개발진의 의사가 가장 중요하게 여러 parameter를 결정하는데 작용된다면 Defi는 Cefi랑 다를 바가 무엇일까요?
   * **여러분들은 이제 어떤 예치 풀들에 얼마만큼의 staked** **KBT를 할당할지 결정할 수 있습니다. KBT의 예치/대출 풀 간 분배 비율, Guardian Vault의 모든 parameter들도 결정할 수 있습니다.**
   * 활발한 토론과 대화로 커뮤니티가 운영하는 Defi 서비스를 만들어가시길 바랍니다. 초기에는 Governance 관련 사항은 Klaybank 팀이 설정할 예정이지만, Governance에 대한 상기 사항들은 앞으로의 업데이트를 통해 구현될 예정입니다.

## Klaybank에 참여하는 방법

* Telegram : <https://t.me/Klaybank_KR>
* Twitter : <https://twitter.com/klaybank>
* Web : [https://klaybank.org](https://klaybank.org/)


# 위험 & 보안

Klaybank 프로토콜 사용자들은 아래 사항을 숙지 후 이용에 유의하시기 바랍니다.

1. Klaybank는 사용자가 Klaytn 기반의 토큰을 예치, 대출, 스테이킹 및 본딩할 수 있는 Klaytn의 분산형 애플리케이션입니다.
2. 디지털 자산이 Klaybank 프로토콜의 Guardian Vault에 스테이킹 되는 동안 short fall event로 인한 일부 자산의 slashing, 토큰 가격 변동으로 인한 손실이 일어날 수 있으며 이에 국한되지 않는 다양한 위험이 있습니다.
3. Klaybank를 사용하기 전에 Documentation을 읽어보시고 Klaybank 프로토콜이 어떻게 작동하는지 완전히 이해해야 합니다.
4. 어떤 주체도 Klaybank의 잠재적 위험 및 손해에 대해 책임을 지지 않습니다. 특히 직간접적 손해, 결과적인 손해, 이익에 대한 손실, 디지털 자산에 대해 책임을 지지 않습니다.


# 생태계 참여자

**Klaybank는 클레이튼 블록체인 네트워크에서 다양한 암호화폐의 대여와 대출 서비스를 스마트 컨트랙트로 구현한 프로토콜입니다.** 클레이튼 생태계의 다양한 암호화폐 자산을 Klaybank에 예치하거나, 담보로 제공하여 다른 암호화폐 자산을 대출할 수 있습니다. Klaybank는 대여 및 대출과 같은 기존 금융의 기능을 탈중앙화된 블록체인 환경에서 구현한 탈중앙화 금융 프로토콜입니다.

생태계 참여자 Klaybank의 생태계는 대여자(Depositor), 대출자(Borrower), 채권 구매자(Bonder), 플래시론 이용자(Flash loaner), 커뮤니티 참여자(Community Contributor) 등 다양한 참여자들로 구성됩니다.

### 대여자(Depositor)  <a href="#depositor" id="depositor"></a>

대여자는 클레이튼 네트워크의 암호화폐 KCT(Klaytn Compatible Token) 자산들을 Klaybank에 예치하여 이자와 KBT(Klaybank Token)을 받을 수 있습니다. 자신이 소유한 암호화폐를 단순히 거래소나 지갑에 보관하지 않고, 대여-대출이 잘 동작할 수 있도록 유동성을 공급합니다. 대여자는 Klaybank의 커뮤니티 기여에 대한 보상으로 이자와 staked KBT를 받습니다. 대여(Depositor)는 DEX 등의 페어 풀에 LP를 구성하는 것에 비해 비영구적 손실(Impermanent Loss)이 발생하지 않으며, 원하지 않는 암호화폐로 페어를 구성할 필요가 없습니다. 따라서 암호화폐 자산을 홀드하여 장기적 가격 상승을 기대하는 암호화폐 보유자는 보유한 암호화폐 자산을 대여 함으로써 추가적인 수익을 창출할 수 있습니다.

### 대출자(Borrower)&#x20;

대출자는 Klaybank에 KCT 자산을 초과 담보로 제공하여 다른 KCT 자산을 대출할 수 있습니다. 대출한 KCT 자산에 대한 이자를 지불해야 하지만 Klaybank의 커뮤니티 기여에 대한 보상으로 staked KBT를 받을 수 있습니다. 대출자는 대출한 암호화폐를 이용하여 대출 이자보다 더 많은 수익을 얻는 데에 활용할 수 있습니다. 또, 단기적으로 가격 하락을 기대하는 암호화폐를 대출하고 가격이 하락한 후에 대출한 암호화폐를 상환하여 차익을 얻을 수 있습니다. 그러나, 대출한 암호화폐 자산의 가치가 크게 상승하거나 담보 자산의 가치가 크게 하락하여 두 자산의 가치가 일정 비율 이상으로 차이 날 경우, 청산이 일어나 담보로 맡긴 암호화폐 자산이 상환될 수 있음을 주의해야 합니다.

### 채권 구매자(Bonder)&#x20;

채권 구매자는 자신이 소유한 LP 토큰을 Klaybank 프로토콜에 조달하여 할인된 가격으로 KBT를 구매할 수 있습니다. 채권 구매자가 구매한 KBT는 일정 기간에 나누어 받을 수 있습니다. Klaybank 프로토콜은 채권(Bonding)을 통해 LP 풀의 유동성과 KBT의 가격 안정성을 확보할 수 있습니다. 또, Klaybank 프로토콜이 채권을 통해 소유한 LP 토큰으로 AMM에서 발생한 수익은 Klaybank의 커뮤니티 가치 향상에 사용됩니다.

### 플래시론 이용자(Flash Loaner)&#x20;

플래시론 이용자는 플래시론(Flashloan)을 이용하여 한 트랜잭션 안에서 대출과 상환을 동시에 진행할 수 있습니다. 플래시론은 하나의 트랜잭션 안에서 암호화폐를 대출하고, 이를 사용하여 차익을 얻은 후, 대출한 암호화폐를 상환하여 결과적으로 무담보로 암호화폐를 대출할 수 있는 행위입니다. 플래시론 이용자는 Klaybank에 수수료를 지불하고 플래시론을 이용하여 무자본 혹은 적은 자본으로도 여러 차익거래 기회들을 실현할 수 있습니다.

### 커뮤니티 참여자(Community Contributor)&#x20;

커뮤니티 참여자는 Klaybank의 커뮤니티에 참여하여, 프로토콜 발전에 이바지할 수 있습니다. 커뮤니티 참여자는 거버넌스(Governance)에 참여하여 Klaybank의 주요 파라미터를 결정하는 등의 중요한 의사결정에 영향력을 행사할 수 있습니다. 커뮤니티 참여자들의 활발한 소통과 논의는 Klaybank를 올바르고 탈중앙화된 방향으로 이끌 것입니다.

### 청산자 (Liquidator)

청산자는 Klaybank에서 대출자들이 대출해간 자산의 담보금액이 줄어들 때 청산을 통해 프로토콜의 안정성에 기여 및 인센티브를 획득할 수 있습니다. 청산을 통해 대여자들의 자산이 안정적으로 유지될 수 있게 도와주며, 청산 행위를 통해 청산 인센티브를 얻어갑니다. 자신의 자산을 이용해 대출자의 대출을 대신 상환하여 담보물을 가져갈 수 있으며 상환하기 위한 자산이 없더라도, 프로토콜의 플래시론을 통해 청산을 진행할 수 있습니다.


# 메커니즘

### 대여와 대출(Deposit & Borrowing) <a href="#deposit-and-borrowing" id="deposit-and-borrowing"></a>

Klaybank의 대여는 대출에 필요한 유동성을 공급하는 방법입니다. 대여자가 대여를 위해 Klaybank에 예치한 암호화폐는 Klaybank의 풀에 보관됩니다. 대출은 풀에 예치된 암호화폐 자산을 통해 이루어집니다. 대출자는 보유한 암호화폐를 담보로 하여 다른 암호화폐 자산을 대출할 수 있으며 이를 상환할 때 대출 이자를 Klaybank 프로토콜에 내야 합니다. 해당 대출 이자는 대여자의 예치 이자를 제공하기 위해 사용됩니다.

### 청산(Liquidation)

만약, 대출자의 담보 자산 가치가 하락하거나 대출한 암호화폐의 가치가 상승할 경우, 대출자의 담보 자산 가치가 대출한 자산 가치에 비해 상대적으로 낮아지기 때문에 담보로 대출을 상환하기 어려워집니다. 따라서, 대출자의 담보 자산과 대출금의 가치 차이가 일정 비율 이상이 되면 청산이 이루어집니다.

먼저, 대출자의 담보 자산과 대출금의 가치를 계산합니다. 그리고 계산한 담보 자산 가치와 대출금 가치를 이용하여 두 자산의 가치 차이 비율을 계산합니다. 가치 차이의 비율이 Klaybank 거버넌스에 의해 결정된 청산 비율보다 클 경우, 청산이 가능해집니다. 청산 대상의 담보 자산은 저렴하게 구매할 수 있습니다. Klaybank 프로토콜은 청산 대상의 담보 자산을 구매하여 차익을 얻을 수 있습니다. 청산 수익은 거버넌스에 의해 Klaybank 프로토콜을 위해 투명하게 사용됩니다. 한편, 청산 대상의 담보 자산 구매에 사용된 자산은 대출금 상환에 사용하여 청산을 완료합니다.

청산 대상의 담보 자산을 판매하여 대출금을 상환하는 과정은 온체인 상에서 이루어집니다.


# 핵심 기능 ✨


# 1. Flashloan

**플래시론은 한 트랜잭션 내에서 대출과 상환을 모두 수행함을 전제로 무담보 대출을 실행할 수 있는 기능입니다**. 이 기능을 통해 대출자(Borrower)는 담보 없이 자산을 빌릴 수 있습니다.&#x20;

플래시론을 통해 디파이 해킹 사례를 많이 접하셨다면 플래시론에 긍정적인 인상을 갖기 힘들 수도 있습니다. 플래시론을 사용한 공격을 통해 어떤 디파이 프로토콜이 큰 금액의 자산을 도둑맞았다는 소식을 접하면 대체 플래시론이 왜 필요한지, 굳이 있어서 좋을 것이 무엇인지 고민하게 됩니다.

하지만 플래시론은 그저 무제한으로 자산을 빌려서 이를 원하는대로 사용하는 기능도 아니고, 공격 못할 취약점을 플래시론으로 인해 가능하게 하는 것은 아닙니다(충분한 자산만 있으면 플래시론이 없어도 가능). 플래시론은 오히려 예방적인 성격이 있고, 차익거래를 함에 있어서 굳이 많은 자산이 없이도 시장에 참여하여 보다 효율적으로 시장의 일물일가에 기여할 수 있습니다.

클레이튼 생태계에서 플래시론이 보다 활성화 된다면 상기에 언급한 바와 같이 생태계의 발전, 자본의 효율적 사용으로 인한 보다 건전한 시장에 대한 기여와 같은 목적을 달성할 수 있습니다. 클레이뱅크는 클레이튼 생태계 내의 유일한 플래시론 플랫폼으로서 이와 같이 클레이튼 생태계에 대한 기여와 더불어, 플래시론의 활성화로 장기적으로 클레이뱅크의 강력한 바이백 펀드 재원으로 만들고자 합니다.

플래시론은 여러 쓰임새가 있을 수 있습니다. Docs에도 언급하였다시피, 한 트렌젝션 안에 순간적으로 큰 자산이 필요한 일이라면 모두 사용 가능하나 기본적으로 클레이튼 내 DEX내에서의 큰 규모의 차액거래(Arbitrage) 기회가 생겼을때 활용하여 차액을 획득할 수 있으며 클레이뱅크 뿐만 아니라 다른 대출 프로토콜들의 청산기회가 생겼을때 없는 자산을 빌려 청산을 진행하고 청산 보너스를 얻을 수 있습니다. 굳이 내가 쓰지 않아도 플래시론에 대해서 알아두어야 할 필요성도 있습니다. 플래시론이 자본을 효율적으로 쓸 수 있게 하고, 레버리징을 쉽게 할 수 있게 해주다보니 많은 디파이의 취약점 공격들이 플래시론으로 이루어지기도 합니다. 예컨데 가장 최근에 BAYC와 관련된 사례가 있습니다. BAYC를 홀드하면 새로 발행되는 APE 코인을 받을 수 있었는데, NFT 유동화 프로토콜인 NFTX에서 올라가 있던 BAYC를 누군가 플래시론을 통해 빌려서 APE 코인을 Claim하고 다시 곧바로 상환한 사례가 있습니다. 이러한 부분을 통해 취약점이 있는 프로토콜에 대해 플래시론이 영향을 미칠 수 있다는 점과, 극도로 효율적인 자본 레버리징에 대한 부분을 엿볼 수 있습니다.

클레이뱅크는 이미 플래시론의 사용방법에 대해서 [개발가이드](/protocol/functions/flashloan/undefined)에 잘 문서화를 해 두었으나, 구체적인 활용 방안에 대해서도 제시를 하여 보다 더 플래시론이 활발하게 쓰이도록 장려하고자 합니다. 실제 플래시론이 아비트라지에 어떻게 사용되는지와 관련하여 실제 코드와 함께 예제로 제공하니 참고 부탁드립니다.

### 수수료

플래시론의 수수료는 0.15%이며, 이는 거버넌스에 의해 변경될 수 있습니다. 이는 프로토콜 펀드에 쌓이게 되며 바이백 등으로 활용됩니다.


# 개발 가이드

이 장에서는 플래시론을 활용하여 개발하는 방법 및 동작 방식을 알아보기위해 가장 간단한 형태의 예시와 함께 설명합니다. 아래의 가이드에서 설명의 편의를 위해 플래시론을 활용해 개발할 컨트랙트를 **A컨트랙트**라 표기하도록 하겠습니다.

**A컨트랙트는** 클레이 뱅크의 LendingPool 컨트랙트와 상호작용하게 됩니다. 플래시론을 통한 코드의 진행순서는 다음과 같습니다.

1\. 플래시론을 활용할 상황이 생겼을 때 개발자가 컨트랙트의 특정 함수를 호출합니다. 여기서는 예시로 `exampleFlashLoanCall` 을 호출했다고 가정합니다. 즉 **A컨트랙트**에는 `exampleFlashLoanCall` 함수가 구현되어 있습니다.

2\. `exampleFlashLoanCall` 함수에서 필요한 자산 과 양을 설정하여 **LendingPool 컨트랙트** 에 FlashLoan을 요청하는 `flashLoan` 함수를 호출합니다. 파라미터에 대한 설명은 [여기](#flashloan)를 참고해주세요.

```solidity
interface ILendingPool{
    function flashLoan(
        address receiverAddress,
        address[] calldata assets,
        uint256[] calldata amounts,
        uint256[] calldata modes,
        address onBehalfOf,
        bytes calldata params,
        uint16 referralCode
      ) external;
} 
```

3\. **LendingPool 컨트랙트**는 **A컨트랙트**가 요청한 금액만큼 자산을 전달합니다.

4\. **LendingPool 컨트랙트**는 **A컨트랙트**의 `executeOperation` 함수를 호출합니다. `executeOperation` 는 `IFlashLoanReceiver` 에 정의되어있으며 플래시론을 활용할 컨트랙트는 이 인터페이스를 반드시 구현해야합니다. 각 파라미터에대한 설명은 [여기](#iflashloanreceiver)를 참고해주세요.

```solidity
interface IFlashLoanReceiver {
    function executeOperation(
      address[] calldata assets,
      uint256[] calldata amounts,
      uint256[] calldata premiums,
      address initiator,
      bytes calldata params
    ) external returns (bool);
}
```

즉 **A컨트랙트**가 실제로 자산을 빌려 동작을 수행하는 코드는 `executeOperation` 함수 내에서 수행되게 됩니다. `executeOperation` 함수는 내부에서 자산을 활용한 뒤 반드시 상환해야할 양(`amounts` + `premium`) 만큼의 자산(토큰) 을 보유하고 있어야 합니다. 또한 **LendingPool 컨트랙트**가 회수해 갈 수 있도록 상환해야할 양 이상 토큰을 **LendingPool 컨트랙트**에 approve 해주어야 합니다.

**5. LendingPool 컨트랙트** 는 마지막으로 `amounts` + `premium` 만큼의 토큰을 **A컨트랙트** 로부터 회수(transferFrom) 해옵니다.

위의 1\~5 까지의 동작중에 예외가 발생하거나 특히

* 4\. 에서 **A컨트랙트** 가 false를 리턴하는경우
* 5\. 에서 **LendingPool 컨트랙트**가 자산이 회수가 불가능한 경우

모든 실행이 취소됩니다.

따라서 대출자(Borrower)는 담보 없이 자산을 빌릴 수 있고, 대여자(Depositor)는 위험성 없이 수수료를 얻을 수 있습니다.

지금까지의 과정을 도식으로 보면 아래와 같습니다.

![플래시론 흐름도 ](/files/MCFAvG7ZI6aC8RR519lI)

### 파라미터 설명(flashLoan)

아래는 `flashLoan` 함수를 호출하기위한 파라미터와 이에대한 설명입니다.

```solidity
interface ILendingPool{
    function flashLoan(
        address receiverAddress,
        address[] calldata assets,
        uint256[] calldata amounts,
        uint256[] calldata modes,
        address onBehalfOf,
        bytes calldata params,
        uint16 referralCode
      ) external;
}
```

* `address receiverAddress` : 플래시론을 통해 대출을 발생시켰을 때 자산을 받아가고, `executeOperation` 가 구현되어있는 주소입니다. 이 예제에서는 **A컨트랙트**가 `receiverAddress`가 됩니다.
* `address[] calldata assets` : 대출 받을 자산의 목록입니다.
* `uint256[] calldata amounts` : 대출 받을 자산의 양 목록입니다.
* `uint256[] calldata modes` : 대출 받을 자산들에 대해 대출 모드를 설정합니다. 현재 클레이뱅크의 대출모드는 0만 지원하며 나머지 타입은 추후 지원 예정입니다. 모드는 다음과 같습니다.
  * 0 : 즉시 상환을 의미합니다. 플래시론을 통해 빌린 자산은 트랜잭션 종료와 함께 반드시 상환되어야 합니다. 그렇지 않은경우 실패합니다.
* `address onBehalfOf` : 대출모드가 0이아닐때 사용됩니다. 현재는 값이 무시되므로 `msg.sender` 를 입력하셔도 무방합니다.
* `bytes calldata params` : **LendingPool** 컨트랙트가 `executeOperation` 을 통해 사용자 **A컨트랙트**를 호출할때 넘겨줄 파라미터를 지정할 수 있습니다.
* `uint16 referralCode` : 특정상황에 레퍼럴 구분자로 이용하기 위한 파라미터입니다. 일반 사용시에는 0을 입력하면 됩니다.

### 파라미터 설명(IFlashLoanReceiver)

아래는 `executeOperation` 함수를 호출하기위한 파라미터와 이에대한 설명입니다.

```solidity
interface IFlashLoanReceiver {
    function executeOperation(
      address[] calldata assets,
      uint256[] calldata amounts,
      uint256[] calldata premiums,
      address initiator,
      bytes calldata params
    ) external returns (bool);
}
```

* `address[] calldata assets` : 대출한 자산 목록을 의미합니다.
* `uint256[] calldata amounts` : 대출한 금액 목록을 의미합니다.
* `uint256[] calldata premiums` : 대출한 자산에 대한 수수료가 반영된 금액 목록을 의미합니다. 즉 `amount` + `premium` 만큼을 상환해야합니다.
* `address initiator` : 플래시론을 호출한 주소를 나타냅니다.
* `bytes calldata params` : 플래시론을 호출할때 넘겨준 파라미터 데이터를 나타냅니다

### 예시 컨트랙트

아래는 지금까지 설명했던 **A컨트랙트**의 예시입니다.

```solidity
contract AContract is IFlashLoanReceiver {
// 랜딩풀은 클레이 뱅크의 Lending Pool 주소를 활용해야합니다.
// 또는 클레이 뱅크의 Address Provider를 통해 Lending Pool 주소를 얻어올 수 있습니다.
    ILendingPool public LENDING_POOL; 

    function executeOperation(
        address[] calldata assets,
        uint256[] calldata amounts,
        uint256[] calldata premiums,
        address initiator,
        bytes calldata params
    )
        external
        override
        returns (bool)
    {
        // 실제 자산을 획득한 뒤 수행할 코드는 여기에 작성하면 됩니다.
        // 파라미터로 넘어온 assets와 amounts를 활용해 코드를 진행합니다.
        // 필요시에 initiator 주소도 활용할 수 있습니다. ( 함수호출자 검증 등 )

        // 특별히 부채생성 모드로 실행하지않은경우 함수 종료시점에 자산을 반환해야합니다.
        // 아래 예시는 클레이뱅크의 Lending Pool 컨트랙트가 자산을 가져갈 수 있도록 토큰에 Approve를 진행해줍니다.
        for (uint i = 0; i < assets.length; i++) {
	    uint amountToRepay = amounts[i].add(premiums[i]);
	    IKIP7(assets[i]).approve(address(LENDING_POOL), amountToRepay);
	}

	/*

	이 부분에 flashloan을 이용해 수행하고자하는 로직을 작성합니다.

	*/ 

	// 로직전개중 트랜잭션을 취소하고싶을때 가스비 최소화를 위해 false를 리턴할 수 있습니다.
	// 일반적인 성공 상황에서는 true를 리턴해주면 됩니다.
	return true;
    }

    function exampleFlashLoanCall() public {
        address receiverAddress = address(this);
        address[] memory assets = new address[](2);
        assets[0] = address(0xcee8faf64bb97a73bb51e115aa89c17ffa8dd167); // KUSDT
        assets[1] = address(0x5c74070fdea071359b86082bd9f9b3deaafbe32b); // KDAI

        uint256[] memory amounts = new uint256[](2);
        amounts[0] = 1000000; // 1 KUSDT
        amounts[1] = 1 ether; // 1 KDAI

        // 0 = 부채 생성 X 즉시 상환 모드
        uint256[] memory modes = new uint256[](2);
        modes[0] = 0;
        modes[1] = 0;

        address onBehalfOf = address(this);
        bytes memory params = "";
        uint16 referralCode = 0;

        LENDING_POOL.flashLoan(
            receiverAddress,
            assets,
            amounts,
            modes,
            onBehalfOf,
            params,
            referralCode
        );
    }
}
```

### 더 알아보기

플래시론을 활용할때 클레이뱅크 **LedingPool 컨트랙트** 의 `flashLoan` 함수를 호출하고 `executeOperation` 를 구현하는 것들이 모두 하나의 컨트랙트 (예시에서는 **A컨트랙트**) 일 필요는 없습니다.

필요에 따라서 일반 계정(EOA)에서 `flashLoan` 를 호출하고 `receiverAddress` 에 `executeOperation` 를 구현한 컨트랙트 주소(예시에서는 **A컨트랙트**)를 기입해도 무방합니다. 또한 또다른 컨트랙트인 **B컨트랙트**에서 호출할수도 있습니다. 각각 모두 `msg.sender`가 달라짐을 유의합니다.

위와같이 누구나 `flashLoan` 을 호출하여 다른 컨트렉트의 `executeOperation` 을 호출할 수 있으므로 [griefing](https://ethereum.stackexchange.com/questions/92391/explain-griefing-attack-on-aave-flash-loan/92457#92457)공격을 조심해야합니다. 해당 공격은 다음과 같이 이루어질 수 있습니다.

* A컨트랙트에 자산(토큰)을 가지고있고 플래시론을 위해 `executeOperation()` 이 구현되어있는경우
* B컨트랙트가 `flashloan()` 에 `receiverAddress` 파라미터로 A컨트랙트 주소를 넣고 실행할 수 있습니다.
* 이 경우 A컨트랙트의 `executeOperation()` 가 실행 될 것이고, 클레이뱅크의 LendingPool은 A컨트랙트로부터 자산 회수를 시도합니다.
* A컨트랙트에 자산이 있기때문에 자산회수가 성공하게되고 A컨트랙트 코드에 따라 자산손실이 발생할 수 있습니다.

이 공격을 막기위해서 `executeOperation` 함수에 적절한 방어로직(initiator 화이트리스팅, 자산 전,후 비교 require문 등..)을 충분히 고려하는것을 권장합니다.&#x20;

### 활용방안

클레이 뱅크의 플래시론을 활용하여 순간 큰 자산이 필요할 때 기능을 수행할 수 있습니다.

* 클레이튼 내 DEX내에서의 큰 규모의 차액거래(Arbitrage) 기회가 생겼을때 활용하여 차액을 획득할 수 있으며
* 클레이뱅크 뿐만아니라 다른 대출 프로토콜들의 청산기회가 생겼을때 없는 자산을 빌려 청산을 진행하고 청산 보너스를 얻을 수 있습니다.

이 외 한 트랜잭션내에 큰 규모의 자산을 빌려 이득을 취할수 상황이 있다면 플래시론을 활용하여 큰 이익을 얻을 수 있습니다.


# 플래시론을 활용한 아비트라지(1)

### 아비트라지란

아비트라지는 무위험 차익거래를 의미합니다. 만약 두 거래소 간 같은 자산이 다른 가격을 가지고 있다면 가장 흔한 아비트라지 기회가 발생할 것입니다.

예컨데 Claimswap에서 KLAY가 1.2 USDT의 가격을 지닌데 반해, Klayswap에서는 1.3 USDT의 가격을 지니면 Claimswap에서 KLAY를 구매 후 Klayswap에서 판매하면 위험 없이 수익을 거둘 수 있습니다. 통상의 경우 차익거래를 함에 있어서 차익거래 기회가 빠르게 사라지기 때문에 완전한 무위험 차익거래가 일어나기 힘들지만, 플래시론의 경우에는 차익거래 과정이 완결이 나야지만 실제 거래가 발생할 수 있으므로 아비트라지가 가능합니다.

### 플래시론과 컨트랙트

실질적으로 이러한 플래시론이 어떻게 동작하고, 어느정도의 일을 할 수 있는지 감이 잘 오지 않을 수 있습니다. 이를 위해 전반적인 과정을 풀어서 설명을 하겠습니다.

#### **1. 봇**

의도한 바에 따라 다를 수 있겠지만, 차익거래 기회는 보통 항상 발생하는 것이 아니기 때문에 블록마다 상기에서 언급한 거래소 간 가격 차이가 나는지 확인하는 봇(Bot)을 만들어야 합니다. 이는 Caver라는 Klaytn 노드와 상호작용할 수 있는 사전에 갖추어진 API 라이브러리를 통해서 쉽게 만들 수 있습니다.

차익거래 기회를 발견하는 봇을 만들었다면, 이 봇은 매 클레이튼 블록마다 우리가 사전에 지정한 풀, 예컨데 USDT — ETH 사이에서 각 거래소의 가격을 측정합니다. 만약 Claimswap에서 USDT를 많이 스왑하는 대규모의 거래가 발생한다면 가격비가 한번에 많이 변동하여 Klayswap에 비해 ETH가 비싸질 수 있습니다.

이 때 해당 봇은 Klayswap의 ETH 가격이 Claimswap 보다 싸다고 알려주고, 아비트라지 거래를 실행할 컨트랙트를 호출할 트랜젝션을 보내게 됩니다.

#### **2. 컨트랙트**

봇이 노드를 통해 블록마다 발생할 수 있는 차익거래 기회를 포착한 후 이를 실행하는 컨트랙트를 호출하는 역할을 하는 한편, 구체적으로 어떤 동작을 수행할지를 사전에 정의해놓은 컨트랙트 또한 필수적으로 필요합니다.

해당 컨트랙트는 어떤 자산과 어떤 자산을 교환하고 얼마만큼 교환을 할 것인지 입력값을 받는 함수를 사전에 정의해놓습니다. 이 입력값이 봇에 설정해놓은대로 들어오면, 컨트랙트는 이를 구체적으로 실행하는 역할을 합니다. 예컨데 봇이 상기와 같이 Klayswap의 ETH 가격이 Claimswap 보다 싼 상황을 포착하면, 봇은 차익거래를 실현하라고 컨트랙트를 호출하게 됩니다.

컨트랙트에서는 이 입력값을 바탕으로 각 거래소마다 실제로 스왑을 했을 때 이득이 나는지를 확인하는 절차를 거치고, 이득이 나는 것으로 판명이 되면 비로소 Klaybank에서 ETH를 빌려서 Klayswap에서 ETH를 KUSDT로 바꾸고, 이 KUSDT를 Claimswap에서 ETH로 다시 바꾸고 이를 다시 Klaybank에 갚는 함수를 실행시킵니다. Klayswap의 ETH 가격이 Claimswap 보다 저렴하기 때문에 빌린 ETH 개수보다 내 수중에 있는 ETH 개수가 더 많을 것입니다. 이 모든 일은 클레이튼 네트워크의 한 트랜젝션에 담기게 됩니다. 만약 이 과정에서 이 거래 이후 수수료를 포함해서 다시 값아야 할 ETH 개수가 모자르다면, 해당 거래는 취소가 되게 됩니다.

#### **3. 결론**

예시로 플래시론에 대해 간략하게 설명하였지만, 커스터마이징을 통해 얼마든지 상황에 맞추어서 다양한 전략으로 아비트라지 전략을 운용할 수 있습니다.

현재는 ETH와 KUSDT만을 가지고 예시를 들었고, Claimswap과 Klayswap만을 언급하였지만 각 DEX에 상장되어있는 자산들은 너무나 많고 DEX 자체도 Claimswap과 Klayswap만이 아니라 더 많은 종류의 DEX가 있습니다. 그만큼 차익거래의 기회는 무궁무진합니다.

이미 많은 거래들이 일어나고 있지만, 클레이튼 생태계가 더 커지고 더 많은 거래가 일어날수록 가격비가 변화하는 일은 더 많이 생기고 이로 인해 차익거래 기회도 훨씬 더 많이 생길 수 있습니다. 생태계가 커지면 비단 차익거래 뿐만이 아니라 또 다른 플래시론의 간단한 쓰임새인 청산과 관련하여서도 많은 기회가 생길 수 있습니다.

이 많은 기회들과 다양한 종류의 자산 풀들에 대해 아비트라지를 하는 사람들이 자산들을 모두 구비를 해둘 수는 없습니다. 하지만 Klaybank의 랜딩 풀을 이용한 플래시론을 사용시 무자본으로 다양한 아비트라지가 가능합니다. 이에 따라 Klaytn 생태계의 독점적인 플래시론 플랫폼으로서 Klaybank는 보다 많은 사람들이 플래시론을 활용할 수 있도록 예시를 구성함과 동시에, 플래시론이 장기적으로 Klaybank에 큰 이득을 가져다 줄 것이라는 점에 대해서 이용자들에게 잘 전달하는 것이 중요하다고 생각하여 이러한 아티클을 구상하게 되었습니다.

이제 2장에서는 구체적으로 코드를 통해 플래시론을 이용한 아비트라지에 대해서 설명하겠습니다.


# 플래시론을 활용한 아비트라지(2)

## Overview <a href="#id-1be4" id="id-1be4"></a>

다음은 실제코드와 함께 플래시론을 이용하여 아비트라지를 하는 예제를 설명합니다.

본 예제에서는 클레이스왑과 클레임스왑에 존재하는 KUSDT↔KETH 페어간 아비트라지 기회를 포착하고 실행하는 방법 및 코드를 설명합니다.

아비트라지를 하기 위해서는,

1. 플래시론을 활용하여 스왑하는 컨트랙트
2. 기회를 포착하여 트랜잭션을 전송하는 봇

두가지가 필요합니다.

컨트랙트는 세개의 컨트랙트로 구성되어있으며 각각,

* 기회를 포착한 봇이 트랜잭션을 날려 시작점이 되는 컨트랙트 (A)
* 플래시론을 이용해 클레이스왑 → 클레임스왑 순서의 차액거래를 하는 컨트랙트 (B)
* 플래시론을 이용해 클레임스왑 → 클레이스왑 순서의 차액거래를 하는 컨트랙트 (C)

로 구성됩니다. 아래의 설명에서는 각 컨트랙트의 주소를 (A),(B),(C)로 표기하여 설명합니다.

## Contract <a href="#id-8bfe" id="id-8bfe"></a>

Arbitrager Contract(A)는 아비트라지 기회를 포착후 Tx를 받는 허브역할을 하게됩니다.

```solidity
contract Arbitrager {
    
    ILendingPool LENDING_POOL;
    IKlaySwapProtocol KLAYSWAP;
    IClaimSwapRouter CLAIMSWAP;
    ...
    function swapKlaySwapToClaimSwap(address tokenA, address tokenB, uint256 amount) public {
    ...
    }
    function swapClaimSwapToKlaySwap(address tokenA, address tokenB, uint256 amount) public {
    ...
    }
    ...   
}
```

클레이스왑 → 클레임스왑 순서의 아비트라지를 수행하는 함수(`swapKlaySwapToClaimSwap`) 와 클레임스왑 → 클레이스왑 순서의 아비트라지를 수행하는 함수(`swapClaimSwapToKlaySwap`) 가 존재합니다. 각각 상황에 맞추어 호출하면 (B), (C) 컨트랙트를 호출하는 플래시론 동작을 수행합니다.

```solidity
function swapClaimSwapToKlaySwap(address tokenA, address tokenB, uint256 amount) public {
    address[] memory assets = new address[](1);
    assets[0] = tokenA;
    uint256[] memory amounts = new uint256[](1);
    amounts[0] = amount;
    uint256[] memory modes = new uint256[](1);
    modes[0] = 0;
    bytes memory params = addressToBytes(tokenB);
    LENDING_POOL.flashLoan(
        ArbitragerClaimToKlaySwap,
        assets,
        amounts,
        modes,
        address(this),
        params,
        0
    );
}
```

두가지의 함수중 `swapClaimSwapToKlaySwap` 를 기준으로 설명합니다.

`swapClaimSwapToKlaySwap` 는

1. KUSDT → KETH ( 클레임 스왑)
2. KETH → KUSDT ( 클레이 스왑)

과정의 아비트라지를 수행해주는 함수입니다. 따라서 플래시론을 통해 빌릴 토큰 파라미터인 `assets` 에 tokenA 주소를, `amounts`에 파라미터로 받은 amount를 넣고 플래시론을 실행해줍니다.

플래시론 인터페이스 및 파라미터 에 대한 설명은 [여기](https://docs.klaybank.org/protocol/functions/flashloan#flashloan) 를 참조해주세요.

`LENDING_POOL.flashLoan(...)` 을 통해 플래시론을 실행해주고, 플래시론을 통해 로직을 수행할 컨트랙트인

`ArbitragerClaimToKlaySwap` 에 (C) 주소를 입력합니다.

```solidity
contract ArbitragerClaimToKlaySwap is IFlashLoanReceiver {
    function executeOperation(
        address[] calldata assets,
        uint256[] calldata amounts,
        uint256[] calldata premiums,
        address initiator,
        bytes calldata params
    ) external returns (bool){
        uint estimateOut;
        uint estimateOut2;
        address[] memory path = new address[](2);
        // tokenA
        path[0] = assets[0];
        // tokenB
        path[1] = bytesToAddress(params);
        estimateOut = CLAIMSWAP.getAmountsOut(amounts[0], path)[1];
        IKlaySwapExchange klaySwapPool = IKlaySwapExchange(KLAYSWAP.tokenToPool(path[0], path[1]));
        estimateOut2 = klaySwapPool.estimatePos(path[1], estimateOut);
        require(estimateOut2 > amounts[0]);
        _swapClaimSwap(path[0], path[1], amounts[0]);
        _swapKlaySwap(path[1], path[0], estimateOut);
        for (uint i = 0; i < assets.length; i++) {
            checkApprove(assets[i], address(LENDING_POOL));
        }
        IKIP7(assets[i]).transfer(msg.sender,estimateOut2-amounts[0]-premiums[0]);
        return true;
    }
    
    function _swapKlaySwap(address tokenA, address tokenB, uint256 amount) private {
        checkApprove(tokenA, address(KLAYSWAP));
        KLAYSWAP.exchangeKctPos(tokenA, amount, tokenB, 10, new address[](0));
    }
    
    function _swapClaimSwap(address tokenA, address tokenB, uint256 amount) private {
        checkApprove(tokenA, address(CLAIMSWAP));
        address[] memory path = new address[](2);
        path[0] = tokenA;
        path[1] = tokenB;
        CLAIMSWAP.swapExactTokensForTokens(amount, 10, path, address(this), 4230424911);
    }
    
    function checkApprove(address token, address spender) public {
        if (token == address(0x0000000000000000000000000000000000000000)) {
            return;
        }
        if (!approvedTokens[spender][token]) {
            IKIP7(token).approve(spender, uint(2 ** 256 - 1));
            approvedTokens[spender][token] = true;
        }
    }
    ...
}
```

위 코드는 `ArbitragerClaimToKlaySwap` 컨트랙트의 일부분입니다. 플래시론을 통해 대출이 실행되었을때 수행할 코드를 작성하기위해 `IFlashLoanReceiver` 를 상속 받습니다. `ArbitragerClaimToKlaySwap` 는 클레임스왑 → 클레이스왑의 아비트라지를 수행하는 컨트랙트입니다. 따라서 `function executeOperation(...)`에서 실질적인 아비트라지를 진행합니다. 빌린 자산인 `asset[0]` 가 tokenA, 파라미터로 넘어온 데이터인 params가 tokenB가 되게됩니다. 함수의 동작은 다음과같은 순서로 진행됩니다.

1. 클레임 스왑의 getAmountsOut 과 클레이스왑의 estimate를 이용하여 거래를했을때 수익이 나는지 확인합니다.(`require(estimateOut2 > amounts[0]);`)
2. `_swapClaimSwap` 를 통해 클레임스왑에서 A→B 토큰으로 교환을 하고
3. `_swapKlaySwap` 를 통해 클레이스왑에서 B→A 토큰으로 교환을 합니다.
4. 마지막으로 클레이뱅크에 빌린 자산을 돌려주기위해 approve 를 확인해주는 `checkApprove` 함수를 실행합니다.

이로써 A→B→A 토큰 교환을 마치고 대출금액 및 플래시론 수수료를 상환한 뒤 남은 차액을 얻게됩니다.

`swapKlaySwapToClaimSwap` 를 사용하는 `ArbitragerKlaySwapToClaim` 컨트랙트역시 로직은 동일하며 순서만 다릅니다.

## Arbitrage Bot <a href="#b6f3" id="b6f3"></a>

Arbitrage Bot의 전체 소스코드는 [http://github.com/klaybank/arbitrager ](https://github.com/klaybank/arbitrager)에 업로드 되어있습니다.

```javascript
const Caver = require('caver-js')
const BigNumber = require("bignumber.js");
const IKIP7ABI = require('./build/contracts/IKIP7.json');
const IKlayswapProtocolABI = require('./build/contracts/IKlaySwapProtocol.json');
const IKlayswapExchangeABI = require('./build/contracts/IKlaySwapExchange.json');
const IClaimSwapRouterABI = require('./build/contracts/IClaimSwapRouter.json');
const ArbitragerABI = require('./build/contracts/Arbitrager.json')
```

먼저 봇 실행에 필요한 기본적인 Caver, BigNumber 및 컨트랙트의 ABI들을 추가해줍니다.

```javascript
const KETHAddress = "0x34d21b1e550d73cee41151c77f3c73359527a396"
const KUSDTAddress = "0xcee8faf64bb97a73bb51e115aa89c17ffa8dd167"
const KlayswapFactoryAddress = "0xc6a2ad8cc6e4a7e08fc37cc5954be07d499e7654"
const ClaimSwapRouterAddress = "0xEf71750C100f7918d6Ded239Ff1CF09E81dEA92D"
const Klayswap_KUSDT_KETH_ExchangeAddress = "0x029e2a1b2bb91b66bd25027e1c211e5628dbcb93"
const ArbitragerAddress = "Deployed Contract Address"
const tryKUSDTAmount = new BigNumber("10000" + "000000") // 10000 KUSDT
```

위에는 각 컨트랙트들의 주소를 나타내며, `ArbitragerAddress`의 경우 직접 배포한 컨트랙트의 주소가 위치하게 됩니다.

`tryKUSDTAmount` 는 한번 아비트라지를 시도할때 사용할 금액을 나타내며, 이 예시에서는 10,000 KUSDT를 기준으로 설명합니다.

```javascript
const caver = new Caver(new Caver.providers.WebsocketProvider("wss://public-node-api.klaytnapi.com/v1/cypress/ws"));
const KUSDTContract = new caver.klay.Contract(IKIP7ABI, KUSDTAddress)
const KETHContract = new caver.klay.Contract(IKIP7ABI, KETHAddress)
const klayswapFactoryContract = new caver.klay.Contract(IKlayswapProtocolABI, KlayswapFactoryAddress)
const klayswap_USDT_ETH_ExchangeContract = new caver.klay.Contract(IKlayswapExchangeABI, Klayswap_KUSDT_KETH_ExchangeAddress)
const claimSwapRouterContract = new caver.klay.Contract(IClaimSwapRouterABI, ClaimSwapRouterAddress)
const arbitragerContract = new caver.klay.Contract(ArbitragerABI, ArbitragerAddress)
```

매 블록마다 기회를 포착하기위해 소켓을 이용하며, 각 컨트랙트들을 ABI와 주소를 이용해 초기화해줍니다.

```javascript
const keyring = caver.wallet.keyring.createFromPrivateKey('Input your private key here')
caver.wallet.add(keyring)
caver.klay.accounts.wallet.add(
    caver.klay.accounts.createWithAccountKey(keyring.address, keyring.key.privateKey))
```

또한 아비트라지 트랜잭션을 보낼 EOA의 private key를 이용하여 키링을 설정해줍니다.

```javascript
const subscription = caver.rpc.klay.subscribe(
    'newBlockHeaders',
    async (error, result) => {
        if (error) {
            console.error(error);
            return;
        }
        let estimateUsdtToETHKlayswap = await klayswap_USDT_ETH_ExchangeContract.methods.estimatePos(KUSDTAddress, tryKUSDTAmount).call();
        let estimateETHToUsdtClaimSwap = (await claimSwapRouterContract.methods.getAmountsOut(estimateUsdtToETHKlayswap, [KETHAddress, KUSDTAddress]).call())[1]
        let KlayswapToClaimRes = new BigNumber(estimateETHToUsdtClaimSwap)
        console.log(`diff1 : ${KlayswapToClaimRes.toString()}`)
        if (KlayswapToClaimRes.isGreaterThan(tryKUSDTAmount)) {
            let txRes = await arbitragerContract.methods.swapKlaySwapToClaimSwap(KUSDTAddress, KETHAddress, tryKUSDTAmount).send(
                {
                    from: keyring.address,
                    gas: 5000000
                }
            )
            console.log(`try arbitrage klayswap -> claimSwap tx : ` + txRes.hash)
        }
        let estimateUsdtToETHClaimSwap = (await claimSwapRouterContract.methods.getAmountsOut(tryKUSDTAmount, [KUSDTAddress, KETHAddress]).call())[1];
        let estimateETHToUsdtKlayswap = await klayswap_USDT_ETH_ExchangeContract.methods.estimatePos(KETHAddress, estimateUsdtToETHClaimSwap).call()
        let ClaimSwapToKlayswapRes = new BigNumber(estimateETHToUsdtKlayswap)
        console.log(`diff2 : ${ClaimSwapToKlayswapRes.toString()}`)
        if (ClaimSwapToKlayswapRes.isGreaterThan(tryKUSDTAmount)) {
            let txRes = await arbitragerContract.methods.swapClaimSwapToKlaySwap(KUSDTAddress, KETHAddress, tryKUSDTAmount).send(
                {
                    from: keyring.address,
                    gas: 5000000
                }
            )
            console.log(`try arbitrage claimSwap -> klayswap tx : ` + txRes.hash)
        }
})
    .on('connected', console.log)
    .on('error', console.error);
```

블록마다 아비트라지기회를 포착하고 실행하는 코드부분입니다.

```javascript
const subscription = caver.rpc.klay.subscribe(
    'newBlockHeaders',
    async (error, result) => {
        if (error) {
            console.error(error);
            return;
        }
    ...
    ...
```

부분에서 `newBlockHeaders` 를 subscribe하여 매 블록마다 이벤트를 받을 수 있도록 구성합니다. 이 subscribtion은 블록이 생성될때마다 `async (error, result) => {...}` 함수 콜백을 실행시켜줍니다.

따라서 콜백함수 내부에서 매 블록마다 클레이스왑 → 클레임스왑 에서 기회가 있는지, 클레임스왑 → 클레이스왑 에서 기회가 있는지 체크하게 됩니다.

```javascript
let estimateUsdtToETHKlayswap = await klayswap_USDT_ETH_ExchangeContract.methods.estimatePos(KUSDTAddress, tryKUSDTAmount).call();
let estimateETHToUsdtClaimSwap = (await claimSwapRouterContract.methods.getAmountsOut(estimateUsdtToETHKlayswap, [KETHAddress, KUSDTAddress]).call())[1]
let KlayswapToClaimRes = new BigNumber(estimateETHToUsdtClaimSwap)
console.log(`diff1 : ${KlayswapToClaimRes.toString()}`)
if (KlayswapToClaimRes.isGreaterThan(tryKUSDTAmount)) {
    let txRes = await arbitragerContract.methods.swapKlaySwapToClaimSwap(KUSDTAddress, KETHAddress, tryKUSDTAmount).send(
        {
            from: keyring.address,
            gas: 5000000
        }
    )
    console.log(`try arbitrage klayswap -> claimSwap tx : ` + txRes.hash)
}
```

콜백함수 내 위 코드는 클레이스왑 → 클레임스왑 에서의 KUSDT→KETH→KUSDT 경로의 아비트라지 기회가 있는지 포착합니다.

클레이 스왑에서 10,000 KUSDT를 KETH로 바꾼 예측값(`estimateUsdtToETHKlayswap`)를 구합니다. 이 예측값을 다시 이용하여 클레임 스왑에서 KETH를 KUSDT로 바꾼 예측값(`estimateETHToUsdtClaimSwap`) 를 구합니다.

이때 `estimateETHToUsdtClaimSwap` 의 값이 `tryKUSDTAmount` 보다 크다면 아비트라지 기회가 생긴 것 이므로, Contract 섹션에서 설명했던 arbitragerContract의 `swapKlaySwapToClaimSwap` 함수를 통해 플래시론 및 아비트라지를 수행하게 됩니다.

```javascript
let estimateUsdtToETHClaimSwap = (await claimSwapRouterContract.methods.getAmountsOut(tryKUSDTAmount, [KUSDTAddress, KETHAddress]).call())[1];
let estimateETHToUsdtKlayswap = await klayswap_USDT_ETH_ExchangeContract.methods.estimatePos(KETHAddress, estimateUsdtToETHClaimSwap).call()
let ClaimSwapToKlayswapRes = new BigNumber(estimateETHToUsdtKlayswap)
console.log(`diff2 : ${ClaimSwapToKlayswapRes.toString()}`)
if (ClaimSwapToKlayswapRes.isGreaterThan(tryKUSDTAmount)) {
    let txRes = await arbitragerContract.methods.swapClaimSwapToKlaySwap(KUSDTAddress, KETHAddress, tryKUSDTAmount).send(
        {
            from: keyring.address,
            gas: 5000000
        }
    )
console.log(`try arbitrage claimSwap -> klayswap tx : ` + txRes.hash)
}
```

클레임스왑 → 클레이스왑 의 경우 역시 마찬가지로 클레임 스왑에서 10,000 KUSDT를 KETH로 바꾼 예측값(`estimateUsdtToETHClaimSwap`) 를 구합니다. 이 예측값을 다시 이용하여 클레이 스왑에서 KETH를 KUSDT로 바꾼 예측값(`estimateETHToUsdtKlayswap`) 를 구합니다. 그 후 과정은 arbitragerContract의 `swapClaimSwapToKlaySwap`를 이용하는 것 외에 이전 설명과 동일합니다.

## 마치며 <a href="#id-83f0" id="id-83f0"></a>

아비트라지 기회는 위에서 언급한 클레이스왑↔클레임스왑 사이에만 존재하는것은 아닙니다. 또한 KUSDT↔KETH 페어 사이에서만 발생하는 것 역시 아닙니다. 다양한 Dex(클레이스왑, 클레임스왑, 팔라, UFO, …) 과 다양한 페어(KUSDT↔KETH, KLAY↔KUSDT, CLA↔KUSDT, …)를 이용하여 여러 기회를 포착할 수 있습니다.

따라서 봇 코드를 고도화 다양한 경로를 감시 및 아비트라지 할 수 있으며, 더욱 고도화 한다면 고정된 시도금액 ( 예시에서 10,000 KUSDT ) 이 아닌 더 큰 금액 또는 작은 금액으로 가변적으로 조절할 수 있습니다.

플래시론은 이러한 아비트라지 기회를 포착하고 실행할때, 무담보 대출을 실행하여 자본이 없거나 부족하더라도 아비트라지를 안정적으로 성공하도록 도와줍니다.

위 예시 코드에서는, Arbitrager contract에 쌓인 토큰을 꺼내는 함수 및 보안을 위한 사항들이 고려되어있지 않으므로 사용시에는 적절한 수정을 통해 사용하는 것을 권장합니다.


# 2. Bond

**Bonding은 POL(Protocol Owned Liquidity)를 실현하기 위한 방법입니다.** 사용자는 프로토콜을 대상으로 KBT-KLAY pair 등의 LP 토큰을 매각하여 할인된 가격의 KBT를 구매할 수 있습니다. 이를 통해 프로토콜이 시장의 거래 유동성을 확보할 수 있게 되어 KBT 토큰의 가격 안정성을 확보할 수 있습니다. Bonding에 참여하기 위한 자산으로 KBT-KLAY LP 토큰 외 다양한 자산이 추가될 수 있습니다.

사용자는 Bonding에 참여하여 KBT-KLAY 등의 LP 토큰을 매각한 경우, 할인된 KBT를 약 5일(432,000 Block)에 걸쳐 블록 단위로 나누어 받게 됩니다. 사용자는 언제든 claim을 통해 현재까지 배분된 KBT를 받을 수 있으며, 모든 토큰을 받기 위해서는 5일이 지나야 합니다. 만약, 5일이 모두 지나기 전에 추가로 Bonding을 진행하면, 이전에 진행중이던 배분 기간은 재설정됩니다. 이 경우, 기존에 배분되던 KBT와 추가 Bonding으로 배분될 KBT가 5일동안 새롭게 배분됩니다.

현재 Bonding과 관련된 수치들은 다음과 같습니다.

<table><thead><tr><th width="218.9679869777537">항목</th><th>설명</th><th>값</th></tr></thead><tbody><tr><td>Vesting Term</td><td>Bonding을 통해 구매한 KBT가 모두 배분되기까지 걸리는 시간입니다. 구매한 KBT는 이 시간동안 선형적으로 배분됩니다.</td><td>약 5일 (432,000 Blocks)</td></tr><tr><td>Max Payout</td><td>한 트랜잭션으로 Bonding에서 구매할 수 있는 채권의 최대 수량입니다.</td><td>6,000 KBT</td></tr><tr><td>Max Discount Rate</td><td>Bonding을 통해 판매되는 KBT의 최대 할인율입니다.</td><td>25% (시장 가격보다 최대 25%까지 할인을 받을 수 있음을 의미합니다.)</td></tr><tr><td>Max Bond Premium</td><td>채권 판매가 활발하게 이루어져 할인된 가격으로 KBT를 판매되지 않을 수 있습니다. 이는 KBT 토큰의 가치 상승에 대한 메리트가 매우 크기 때문에 역으로 할인이 없거나 더 높은 가격으로라도 채권을 구매하는 것을 의미합니다. 이럴 경우, 채권에 프리미엄이 붙을 수 있는 최대 비율을 의미합니다.</td><td>-15% (시장 가격보다 최대 15%까지 프리미엄이 붙을 수 있음을 의미합니다.)</td></tr><tr><td>Fee</td><td>Bonding으로 판매되는 채권에 대한 수수료입니다.</td><td>0</td></tr></tbody></table>

{% hint style="info" %}
🎉Klaybank의 출시를 기념하고, 생태계의 활발한 참여를 독려하기 위해 Bonding 수수료 무료 이벤트를 진행합니다.
{% endhint %}

## POL(Protocol Owned Liquidity)이 무엇인가요?

Bonding을 통해 사용자는 자신이 소유한 KBT-KLAY LP 토큰을 지불하여 할인된 가격의 KBT로 채권을 구매할 수 있습니다. Bonding으로 프로토콜은 채권을 발행하여 LP 토큰을 확보할 수 있으며, 이는 프로토콜의 자체 유동성을 형성하는데 기여합니다. 프로토콜이 유동성 물량의 상당 부분을 소유하므로 유동성 변동에 대한 리스크가 줄어듭니다. 대량 거래가 이루어져도 프로토콜이 풍부한 유동성을 소유하기 때문에, 거래로 인한 체결 가격 오차(Slippage)가 크지 않고 유동성에도 큰 영향을 받지 않게 됩니다. 또, 프로토콜은 유동성을 보유함으로서 거래 수수료로 발생하는 수익을 배분할 수 있습니다. 이를 통해 장기적으로 프로토콜을 건강하고 신뢰할 수 있게 합니다.

## Bonding을 통해 얻을 수 있는 것은 무엇인가요?

Bonding은 프로토콜이 자체 유동성을 소유할 수 있게 함으로써 프로토콜이 건강하게 동작할 수 있도록 합니다. 또한, Bonding에 참여한 사용자는 시장가보다 저렴한 가격으로 할인된 KBT를 구매할 수 있게 됩니다.

## Bonding의 위험 요소가 있나요?

Bonding에 참여한 사용자는 구매한 KBT를 바로 수령할 수 없습니다. 할인된 가격으로 구매한 KBT는 5일 동안 선형적으로 배분됩니다. 그러나 KBT가 배분되는 5일 내에 KBT의 가격이 하락한다면 시장가와 할인가의 차이도 좁혀지게 되어 수익이 줄어들거나 손해를 보게 될 수도 있습니다. 하지만 이는 Bonding 자체의 위험성보다 KBT 가격 하락에 의한 위험성에 가깝습니다.

## Bonding의 할인율은 어떻게 결정되나요?

Bonding의 할인율은 Klaybank 거버넌스에 의해 결정된 discount rate, bond sale에 할당된 토큰의 남은 물량, vesting이 진행중인 KBT의 수량 등에 의해 결정됩니다.

Bonding의 할인율이 어떻게 계산되는지 알아보기 위해 다음과 같이 정의합니다.

* $$p\_{bond}$$: KBT Bond의 가격
* $$p\_{orcacle}$$: KBT의 오라클 가격
* $$S\_{kbt}$$: KBT의 전체 공급량
* $$D$$: 프로토콜의 KBT 부채 총량 (Vesting Lock이 걸려있어 배분해야 하는 KBT의 양)

“프로토콜의 KBT 부채 비율”은 “KBT 전체 공급량” 대비 “배분을 통해 채권자에게 지급해야 하는 KBT 부채 총량”의 비율입니다. 따라서 다음과 같이 정의할 수 있습니다.

* $$r\_{debt} = \large D \over S\_{kbt}$$ ($$r\_{debt}$$: 프로토콜의 부채 비율)
* $$D = v\_{kbt} \sdot T\_{vesting}$$ ($$v\_{kbt}$$: KBT가 배분되는 속도, $$T\_{vesting}$$: KBT가 배분되는 시간)

“KBT의 bond sale 가격”은 “현재 시장 가격”에 “bond sale 할인율”을 곱한 값입니다. 따라서 다음과 같이 정의할 수 있습니다.

* $$R\_{price} = 1 - R\_{discount}$$ ($$R\_{price}$$: Price Rate, $$R\_{discount}$$: Bond의 할인율)
* $$p\_{bond} = p\_{oracle} \sdot R\_{price}$$

“KBT의 bond sale 할인율”은 “현재 프로토콜의 부채 비율”과 “Klaybank 거버넌스에서 결정한 설정값”에 의해 조절됩니다. 따라서 다음과 같이 정의할 수 있습니다.

* $$R\_{price}=r\_{debt} \sdot V\_{control}$$ ($$V\_{control}$$: Klaybank 거버넌스가 결정한 설정값)
* $$p\_{bond}=p\_{oracle} \sdot R\_{price} = p\_{oracle} \sdot r\_{debt} \sdot V\_{control}$$

“Klaybank 거버넌스가 결정하는 설정값”은 위에서 정의한 식들을 조합하여 계산할 수 있습니다.

* $$V\_{control} = \large {R\_{price} \over r\_{debt}} = \large {R\_{price} \sdot S\_{kbt} \over D} = \large { R\_{price} \sdot S\_{kbt} } \over {v\_{kbt} \sdot T\_{vesting}}$$

위 식에 따라 Klaybank 거버넌스는 목표한 KBT 배분 속도를 맞추도록 $$V\_{control}$$ 값을 결정하게 됩니다. 초기에 Bond Sale로 배분되는 KBT의 속도는 Liquidity Mining으로 분배되는 속도에 맞춰질 것입니다.

## Bonding은 어떻게 참여할 수 있나요?

Bonding은 [Klaybank Bond 페이지](https://app.klaybank.org/bond)에서 할 수 있으며, 2가지 방법으로 참여할 수 있습니다. 첫번째 방법은 소유한 LP 토큰을 지불하여 참여하는 것이고, 두번째 방법은 Zap을 이용하여 지갑에 소유중인 토큰을 지불하여 참여하는 것입니다.

### 1. LP 토큰을 직접 지불하여 참여

이 방법으로 Bonding에 참여하려면 LP 토큰이 필요합니다. LP 토큰은 Klaybank가 지원하는 DEX에서 유동성을 공급하여 얻을 수 있습니다. Bonding에 참여하기 전, 구매하려는 페어에 해당하는 유동성 풀에 유동성을 공급하여 LP 토큰을 획득하세요.

LP 토큰을 소유했다면, [Klaybank의 Bond 페이지](https://app.klaybank.org/bond)에서 Bonding에 참여할 수 있습니다. 만약, Bonding하려는 페어에 처음으로 참여한다면 Bond 하기 전에 Approve 트랜잭션이 필요합니다. Approve 트랜잭션은 사용자가 지불할 LP 토큰을 안전하게 Bonding 컨트랙트로 옮기기 위해 필요한 과정입니다. 유동성 풀 LP 당 최초 1회만 필요합니다. Bond 트랜잭션은 사용자의 LP 토큰을 Bonding 컨트랙트에 지불하고 KBT의 배분이 시작합니다.

### 2. Zap을 통해 지갑에 소유중인 토큰을 지불하여 참여

Bonding에 참여하기 위해 유동성 풀에 유동성을 공급하여 LP 토큰을 준비하는 일은 번거로울 수 있습니다. Zap은 이러한 불편함을 덜어줄 수 있는 기능입니다. Zap은 사용자가 소유한 토큰을 이용해 바로 Bonding에 참여할 수 있도록 합니다. Zap 트랜잭션은 사용자가 지불하는 토큰을 유동성 풀의 교환비에 맞춰 스왑하고 예치하여 나온 LP 토큰을 바로 Bonding 컨트랙트에 지불하여 Bonding에 참여할 수 있게 합니다.

Zap을 이용할 경우, 유동성 풀의 교환비에 맞추어 스왑이 진행됩니다. 이 때, 너무 많은 양을 교환할 경우, DEX 내 유동성 풀의 교환 전 비율과 교환 후 비율의 차이가 발생하여 체결 가격 오차(Slippage)가 발생할 수 있습니다. 따라서 최대 체결 가격 오차를 적절히 설정하여 가격 오차로 인한 손실을 방지하세요.

Klaybank에서 Zap으로 Bonding에 바로 이용할 수 있는 토큰들은 풍부한 유동성을 가진 토큰들로 다음과 같습니다.

* KLAY
* KUSDT

자세한 안내는 [유저 가이드](/user-guide/klaybank-1/bond)를 참고해주십시오.

{% hint style="info" %}
🎉Klaybank의 출시를 기념하고, 생태계의 활발한 참여를 독려하기 위해 유동성 공급을 위해 Zap 수수료 무료 이벤트를 진행합니다. 유동성 공급을 위해 DEX에서 발생하는 스왑 수수료를 제외한 수수료는 무료로 이용이 가능합니다.
{% endhint %}

## Bonding을 통해 구매한 KBT는 어떻게 수령하나요?

Bonding을 통해 구매한 KBT는 [Klaybank의 Bond 페이지](https://app.klaybank.org/bond)에서, Redeem을 통해 참여할 수 있습니다. Bonding을 통한 채권 구매가 체결된 이후, 매 블록마다 KBT가 배분되며 배분된 수량은 수령이 가능합니다. Claim을 통해 배분된 KBT를 즉시 수령할 수 있으며, Claim and Autostake를 통해 배분된 KBT를 바로 Staking 하여 더 많은 KBT를 수령할 수도 있습니다. Autostake는 현재 10 Days Guardian Vault를 지원합니다. Staking에 대한 자세한 내용은 [Klaybank의 Stake](/protocol/functions/stake)를, KBT 수령에 대한 자세한 안내는 [유저 가이드](/user-guide/klaybank-1/bond#redeem)를 참고해주십시오.


# 3. Deposit

대출자(Borrower)에게 암호화폐를 빌려주기 위해 Klaybank 프로토콜은 대출금으로 지급할 수 있는 암호화폐 자산이 필요합니다. 여기에 필요한 유동성은 대여자(Depositor)가 자신이 소유한 자산을 예치함으로써 공급하게 됩니다.

**대여자(Depositor)는 자산 예치에 대한 대가로 총 2가지 보상을 받을 수 있습니다.**&#x20;

1. 대출자(Borrower)가 대출함으로써 발생하는 대출 이자
2. 예치 행위 대한 추가 보상으로 이자가 발생하는 Klaybank의 거버넌스 토큰 (Asset별 상이)

현재 Klaybank에 예치할 수 있는 자산 종류 및 자산별 예치 추가 행동 보상 sKBT 비율은 아래 표와 같습니다. Borrow하는 대여자에게도 대출 추가 행동 보상 sKBT가 배분되므로 아래의 총합은 100%가 아닙니다. 대여자 분배비율은 [Borrow](/protocol/functions/4.-borrow)를 확인해주세요.

| 자산    | sKBT 배분 비율 |
| ----- | ---------- |
| KUSDT | 24%        |
| KDAI  | 10.4%      |
| KUSDC | 4%         |
| KLAY  | 28%        |
| KETH  | 9.6%       |
| KWBTC | 4%         |
| 합계    | 80%        |

예치한 자산에 대한 대출 이자는, 대출자가 지불하는 대출이자에서 프로토콜 펀드 할당량을 제외한 양을 받게됩니다. [Borrow](/protocol/functions/4.-borrow)에서 계산된 대출이자에서 프로토콜 할당량을 제외하게되며 각 자산별 프로토콜 펀드 할당량은 다음과 같습니다.

| 자산    | 프로토콜 펀드 할당량 |
| ----- | ----------- |
| KUSDT | 15%         |
| KDAI  | 15%         |
| KUSDC | 15%         |
| KLAY  | 25%         |
| KETH  | 25%         |
| KWBTC | 25%         |

*예치(Deposit) 가능한 자산, sKBT 배분비율 및 프로토콜 펀드 할당량은 거버넌스에 의해 변경될 수 있습니다. 거버넌스 제안이 올라가고 투표로 변경되지만, DAO 기능 제공전에는 클레이뱅크 팀에의해 변경 될 수 있습니다. 이는 최소 72시간전 공지 후 실행됩니다.*

각 자산에대한 담보 여부, 최대 담보율, 청산 담보율, 청산 패널티 는 [Borrow](/protocol/functions/4.-borrow)를 참조해주세요.


# 4. Borrow

대출자(Borrower)는 대출 이자를 지불하여 필요한 암호화폐를 대출할 수 있습니다. Klaybank는 대출자가 대출금을 미상환하여 프로토콜이 안정적으로 동작하지 않는 것을 막기 위해 대출자가 소유한 암호화폐 자산을 담보로 잡고 대출을 진행하도록 합니다. 즉 대출자는 반드시 [Deposit](/protocol/functions/borrow)를 통해 자산을 예치하고 담보로 사용하여야 합니다.&#x20;

대출자는 프로토콜 추가 행동보상으로 sKBT를 배분받습니다. 대출자가 담보 및 대출가능한 자산과 각 자산에대한 최대담보율, 청산 담보율, 청산 패널티는, sKBT 배분 비율은 다음과 같습니다.

<table><thead><tr><th width="150">자산</th><th>sKBT 배분율</th><th width="150">대출 가능</th><th>담보 가능</th><th>최대 담보율(LTV)</th><th>청산 담보율</th><th>청산 패널티</th></tr></thead><tbody><tr><td>KUSDT</td><td>6%</td><td>O</td><td>O</td><td>80%</td><td>85%</td><td>10%</td></tr><tr><td>KDAI</td><td>2.6%</td><td>O</td><td>O</td><td>75%</td><td>80%</td><td>10%</td></tr><tr><td>KUSDC</td><td>1%</td><td>O</td><td>X</td><td>-</td><td>-</td><td>-</td></tr><tr><td>KLAY</td><td>7%</td><td>O</td><td>O</td><td>60%</td><td>65%</td><td>10%</td></tr><tr><td>KETH</td><td>2.4%</td><td>O</td><td>O</td><td>70%</td><td>75%</td><td>10%</td></tr><tr><td>KWBTC</td><td>1%</td><td>O</td><td>O</td><td>45%</td><td>50%</td><td>10%</td></tr><tr><td>합계</td><td>20%</td><td></td><td></td><td></td><td></td><td></td></tr></tbody></table>

대출자는 행동보상으로 sKBT를 배분받지만, 대출해간 자산에 대해 대출이자를 지불해야합니다. 대출이자는 전체 예치된 자산량 대비 대출해간 자산량(=대출비율)에 영향을 받습니다.&#x20;

자산 $$k$$에 대하여 대출비율 $$U\_k={{Borrowed(k)}\over{Deposited(k)}}$$입니다.

프로토콜은 대여자들이 안정적으로 자산을 출금해갈 수 있도록 적절한 대출비율을 유지하도록 설계되었습니다. 따라서 대출비율이 적정비율($$U\_{opt}$$)보다 높아지면 대출이자가 높아지게되고, 적정비율보다 낮을때는 낮은 이율이 설정됩니다.

각 자산의 적정 비율, 이율 파라미터는 자산의 가격변동성, 안정성, 통화량 등이 고려되어 결정되었으며 수치는 다음과 같습니다.

<table><thead><tr><th width="150">자산</th><th width="150">적정 비율</th><th>R1</th><th>R2</th></tr></thead><tbody><tr><td>KUSDT</td><td>90%</td><td>4%</td><td>60%</td></tr><tr><td>KDAI</td><td>80%</td><td>4%</td><td>75%</td></tr><tr><td>KUSDC</td><td>80%</td><td>4%</td><td>75%</td></tr><tr><td>KLAY</td><td>65%</td><td>8%</td><td>100%</td></tr><tr><td>KETH</td><td>65%</td><td>8%</td><td>100%</td></tr><tr><td>KWBTC</td><td>65%</td><td>7%</td><td>100%</td></tr></tbody></table>

위의 수치들을활용한 자산 $$k$$에 대한 대출이율은 $$R\_k$$로표현되며,&#x20;

적정비율 이전에는 $$R\_k={U\_k \over U\_{opt}}\*R\_1$$,

적정비율 이후에는 $$R\_k=R\_1+{U\_k-U\_{opt} \over 1-U\_{opt}}\*R\_2$$로 설정됩니다.&#x20;

대출 이자는 복리로 계산되므로 위의 $$R\_k$$를 이용하여 APY를 계산하게되고 식은 아래와 같습니다.

$$APY=(1+R\_k/secsperyear)^{secsperyear}-1$$

지불한 대출이자는 프로토콜펀드와 대여자에게 나누어 배분되고, 프로토콜 펀드에 배분되는 비율은 [Deposit](/protocol/functions/borrow)에서 확인할 수 있습니다.

Borrow가능한 자산, sKBT 배분비율, 적정 비율, $$R\_1$$ 및 $$R\_2$$는 거버넌스에 의해 변경될 수 있습니다. 거버넌스 제안이 올라가고 투표로 변경되지만, DAO 기능 제공전에는 클레이뱅크 팀에의해 변경 될 수 있습니다. 이는 최소 72시간전 공지 후 실행됩니다.


# 5. Stake

Klaybank에서 staking은 KBT의 주요 가치 창출 수단이자 프로토콜의 안정성을 유지하기 위한 수단입니다. Klaybank KBT를 Guardian Vault에 staking 함으로써 사용자는 Klaybank 프로토콜의 안정성에 기여하고 이에 대한 대가로 보상받습니다.

Guardian Vault는 4가지가 존재하며 [Heatup Period](#heatup-period), [Unstake Window](#unstake-window), Reward가 상이합니다.

* 10 days Guardian Vault (1월 19일 출시)
  * Heatup Period: 10일
  * Unstake Window: 2일
* 3 months Guardian Vault (1월 26일 출시)
  * Heatup Period: 3개월
  * Unstake Window: 7일
* 6 months Guardian Vault (1월 26일 출시)
  * Heatup Period: 6개월
  * Unstake Window: 7일
* 9 months Guardian Vault (1월 26일 출시)
  * Heatup Period: 9개월
  * Unstake Window: 7일

## Staking을 하여 얻을 수 있는 것은 무엇인가요?

Guardian Vault에 KBT를 Staking하면 KBT와 1:1 비율로 Staking의 증표인 sKBT(Staked KBT)를 지급받습니다. Staking하는 Guardian Vault 마다 다른 종류의 sKBT 토큰을 지급받게 되며 sKBT를 홀드하고 있으면 각 Guardian Vault의 Emission Rate에 비례해서 10 days sKBT 토큰을 보상으로 받을 수 있습니다.

## Staking의 위험 요소가 있나요?

프로토콜의 위기 상황 발생시 Guardian Vault에 Staking된 자원이 사용될 수 있습니다. 이는 ShortFall Event로 불리우며 프로토콜 안정성을 위해 Slashing 비율만큼 Staking된 KBT가 사용될 수 있습니다.

ShortFall Event에 대한 정의는 거버넌스를 통해 정의되며, Slashing 비율 또한 거버넌스를 통해 정해집니다. 초기 ShortFall Event는 다음과 같습니다.

* 오라클 문제로 인해 청산 프로토콜에 손해 발생 시
* 컨트랙트 보안 및 기능 오류로 인해 프로토콜에 손해 발생 시
* 클레이튼 체인 동작 정지로 인해 프로토콜에 손해 발생 시

이러한 방식으로 Guardian Vault 기여자는 프로토콜 안정성에 기여하고 그에 따른 보상을 받아 갑니다. 이러한 긴급 상황은 Aave에서도 발생하지 않았으며, 추후 발생할 수 있는 긴급 상황에 대한 대비책임을 설명드리는 바입니다.

## Staking은 어떻게 할 수 있나요?

Staking은 Klaybank Stake 페이지에서 할 수 있습니다. Staking을 위해서는 총 2개의 트랜잭션이 필요합니다.

1. Approve - Guardian Vault가 사용자의 KBT를 안전하게 Gurdian Vault에 옮기기 위해 필요한 과정입니다. Approve는 각 Guardian Vault 당 한 번씩만 필요하며 이는 추가 Staking시 Approve가 필요없음을 의미합니다.
2. Stake KBT - 사용자 KBT를 Guardian Vault에 Staking합니다. 사용자의 KBT는 Guardian Vault로 전송되며 사용자는 이를 위한 증표로 sKBT 토큰을 받게 됩니다.

자세한 안내는 [`유저 가이드`](/user-guide/klaybank-1/stake#staking)를 참고해주십시오.

## Staking을 어떻게 중지 할 수 있나요? (Unstake)

Unstaking은 Klaybank Stake 페이지에서 할 수 있습니다. Unstaking을 위해서는 총 2개의 트랜잭션이 필요합니다.

1. Activate Heatup - Heatup은 Activate 하지 않은 상태일 때 필요한 과정입니다. Heatup Period가 끝난 후에 Unstake를 할 수 있습니다.
2. Unstake - Heatup Period 이후 Unstake Window 기간에 Unstake를 할 수 있습니다. **만약 Unstake Window 내에 Unstaking을 하지 않으면 다시 Activate Heatup을 해야합니다.**

자세한 안내는 [`유저 가이드`](/user-guide/klaybank-1/stake#redeem-unstake)를 참고해주십시오.

## Heatup Period가 무엇인가요?

Unstaking을 하기 위한 필요한 시간을 의미하며, 이는 Guardian Vault의 종류 별 명칭(10days, 3 months, 6 months, 9 months)과 동일합니다. Unstaking을 하기 전에 Heatup을 활성화 시켜야하며 Heatup Period가 끝난 후 정상적으로 Unstaking을 할 수 있습니다.&#x20;

## Heatup Period 중에 추가 Staking을 할 수 있나요?

Heatup Period 중에도 추가 Staking을 할 수 있으며 추가 Staking 하는 KBT 양만큼 가중평균 되어 Heatup Period 또한 늘어나게 됩니다. 만약Unstake Window상태에서 많은 양의 KBT를 Staking하면 Heatup Period에 가중평균이 되어 다시 Heatup Period 상태로 돌아갈 수 있습니다.

가중평균에 사용되는 수식은 다음과 같습니다.

$$
HeatupTime\_{next} = \large Now \sdot sKBT\_{additional}  + HeatupTime\_{previous} \sdot sKBT\_{current} \over sKBT\_{additional} + sKBT\_{current}
$$

* $$Now$$: 현재시간 (Unix Timestamp)
* $$HeatupTime\_{previous}$$: 최신 Heatup 시점 (Unix Timestamp)
* $$sKBT\_{additional}$$: 추가 Staking되는 KBT 양
* $$sKBT\_{current}$$: Staking 되어있는 KBT 양

{% hint style="info" %}
중평균되는 Heatup Period는 추가 Staking하는 시점을 넘어서지 않습니다. 또한, 가중평균 수식에 의해 같은 양의 sKBT를 Claim한다고 해도 Heatup을 활성화 시킨 시점에서 Claim 하는 시점이 멀어질 수록 Heatup Period가 늘어나는 시간은 많아지게 됩니다.
{% endhint %}

## Claim 시에 주의할 점이 있나요?

Claim은 heatup period, unstake window와 상관없이 언제든 가능합니다. 모든 Guardian Vault의 보상은 10 days sKBT로 지급되며 이는 10 days sKBT를 [추가 스테이킹](#heatup-period-staking)하는 효과를 가집니다. 즉, 10일 간의 Heatup Period를 거쳐야 Unstaking을 할 수 있습니다.&#x20;

{% hint style="info" %}
만약 이미 Heatup을 활성화 시킨 상태라면, 10 days sKBT를 [추가 스테이킹](#heatup-period-staking)하는 효과로 인해 Heatup Period가 늘어나게 됩니다.
{% endhint %}

## Unstake Window가 무엇인가요?

Heatup Period가 끝난 후 Unstaking을 할 수 있는 기간을 의미합니다. 만약 이 기간에 Unstaking을 하지 않으면 Heatup을 다시 활성화시키고 Heatup Period를 거쳐야합니다.


# Migration

Stake Migration을 통해 10 days sKBT를 3, 6, 9 months sKBT로 전환 할 수 있습니다. 전환시 3, 6, 9 Guardian Vault에 해당하는 대가를 보상받을 수 있습니다.

자세한 안내는 [유저 가이드](https://docs.klaybank.org/user-guide/undefined/stake/migration)를 참고해주십시오.

## 언제, 어떻게 Migration을 할 수 있나요?

Migration은 Klaybank 10 days Stake 페이지에서 할 수 있습니다. Migration은 10 days sKBT만 가능하며, 언제든지 3, 6, 9 months sKBT로 전환 할 수 있습니다. Migration시 고려해야할 점은 10 days sKBT와 3, 6, 9 months Guardian Vault의 상태값입니다. 10 day sKBT를 전부 Migration할 경우 10 day sKBT Heatup Period는 리셋되며, 부분 Migration 할 경우 남아 있는 10 day sKBT의 Heatup Period는 변화하지 않습니다.

**Migration시 10 days sKBT의 Heatup 활성화 상태 기간이 고려되어 3, 6, 9 months sKBT에 적용됩니다.**

* Heatup 비활성화 상태 = KBT를 stake한 상태
* Heatup 활성화 상태 = Heatup Period 혹은 Unstake Window 상태

<table><thead><tr><th width="212.33333333333331">10 day sKBT 상태</th><th width="271.311377245509">3, 6, 9 months sKBT 상태</th><th>설명</th></tr></thead><tbody><tr><td>Heatup 비활성화</td><td>Heatup 비활성화</td><td>Staked된 Amount만 증가합니다</td></tr><tr><td>Heatup 비활성화</td><td>Heatup 활성화</td><td>Heatup Period가 Amount에 따라 가중평균 적용됩니다.</td></tr><tr><td>Heatup 활성화</td><td>Heatup 비활성화</td><td>3, 6, 9 month sKBT heatup이 활성화 되고, Heatup Period는 Amount에 따라 가중평균 적용됩니다.</td></tr><tr><td>Heatup 활성화</td><td>Heatup 활성화</td><td>Heatup Period가 Amount에 따라 가중평균 적용됩니다.</td></tr></tbody></table>

## Migration을 통해 얻을 수 있는 것은 무엇인가요?

3, 6, 9 months sKBT로 Migration시 3, 6, 9 Guardian Vault에 해당하는 대가를 보상받을 수 있습니다. 3, 6, 9 months Guardian Vault에서 제공하는 emission rate가 10 days Guardian Vault 보다 더 높으므로, 일반적으로 더 많은 대가를 보상받을 수 있습니다. 기존의 경우에는 10 days sKBT로 3, 6, 9 months sKBT를 얻기 위해서 heatup을 활성화 시키고 10일이 지나 unstake후 3,6,9 month Vault로 새롭게 Staking 해야 하지만, migration을 통해 별도의 기다림 없이 바로 구매(전환) 할 수 있습니다.

## Migration시 주의 사항은 무엇인가요?

Migration되는 sKBT의 양 만큼 가중평균 되어 3, 6, 9 months sKBT의 Heatup Period 또한 늘어나게 됩니다. 단 가중평균된 Heatup Period는 전환하는 시점을 넘어서지 않습니다.


# 6. Liquidation

**대출자(Borrower)가 대출하기 위해 담보로 잡아놓은 자산의 평가액이 담보 대비 대출 가능액(LTV)를 초과한다면 청산이 일어날 수 있습니다.** 청산자가 대출자 대신 대출 자산을 상환하고 대출자의 담보물을 가져가게 됩니다.

예를 들어 BTC의 담보 대비 대출 가능액이 60%라고 하였을 때, 대출자가 10 BTC를 담보로 잡으면 6 BTC 만큼의 다른 자산을 대출 받을 수 있습니다. 이때, 1 BTC가 1000 Klay의 가치를 가진다고 하였을 때, 대출자는 6000 Klay까지 대출을 받을 수 있습니다. 대출자가 5000 Klay를 빌려 갔다고 가정했을 때, 1 BTC가 500 Klay로 가격이 하락한다면, 이 대출자의 담보 대비 대출 가능액은 3000 Klay가 되게 됩니다.&#x20;

이때, 대출한 5000 Klay 대비 대출가능액이 줄어들게 되고 청산 가능상태가 됩니다. 이에 대한 상세수치는 Health factor로 표기되며 Health Factor 값이 1보다 작아질 경우 청산 가능 상태가 되어 대출 자산의 50%까지 청산 가능해집니다. 이 경우, 청산자는 2500 Klay를 대신 상환 후 담보물을 가져갈 수 있습니다.

청산자는 Klaybank에 2500Klay를 상환한 다음 2500 Klay에 해당하는 담보물인 5BTC를 가져갈 수 있습니다. 이때, 청산자는 청산 인센티브로 일정 비율의 담보물을 추가로 가져가게 됩니다. 예를 들어 청산 인센티브가 10%라면, 2500 Klay를 상환하고 5.5 BTC를 받아갈 수 있습니다. 각 자산에 대한 청산 인센티브 비율은 런칭과 동시에 공개됩니다.&#x20;

이러한 청산 과정을 통해 대여자의 자산은 프로토콜 내에서 안전한 비율로 관리되게 됩니다. 청산은 지속적으로 Klaybank가 자동적으로 이루어질 수 있게 프로그램이 상시 감시 중입니다. Klaybank가 청산하여 획득한 인센티브는 모두 Klaybank 생태계를 위해 사용됩니다. 또한 누구든 청산을 할 수 있으며 이에 대한 개발 인터페이스는 Klaybank github에 런칭과 함께 공개됩니다. 웹 페이지를 통해 누구든 편하게 청산 할 수 있는 인터페이스를 오픈 예정므로 추후 개발자가 아닌 일반 사용자들도 청산에 참여 가능합니다.&#x20;


# 7. Governance

**클레이뱅크 제네시스 거버넌스란?**\
클레이뱅크 프로토콜에서 최초로 런칭하는 거버넌스로, 초기 개발진이 투표 안건을 검토 및 제안하는 구조입니다. 점진적으로 탈중앙화된 거버넌스 도입을 위한 첫 도약인 만큼 제네시스 거버넌스를 통해 커뮤니티 구성원들에게 (1) 특정 안건에 대한 논의에 참여, (2) 특정 안건의 투표에 참여할 기회를 제공합니다. 제네시스 거버넌스 이후에는 커뮤니티에서 직접 안건을 제안할 수 있는 거버넌스로 향해 갈 것입니다.

**제네시스 거버넌스 런칭 일정**

* Forum 오픈 : 2022년 05월 13일 금요일 오후 5시 (KST)
* Proposal 게시 : 2022년 05월 14일 토요일 오후 5시 (KST)
* 투표 시작 : 2022년 05월 16일 월요일 오후 5시 (KST)

**참여 대상**\
**sKBT** 홀더 (Klaybank에서 KBT를 Staking하고 있는 사용자)

*\*각 KBT마다 voting power를 부여받게 됩니다.*

* 10 day sKBT = 1
* 3 month sKBT = 9
* 6 month sKBT = 18
* 9 month sKBT = 27

*`*각 proposal 시작 시점에 snapshot으로 voting power를 부여하는 구조입니다. 투표 도중에는 staking에 참여하더라도 해당 proposal에 한해서는 voting power를 인정받지 못합니다.`*

**첫번째 의제**\
Kokoa Finance(코코아 파이낸스)의 스테이블코인 KSD를 담보물로 허용할 것인가?

{% embed url="<https://forum.klaybank.org>" %}

앞서 클레이뱅크 팀은 로드맵([참고](https://medium.com/klaybank/%ED%81%B4%EB%A0%88%EC%9D%B4%EB%B1%85%ED%81%AC-2022-%EB%A1%9C%EB%93%9C%EB%A7%B5-%EA%B3%B5%EC%A7%80-f97a9c5082bb))을 밝히면서 거버넌스 런칭을 예고하였습니다. 지난 3월, 예금/대출, 스테이킹, 플래시론의 큰 세가지 종류의 서비스를 오픈하고 개선을 완료한 뒤 앞으로 나아갈 방향에 대해서 서술하였습니다.

금번 제네시스 거버넌스 런칭을 통해 더욱 다양한 자산을 커뮤니티와 함께 리스팅하고, 담보물로 설정하며, 클레이뱅크의 TVL 상승에 기여할 예정입니다. 더욱 많은 자산들이 거래됨에 따라 KBT buyback 재원도 성장할 것으로 판단됩니다.

클레이뱅크 제네시스 거버넌스의 첫 프로포절인 KSD 담보 가능 여부에 대해서 많은 참여 부탁드립니다.


# Klaybank 투자 전략

## 1. **기본 전략 - 거래소에 있는 암호화폐 예치하고, 이자 얻기**

가장 기본적인 전략으로는 거래소에 있는 암호화폐를 Klaybank에 예치(Deposit)하고 이자를 얻는 것이 있습니다. 이 경우 예치자(depositor)는 예치한 암호화폐의 가격이 상승하는 경우 총 3가지 방법으로 이득을 취할 수 있습니다.<br>

1. 예치한 암호화폐의 가격 상승에 대한 이익
2. 암호화폐 예치에 대한 이자 (Klaybank 내 대출자인 borrower가 지불하는 대출이자)
3. Klaybank에서 제공하는 추가 행동 보상 (sKBT)<br>

예치한 자산은 언제든지 회수할 수 있으며, 자산별로 분배되는 Klaybank의 거버넌스 토큰과 대출 이자가 상이하므로 각 자산별로 전략을 다르게 가져갈 수 있습니다.

기본 전략에서는 예치에서 더 나아가 대출을 통해 자산을 융통하는 것이 있습니다. 급하게 자금이 필요하지만, 보유하고 있는 암호화폐를 팔고 싶지 않을 때 클레이뱅크를 이용하여 필요한 금액을 대여한 후 자금 사정이 다시 괜찮아지면 이를 회수하는 방법이 있습니다.

## **2. 예치 대출 반복하고, 예치이자와 행동보상 극대화하기**

행동보상을 최대한 획득하기위한 전략으로, 예치 대출을 반복하여 수행할 수 있습니다. 이 방법에서 유의할 점은 대출이자를 지불하면서 예치이자, 행동보상을 최대한으로 받는 방법이라는 것입니다.<br>

예를들어 USDT를 1000개 가지고 있고 LTV가 80%라고 가정할때,

1. 1000 USDT를 예치하고 LTV의 약 75%인 750 USDT 를 대출합니다. 예치 : 1000 USDT, 대출 : 750 USDT, 대출율 75% 입니다.
2. 750 USDT가 추가로 생겼으므로 빌린 750 USDT를 다시 예치합니다. 이때 예치 : 1750 USDT, 대출 : 750 USDT, 대출율 42.8% 입니다.
3. LTV까지 다시 여유가 생겼으므로 다시 75%까지인 1312 USDT - 750 USDT = 562 USDT를 빌립니다. 이때 예치 : 1750 USDT, 대출 : 1312 USDT, 대출율 74.9% 입니다.
4. 562 USDT가 추가로 생겼으므로 빌린 562 USDT를 다시 예치합니다. 이때 예치 : 2312 USDT, 대출 : 1312 USDT, 대출율 56.7% 입니다.
5. LTV까지 다시 여유가 생겼으므로 다시 75%까지인 ...

와 같은 방법으로 반복하는 방법을 말합니다.<br>

이 방법을 이용하면 예치 행동보상이 10%, 대출 행동보상이 5%, 예치 이율이 3%, 대출 이자가 4% 라고 가정하였을때 단순 1000 USDT예치의 경우 1000 USDT에 대하여 10%(APR)+3%(APY) = 약 13% APR = 연 130 USDT 이지만. 위의 4번까지만 진행하더라도

* 2312 USDT 예치 행동보상 10% = 231.2 USDT
* 2312 USDT 예치 이율 3% = 69.36 USDT
* 1312 USDT 대출 행동보상 5% = 65.6 USDT
* 1312 USDT 대출 이자 4% = -52.48 USDT

로 총 231.2 + 69.36 +65.6 - 52.48 = 313.68 USDT가 되게됩니다. 이는 약 원금 1000 USDT에 대해 d약 31.36% APR을 의미합니다.<br>

* 각 예치 및 대출에 대해 이자, 행동보상는 예시이며, 정확한 비율은 Klaybank 홈페이지의 이율을 통해 계산하여 정확한 수치를 확인하시길 바랍니다.
* 또한 USDT를 대출하여 USDT를 빌려서(또는 Klay 대출 Klay 예치와 같이 같은 자산을 담보로 같은 자산을 빌리는 행위) 위와같은 방법을 진행하였을때 완전 무위험은 아닙니다.&#x20;
* 행동보상은 sKBT로 받으나 대출 이자는 원 자산 (위의 예시의 경우 USDT)를 내야하므로 부채비율이 점점 증가하게되고 LTV가 증가하게됩니다. 따라서 청산 담보비율에 도달하게되면 청산이 진행되므로 주의바랍니다. 주기적으로 예치에 담보물을 추가하는 등 적절한 LTV를 유지하도록 신경써주어야 합니다.
* 또한 USDT, DAI, USDC 오라클 가격은 1$ 고정이 아닌 여러 거래소의 데이터를 취합하여 적용되게 됩니다. 따라서 약간의 변동은 있을 수 있고 이에따른 담보의 비율이 약간씩 발생할 수 있습니다. 따라서 적절한 대출비율을 유지할 수 있는 예치 / 대출 비율을 맞추기를 권장합니다.

## **3. 롱 포지션, 숏 포지션 그리고 헷징**

랜딩 프로토콜을 사용하는 또다른 전략으로는 자산의 상승에 레버리지를 거는 롱과, 자산의 하락에 레버리지를 거는 숏 전략이 있습니다. 이러한 롱과 숏은 다른 자산의 포지션과 더불어 헷징을 하는 방법으로도 이용이 가능합니다.

**숏 전략**은 상기에서 언급한대로 자산의 하락에 배팅하는 전략입니다. 이 경우, 만약 A 자산과 B 자산이 있고, B 자산의 하락이 명백하다고 보일 시, 이용자는 A자산을 클레이뱅크에 예치해서 담보로서 프로토콜에 묶어두고, B 자산을 LTV를 고려하며 클레이뱅크로부터 빌립니다. 예컨데 100만큼의 A 자산을 예치해서 담보로서 삼고, 60%만큼의 가치에 해당하는 60 만큼의 B 자산을 빌립니다. 이용자는 B 자산의 가격이 하락할 것으로 예상하기 때문에 60만큼의 B 자산을 곧바로 CEX 혹은 DEX 에 가서 다른 자산과 교환합니다(판매합니다). B 자산이 예상대로 40 정도로 하락한다면, 이용자는 다시 40만큼의 B 자산을 사서 약간의 이자와 함께 클레이뱅크로 돌아와서 상환하게 됩니다. 이 때 이용자의 현금흐름을 살펴보면 다음과 같습니다.<br>

* 현금흐름 + : A 자산 100 예치에 따른 예금 이자 + A 자산 100 예치에 따른 sKBT 보상 이자 + B 자산 60 대출에 따른 sKBT 보상 이자 + 20만큼의 B 자산 숏 전략으로 인한 차익
* 현금흐름 - : B 자산 60 대출에 따른 대출 이자<br>

**롱 전략**은 자산의 상승에 배팅하는 전략입니다. 이 경우, 만약 A 자산과 B 자산이 있고, B 자산의 상승이 명백하다고 보일 시, 이용자는 A 자산을 클레이뱅크에 예치해서 담보로서 프로토콜에 묶어두고, B 자산을 LTV를 고려하며 클레이뱅크로부터 빌립니다. 예컨데 100만큼의 A 자산을 예치해서 담보로서 삼고, 60%만큼의 가치에 해당하는 60만큼의 B 자산(주로 스테이클 코인)을 빌립니다. 이용자는 A 자산의 상승을 예상하므로 더 많은 A 자산이 필요합니다. 이 경우 빌린 60만큼의 B 자산을 CEX 혹은 DEX에 가서 A 자산과 교환합니다. A 자산이 예상대로 상승해서 60만큼의 A 자산 수량이 80만큼의 가치를 가지게 되면, 이용자는 80만큼의 A 자산을 판매하고, 60만큼의 B 자산과 추가적인 약간의 이자만큼의 B 자산을 구매하여 클레이뱅크에서 상환(repay)합니다. 이 때 이용자의 현금흐름을 살펴보면 다음과 같습니다.<br>

* 현금흐름 + : A 자산 100 예치에 따른 예금 이자 + A 자산 100 예치에 따른 sKBT 보상 이자 + B 자산 60 대출에 따른 sKBT 보상 이자 + 20만큼의 A 자산 롱 전략으로 인한 차익
* 현금흐름 - : B 자산 60 대출에 따른 대출 이자<br>

**헷징 전략**은 자신이 가진 자산의 포지션의 가격변동(주로)과 무관하게 일정한 자산의 가치를 유지하게 하는 전략입니다. 이를 원하는 목적은 다양하지만, 특히나 크립토에서 볼 수 있는 독특한 쓰임새는 에어드랍이 있을 수 있습니다. 특정 시점에 스냅샷을 찍고 보유자에게 새로운 자산을 에어드랍하는 경우 이용자는 해당 자산을 보유(롱)하고 있는 상황입니다. 이에 대한 리스크를 회피하고 싶을 때 클레이뱅크를 이용하여 해당 자산을 빌리고 곧바로 팔아서 스테이블로 보유하면 추후에 가격이 떨어지든, 오르든 이용자의 해당 자산에 대한 포지션은 중립이 됩니다. 현재 클레이뱅크는 6종의 자산만을 지원하기 때문에 해당 사례를 직접적으로 이용할 수 없으나, 특정 자산의 롱 포지션에 너무 큰 노출이 있어 이에 대한 헷징을 원하는 경우 유사한 전략을 사용할 수 있음을 염두해두시면 됩니다.

## 4. 기타 전략&#x20;

기본적으로 대출을 이용한 전략은 롱/숏에서부터 시작됩니다. 자금을 예치한 후 대출한다는 것은 대출한 암호화폐로 구매하려고 하는 자산에 대한 롱/숏의 의미도 내포합니다. 예컨데 KLAY를 대출한다고 하였을 때 상기 서술한 롱/숏의 관점에서 KLAY에 대한 벨류에이션이 들어갈 수도 있지만, KLAY로 구매할 수 있는 자산 — 예컨데 특정 NFT —에 대한 벨류에이션의 관점으로 접근할 수 있습니다. 대출을 통해 구매한 자산이 크게 오를 것이 자명한 경우 이는 ‘KLAY에 대한 숏’ 전략과 동일합니다. 즉 다음과 같은 현금흐름을 지닙니다.

* 현금흐름 + : A 자산 100 예치에 따른 예금 이자 + A 자산 100 예치에 따른 sKBT 보상 이자 + B 자산 60 대출에 따른 sKBT 보상 이자 + 20만큼의 B 자산 숏 전략으로 인한 차익(NFT 판매로 인한 차익)
* 현금흐름 - : B 자산 60 대출에 따른 대출 이자


# Klaybank 이용 방법

각 기능별 상세 이용 가이드를 보실 수 있습니다.


# Bond

Bond 기능은 [Klaybank App의 Bond 탭](https://app.klaybank.org/bond)에서 진행할 수 있습니다.

## Bonding 메인 페이지

### 1. Bond 탭으로 이동하기

Klaybank App > BOND 탭으로 이동하세요.

![](/files/YlVFUWSzUb7XT18ibvCJ)

### 2. 지갑 연결하기

우측 상단의 “CONNECT WALLET” 버튼을 클릭하여 지갑을 연결하세요.

![](/files/ZK20XFl7fVHJLZzODES8)

### 3. Bond 선택하기

참여하려는 유동성 풀에 해당하는 “Bond” 버튼을 클릭하여 Bonding에 참여할 수 있습니다.

![](/files/1qSnYzRM1nbUU80bnIMK)

* Treasury Balance: Bond Sale을 통해 Klaybank 프로토콜의 Treasury가 현재 보유한 자산의 가치입니다.
* KBT Price: 현재 KBT의 시장 가격(오라클 가격)입니다.
* Visit Liquidity Pool: 클릭하면 Klyabank가 지원하는 DEX의 유동성 풀로 이동합니다.
* Price: Bond Sale을 통해 판매되는 KBT의 할인된 가격입니다.
* ROI: KBT의 시장 가격 대비 Bonding을 통해 할인된 가격으로 구매했을 때의 수익률입니다.
* Purchased: Bond Sale을 통해 Klaybank 프로토콜이 채권을 판매한 자산의 가치입니다.

## Bond

### 1. 유동성 공급하기

Bond를 통해 KBT을 구매하려면 LP 토큰이 필요합니다. 원하는 Bond의 “Visit Liquidity Pool” 버튼을 클릭하여 Klaybank가 지원하는 DEX로 이동한 후, 해당 유동성 풀에 유동성을 공급하세요.

![](/files/aAtLZihropxuo9zY98NC)

### 2. Bond 선택하기

DEX에서 유동성을 공급하여 얻은 LP 토큰을 통해 Bond 할 수 있게 되었습니다. 원하는 Bond를 선택하고 “Bond” 버튼을 클릭합니다.

![](/files/emEPNvuv9xKmIeer9aU7)

### 3. Bond 탭

“Bond” 탭에서 Bond 할 수 있습니다.

![](/files/yrZ4140zd99VyKvoDZnA)

* Bond Price: 현재 Bond Sale을 통해 구매할 수 있는 KBT의 할인 가격입니다.
* KBT Price: 현재 KBT의 시장 가격(오라클 가격)입니다.
* Your Balance: 현재 사용자가 소유한 LP 토큰의 수량입니다.
* You Will Get: 입력한 amount의 LP 토큰으로 구매하게 되는 KBT의 수량입니다.
* Max You Can Buy: 한 트랜잭션으로 구매할 수 있는 KBT의 최대 수량입니다.
* ROI: KBT의 시장 가격 대비 Bonding을 통해 할인된 가격으로 구매했을 때의 수익률입니다.
* Vesting Term: 구매한 KBT가 배분되는 총 기간입니다.
* Minimum Purchase: KBT의 최소 구매 수량입니다.

### 4. Approve 트랜잭션 전송하기

만약, 해당 Bond에 대해 처음으로 Bond를 진행하는 것이라면 Approve를 먼저 수행해야 합니다. “Approve” 버튼을 눌러 지불할 LP 토큰을 Bonding 컨트랙트로 안전하게 이동시킬 수 있도록 하는 트랜잭션을 전송합니다.

![](/files/8NGcCZ1HjgqhzkvWdi5w)

### 5. Bond 수량 입력하기

Approve가 완료되면 “Approve” 버튼이 “Bond” 버튼으로 변경됩니다. Bond로 지불하려는 LP 토큰의 수량을 입력합니다.

![](/files/2DTFRa9P49ouPhOaL6Aq)

### 6. 최대 체결 가격 오차(Slippage) 설정하기

Approve가 완료되면 “Approve” 버튼이 “Bond” 버튼으로 변경됩니다. Bond로 지불하려는 LP 토큰의 수량을 입력합니다.

![](/files/OI1FAIvh2bUd5W0FAiBh)

### 7. 최대 체결 가격 오차(Slippage) 입력하기

입력한 값 내의 체결 가격 오차를 허용합니다. 이는 Bond를 통해 구매할 KBT 수량과 실제 체결되는 KBT 수량의 차이가 설정값보다 클 경우 거래가 체결되지 않음을 의미합니다.

![](/files/VQHnRDv8P05bMJJ28pBi)

### 8. Bond 트랜잭션 전송하기

“Bond” 버튼을 눌러 Bond 트랜잭션을 전송합니다. Bond를 통해 구매한 KBT 수량은 redeem 탭에서 확인 가능합니다.

![](/files/rLWmdvaVAVje2NDsbF8I)

### 9. Zap을 이용하는 Bond하기

만약, LP 토큰이 준비되지 않았다면, Zap을 이용해 사용자가 지갑에 갖고 있는 토큰으로 바로 Bond에 참여할 수 있습니다. “Bond with Zap” 버튼을 눌러 Zap으로 이동합니다.

![](/files/TjTpxSYkpPTqTGvfgNDy)

### 10. Zap으로 Bond 할 수량 입력하기

Bond에 지불할 토큰을 선택하고 수량을 입력합니다. Zap은 현재 풍부한 유동성이 확보된 KLAY, KBT, KUSDT를 지원합니다.

![](/files/ue5YW1vPt8iiEI3FzMbj)

* Destination token: KBT를 구매하기 위해 지불할 LP 토큰을 의미합니다.
* Slippage Tolerance: 현재 설정된 최대 체결 가격 오차입니다. 현재 예상되는 교환 비율과 실제 체결되는 교환 비율의 차이가 설정값보다 클 경우 거래가 체결되지 않습니다.
* Your Balance: 선택한 토큰에 대한 사용자의 현재 보유량입니다.
* Minimum Received Amount: 사용자가 입력한 토큰 수량으로 지불하는 LP 토큰의 최소 수량입니다. 유동성 풀의 교환비로 예측되는 LP 토큰의 수량에 최대 체결 가격 오차가 적용된 값입니다.
* Approximately you will get: 입력한 amount의 토큰으로 구매하게 되는 KBT의 수량입니다.
* Max You Can Buy: 한 트랜잭션으로 구매할 수 있는 KBT의 최대 수량입니다.
* ROI: KBT의 시장 가격 대비 Bonding을 통해 할인된 가격으로 구매했을 때의 수익률입니다.
* Minimum purchase: KBT의 최소 구매 수량입니다.

### 11. Zap의 최대 체결 가격 오차(Slippage) 설정하기

우측 상단의 “Slippage 설정” 버튼을 클릭하여 최대 체결 가격 오차(Slippage)를 설정합니다.

![](/files/N8fOzvtzMwvVdwqn9kVH)

### 12. Zap의 최대 체결 가격 오차(Slippage) 입력하기

입력한 값 내의 체결 가격 오차를 허용합니다. 이는 Zap을 통해 유동성 공급을 위해 교환할 때 원하는 교환 비율과 실제 체결되는 교환 비율의 차이가 설정값보다 클 경우 거래가 체결되지 않음을 의미합니다.

![](/files/mpGVxNYaocK3Wpp3TQsY)

### 13. Zap으로 Bond 트랜잭션 전송하기

“Bond” 버튼을 눌러 Bond 트랜잭션을 전송합니다. Bond를 통해 구매한 KBT 수량은 redeem 탭에서 확인 가능합니다.

![](/files/uAUJwO1rWIxVa42RqD7x)

## Redeem

### 1. Redeem 탭

KBT를 수령할 Bond를 클릭하고 “Redeem” 탭을 클릭합니다.

![](/files/nMzSsYIrOhYV7IkTOCQt)

* Bond Price: 현재 Bond Sale을 통해 구매할 수 있는 KBT의 할인 가격입니다.
* KBT Price: 현재 KBT의 시장 가격(오라클 가격)입니다.
* Pending Rewards: 앞으로 배분될 KBT의 수량입니다.
* Claimable Rewards: 현재 배분되어 수령 가능한 KBT의 수량입니다.
* Time until fully vested: Bond Sale을 통해 구매한 KBT가 모두 배분될 때까지 남은 시간입니다.
* ROI: KBT의 시장 가격 대비 Bonding을 통해 할인된 가격으로 구매했을 때의 수익률입니다.
* Vesting Term: Bond Sale을 통해 구매한 KBT가 모두 배분되기까지 걸리는 시간입니다.

### 2. 배분된 KBT Claim하기

“Claim” 버튼을 클릭하여 수령 가능한 KBT를 지갑으로 즉시 수령하거나, “Claim and Autostake” 버튼을 클릭하여 10 Days Guarding Vault로 바로 Staking 할 수 있습니다. 둘 중 원하는 방식을 클릭하여 트랜잭션을 전송합니다.

![](/files/vcKuJS8ahXWr80V3KnGD)


# Deposit

(TBD)


# Borrow

(TBD)


# Stake

Staking을 하기 위해서는 [Klaybank App](https://app.klaybank.org/stake)의 Stake 탭으로 이동합니다.

![](/files/ofsIu6FDTyZscWsC2S5d)

## Staking

### 1. Gurdian Vault 선택

Staking 하고자 하는 Gurdian Vault를 클릭합니다.

![](/files/8T4Jsd9rCffIjwZDyk2j)

### 2. 수량 입력

Staking하고자 하는 KBT 수량을 입력하고 `STAKE` 버튼을 클릭합니다.

![](/files/lGNDGaLD9pYmOteneVGQ)

### 3. Approve하기

각 Guardian Vault마다 최초 1번의 Approve가 필요합니다. `APPROVE` 버튼을 통해 Guardian Vault에 Approve합니다.&#x20;

![](/files/8l45EfnrItOX6rTgDEj4)

{% hint style="info" %}
Guardian Vault에 Approve를 한다는 것은 Guardian Vault가 KBT를 Staking하기 위한 절차일 뿐이지 Klaybank 팀이 Guardian Vault에 접근해 유저의 자금을 탈취할 수 있다는 의미는 아닙니다. 스테이킹 컨트랙트 보안감사를 진행중에 있으며 완료되는대로 보고서와 함께 코드를 공개할 예정입니다.
{% endhint %}

### 4. Approve 확인 및 Staking 

4-1. Approve 이후 버튼 하단에 Approve 트랜잭션의 상태와 Explorer를 통해 실 트랜잭션을 확인할 수 있습니다.

4-2. Approve가 완료(Confirm)된 후 `STAKE` 버튼을 통해 Staking을 진행합니다.

![](/files/oLqPAtPj1dwAdlGD1BpX)

### 5. Staking 완료

5-1. Approve와 마찬가지로 버튼 하단에서 Stake 트랜잭션의 상태를 확인합니다.

5-2. 트랜잭션이 완료(Confirm)되면 우측 `KBT Staked`에 성공적으로 Staking된 걸 확인합니다.

![](/files/5XoNt5m0VwgYgjMLaqFl)

## Activate Heatup

Staking된 자산을 Unstaking 하기 위해서는 Heatup을 활성화(Activate) 시켜서 Heatup Period라는 시간을 거쳐야합니다. 자세한 개념은 [핵심 기능의 Staking란](https://docs.klaybank.org/protocol/functions/stake)에서 확인하실 수 있습니다.

### 1.  Activate Heatup 페이지 이동

![](/files/OOMegwpvl1B97SGHtwLq)

### 2. Heatup 활성화 시키기&#x20;

`ACTIVATE`를 눌러서 Heatup을 활성화 시킵니다.

![
](/files/Rwx9W64GBCzyVbM924w6)

### 3. Heatup 활성화 완료&#x20;

Activate 트랜잭션이 완료(Confirm)되면 우측의 `ACTIVATE HEATUP` 버튼이 사라지고 남은 Heatup Period가 표시됩니다.

![](/files/4qB4EqrZmvM0ynkeAxJf)

## Unstaking

Heatup Period가 지나면 Unstake Window 동안 Staking한 KBT를 Unstake할 수 있습니다.

### 1. Heatup이 끝난 후 Unstaking 페이지 이동

우측의 `UNSTAKE NOW` 탭을 클릭 합니다.

![](/files/LdH66M3viIJnJuo1kH3c)

### 2. Unstaking

`UNSTAKE` 버튼을 눌러서 Staking된 KBT를 Unstake합니다.

![](/files/TewEhOFlJes7mMOfk7I7)

### 3. Unstaking 완료

트랜잭션이 완료(Confirm)되면 우측 `KBT Staked`가 줄어든걸 확인하고 지갑에 KBT가 정상적으로 수령되었는지 확인합니다.

![](/files/eodrhamMItBpVtgZUAxw)

## Claim (보상 수령)

Claim(보상 수령)은 heatup period, unstake window와 상관없이 언제든 가능합니다. 자세한 내용은 [이곳](/protocol/functions/stake#claim)을 참고해주세요.

### 1. Claim 페이지 이동

우측의 `CLAIM`탭을 클릭 합니다.

![](/files/4SqQjiwQTDb8rK24QsbZ)

### 2. Claim

`CLAIM`버튼을 눌러서 보상을 수령합니다.

![](/files/bkyoQmKiNvxCneRf6W6u)

### 3. Claim 완료

트랜잭션이 완료(Confirm)되면 우측 `Claimable sKBT`가 줄어들고 보상인 sKBT(10 days)가 수령되어 `KBT Staked`가 늘어난 걸 확인합니다.

![](/files/O1I1xJyQLQa9F1cQwa8k)


# Migration

## 1. 10 days Stake 화면으로 이동하기

Klaybank App > Stake > 10 days 탭으로 이동하세요. 오른쪽 상단의 “MIGRATE TO 3, 6, 9 VAULTS” 버튼을 클릭합니다.

![](/files/IdyEjGLos4mfWtVsj9mt)

## 2. Migration할 Guardian Vault 선택하기

Migration할 3, 6, 9 month Guardian Vault에 “MIGRATE” 버튼을 클릭합니다.

![](/files/pXqW7aeenrSEoJskeizu)

## 3. Migration 할 금액 입력하기 &#x20;

Migration할 금액을 입력한 다음 “MIGRATE” 버튼을 클릭합니다.

![](/files/t9jlmopvVKSuIFQ1O7d7)

## 4. Migration 트랜잭션 전송하기    &#x20;

&#x20;“MIGRATE” 버튼을 눌러 트랜잭션을 전송합니다.&#x20;

![](/files/GH4Z80um3Xigkxk0Qu9c)


# 보안감사 (Audit)

<table><thead><tr><th width="150">Contracts</th><th>Auditor</th><th>Date</th></tr></thead><tbody><tr><td>Bondsale</td><td><a href="https://github.com/klaybank/klaybank-bondsale/blob/main/audits/%20Hexlant-Bondsale-2022-01-13.pdf.pdf">Hexlant</a></td><td>2022.01.13</td></tr><tr><td>Bondsale &#x26; Zap</td><td><a href="https://github.com/klaybank/klaybank-bondsale/blob/main/audits/Smart_Contract_Audit_Expert-Zap_And_BondSale-2022-02-28.pdf">Creative Carrot (Audit Expert)</a></td><td>2022.03.01</td></tr><tr><td>Stake</td><td><a href="https://github.com/klaybank/klaybank-stake/blob/main/audits/Smart_Contract_Audit_Expert-Stake-2022-01-20.pdf">Creative Carrot (Audit Expert)</a></td><td>2022.01.20</td></tr><tr><td>Stake</td><td><a href="https://github.com/klaybank/klaybank-stake/blob/main/audits/Smart_Contract_Audit_Hexlant-Stake-2022-02-23.pdf">Hexlant</a></td><td>2022.02.23</td></tr><tr><td>Lending &#x26; Borrowing</td><td><a href="https://github.com/klaybank/klaybank-protocol/blob/main/audits/Smart_Contract_Audit_Expert-Lending_And_Borrowing-2022-02-28.pdf">Creative Carrot (Audit Expert)</a></td><td>2022.03.01</td></tr><tr><td>Lending &#x26; Borrowing</td><td><a href="https://github.com/klaybank/klaybank-protocol/blob/main/audits/%5BHEXAudit%5D%20DeFiContractAudit___KLAYBANK-PROTOCOL_v1.0_KR.pdf">Hexlant</a></td><td>2022.03.10</td></tr></tbody></table>


# KBT 토큰

KBT는 Klaybank의 공식 거버넌스 토큰입니다.

Klaybank의 거버넌스 토큰인 KBT는 생태계 내에서 크게 유동성 공급 보상, 생태계 참여 유도, 거버넌스를 통한 의사 결정이라는 세 가지 목적을 지니고 있습니다. 이를 통해 Klaybank 생태계가 진정한 의미의 탈중앙화 자율 조직(Decentralized Autonomous Organization)에 기반한 Lending Protocol이 되는 촉진제가 될 것입니다.

![](/files/aJugoJYWlHPVgsrJKX21)

* Spec: KIP7
* Name: Klaybank Token
* Symbol: KBT
* Decimal: 18
* Total Supply: 1,000,000,000
* Address: 0x946BC715501413B9454BB6A31412A21998763F2D

## Token 분배

KBT 토큰은 아래와 같이 분배됩니다.

* Mining: 250,000,000
* Treasury: 250,000,000
* Ecosystem Fund: 147,500,000
* Investors: 150,000,000
* Team: 150,000,000
* Founder: 50,000,000
* IDO: 2,500,000

![Vesting Schedule](/files/QfhEl766LydoKxT7EcJ9)

![Vesting Rate Schedule](/files/EYjPWTiocFAVVVCSten8)

### IDO

* 총 분배량: 2,500,000개
* 초기 DEX에 공급할 유동성과 생태계 참여자 확보를 위한 물량입니다.
* 참여 방법 및 자세한 일정은 이곳([IDO 참여 파트 링크](/events/ido))에서 확인하시기 바랍니다.

### Mining

* 총 분배량: 250,000,000개
* 생태계 기여에 대한 보상입니다. 유동성 공급 보상, 대출 보상, Guardian Vault 스테이킹 보상으로 구성되어 있으며 초기에는 아래와 같은 목적으로 배분됩니다.
  * 유동성 공급 보상 및 대출 보상: Klaybank Protocol에 등록된 대출 자산에 유동성을 공급하거나 대출시 얻게 되는 보상입니다. 각 Pool 별 초기 보상은 런칭 시점에 공개될 예정이며, Klaybank Governance에 의해 지속적으로 변경됩니다. 각 활동에 대한 상세한 내용은 유동성 공급 페이지와 대출 페이지를 참고바랍니다.
    * 각 Pool 별 초기 분배 비율: (TBU)
  * Guardian Vault: Guardian Vault에 KBT를 Staking하여 잠재적인 ShortFall Event를 대비한 프로토콜의 안정성 기여함으로써 받는 보상입니다. Guardian Vault에 대한 자세한 사항은 [이곳](/protocol/functions/stake)에서 참고 바랍니다.
    * 각 Vault 별 초기 분배 비율: (TBU)

### Treasury

* 총 분배량: 250,000,000개
* POL(Protocol Owned Liquidity) 확보를 위해 판매되는 물량입니다.
* Bond Sale 을 위한 KBT는 추가로 발행되지 않으며 판매를 통한 토큰의 분배 속도는 Mining으로 인해 판매되는 속도와 비슷하게 조절될 것입니다. Klaybank Bond Sale과 관련된 상세한 내용은 [이곳](/protocol/functions/bond)에서 확인해주시기 바랍니다.

### Ecosystem Fund

* 총 분배량: 147,500,000개
* Klaybank Ecosystem 유지, 개선, 확장을 위해 사용되는 자금입니다. Grant, Partnership, Airdrop Event, Bug Bounty등에 이용될 예정이며 Klaybank Governance에 의해 자금 운용 방안이 결정됩니다.

### Investor

* 총 분배량: 150,000,000개
* 3개월 간의 Lock Up이 존재하고 4년에 걸쳐 배분합니다.

### Team

* 총 분배량: 150,000,000개
* 3개월 간의 Lock Up이 존재하고 4년에 걸쳐 배분합니다.

### Founder

* 총 분배량: 50,000,000개
* 1년 간의 Lock Up이 존재하고 4년에 걸쳐 배분합니다.


# Krust Universe

![Krust x Klaybank](/files/ZCRZ9KAHBVP1krOySXHs)

### Klaybank <-> Krust Universe

Klaybank는 Krust(크러스트)로부터 투자를 유치했습니다. \
Krust는 카카오가 글로벌 시장 진출을 위해 설립한 싱가포르 계열사로, 이번 클레이뱅크의 투자라운드를 리드했습니다.

a41 Ventures와의 파트너쉽이 Klaybank에게 프로젝트의 전략적인 실행에 있어서 가장 최적의 파트너를 고른 과정이었다면, 이번 Krust로부터의 투자는 클레이튼 생태계에서 Klaybank가 성장하고 글로벌 시장을 타겟팅하기 위한 고민이라고 할 수 있습니다.

GroundX(그라운드X)로부터 Klaytn의 모든 부분을 이관받은 Krust를 통해 Klaybank는 향후 클레이튼 네트워크에서의 개발 지원 및 핫라인을 통한 빠른 연결은 물론이고, 클레이튼 네트워크의 여러 팀과 소통할 수있는 창구를 열어둠과 동시에, 향후 글로벌 생태계에 진출할 예정입니다.

Krust와 함께 Klaybank가 클레이튼 생태계에서 꾸릴 디파이 생태계를 기대해주세요.

### About Krust Universe

\*Krust Universe: <https://krustuniverse.com/>

Krust는 글로벌로 확장할 수 있는 잠재력을 가진 초기 성장단계의 스타트업을 발굴하여 투자합니다. 또한, 해당기업과 파트너십을 구축하고 성장을 지원함으로써 세계적인 기업으로 발돋움하는 데에 보탬이 되고자 합니다. 또한, Krust는 블록체인, 인공지능과 같은 혁신적인 기술을 바탕으로 카카오의 글로벌 비즈니스를 주도합니다. 블록체인 영역에서는 Klaytn 재단과 긴밀한 협력 관계를 구축하여 체계적으로 Klaytn 생태계를 확장하고자 합니다.

<img src="/files/aT0PU27nZ7tn7vo0OhGO" alt="" data-size="original">


# A41 Ventures

![a41 x Klaybank](/files/oVnp8riuLdyeMnoMKOLc)

### Klaybank <-> a41

Klaybank는 a41 Ventures와 전략적 파트너십을 체결하였습니다.

Klaybank는 런칭 이후 클레이튼 생태계 내에서 단순히 일반적인 Lending & Borrowing 프로토콜로 남는 것이 아니라, 치열한 고민을 통해 서비스를 최적화하고 필요한 기능들을 추가하여 생태계 내의 필수적인 프로토콜로 자리 잡는 것을 목표로 합니다.&#x20;

이러한 목표를 달성하기 위해 시드 라운드 참여자로서 a41 Ventures 모시게 되었습니다.

### About a41

\*a41 Ventures : [https://www.a41ventures.com](https://www.a41ventures.com/)

a41 Ventures는 디지털 혁신을 이끌 파괴적인 기술을 가진 기업의 성장을 돕는 회사입니다. a41 Ventures는 차세대 디지털 혁신을 구축하는 선봉장으로서 투자에 대한 생각, 프로젝트의 기술에 대한 설명 및 미래에 대한 아이디어를 공유하고 있습니다.


# Claimswap

![](/files/J47jgBw6ojwN8Vw1d5so)

### Klaybank <-> Claimswap

Claimswap과 Klaybank가 파트너쉽 협약을 맺었습니다.

Claimswap은 작년 런칭한 클레이튼 기반 AMM DEX로 Krust/a41 Ventures 등으로부터 투자를 받고, 단기간에 높은 TVL을 달성하며 빠르게 성장을 하고 있습니다. 두 프로젝트는 보다 더 탈중앙화되고 발전된 DeFi를 클레이튼 생태계에서 실현하고자 하는 데 뜻이 맞아 이번 파트너쉽을 맺게 되었습니다.

Klaybank는 금번 협약을 통해 Claimswap의 유저들도 KBT를 적극적으로 활용할 수 있도록 적극적으로 협업을 진행할 예정입니다. 두 프로젝트 모두 클레이튼 생태계에 반드시 필요한 근본적인 렌딩 프로토콜과 AMM DEX를 제공하는만큼, 장기적으로도 다양한 협업을 이어가도록 하겠습니다.

앞으로도 Klaybank는 Claimswap을 비롯한 클레이튼 생태계의 근본이 되는 디파이 프로젝트들과의 협업을 통해 클레이튼 디파이 생태계의 발전을 위해 적극 노력하겠습니다. 이러한 노력들이 모여 좋은 선순환으로 이어지기를 희망합니다.

### About Claimswap

\*Claimswap : <https://claimswap.org/>

Claimswap은 작년 런칭한 클레이튼 기반 AMM DEX로 Krust/a41 Ventures 등으로부터 투자를 받고, 단기간에 높은 TVL을 달성하며 빠르게 성장을 하고 있습니다.


# Kokoa Finance

![](/files/sKym4N8bpy7kHgr6U2IC)

안녕하세요, Klaybank 팀입니다.

Kokoa finance와 Klaybank가 파트너쉽 협약을 맺었음을 공지드립니다.

Kokoa finance는 클레이튼 기반 스테이블 코인인 KSD를 운영하는 디파이 프로토콜입니다. 다중담보를 통한 KSD 대출 등 다양한 업데이트를 통해 클레이튼 생태계에서 핵심적인 위치를 차지해가고 있습니다.

Kokoa finance와 Klaybank는 각각 클레이튼의 대표적인 스테이블코인, 랜딩 프로토콜로서 협업을 위해 이번 파트너쉽을 맺게 되었습니다.

Klaybank는 우선적으로 스테이블 코인인 KSD를 Klaybank의 예치자산 풀로 등록하는 것에서 협업을 시작하고자 합니다. 두 프로젝트 모두 디파이 생태계에서 반드시 필요한 스테이블 코인과 랜딩 프로토콜인만큼 장기적으로 다양한 협업을 이어가도록 하겠습니다.

앞으로도 Klaybank는 Kokoa finance와 같은 생태계의 근본이 되는 디파이 프로젝트들과의 협업을 통해 클레이튼 디파이 생태계의 발전을 위해 적극 노력하겠습니다. 이러한 노력들이 모여 좋은 디파이 생태계가 만들어지길 희망합니다.

<br>


# Coming Soon

다가오는 파트너십 발표도 많은 기대 부탁드립니다.

![](/files/nLluHgazmjgE2WCD1nqU)


# IDO (12/29\~1/5, 종료됨)

Klaybank의 공식 첫 IDO를 소개합니다.

안녕하세요. 커뮤니티 여러분, Klaybank 최초 유동성 공급과 커뮤니티 참여 초기 인원 확보를 위해 IDO를 진행하게 되었습니다. 상세한 일정 및 참여 방법은 본문을 참고해주시기를 바랍니다.

![](/files/uJu1FmeWeKRJfJiiTnZr)

**일정** : 2021년 12월 29일(수) 10PM(KST) — 2022년 1월 5일(수) 10PM(KST)&#x20;

**경로** : Klaybank 웹사이트 내([링크](https://app.klaybank.org/ido))

**총 판매 KBT 물량** : 2,500,000개 (KBT 총 발행량의 0.25%)&#x20;

**Softcap** : 375,000 KLAY (1KBT = 0.15 KLAY)&#x20;

**Hardcap** : 1,000,000 KLAY (1KBT = 0.4 KLAY)&#x20;

분배 일시 : Main App 출시 시점(2022년 1월 19(수) 예정)부터 40일간 선형 분배

상세한 참여 방법은 다음 페이지를 참고해주시기 바랍니다.


# 참여방법

### **1.IDO 사이트 접속**

IDO 참여를 위해 [app.klaybank.org](https://app.klaybank.org/ido)에 접속합니다. IDO는 별도 런치패드 플랫폼이 아닌 Klaybank 웹에서 이루어집니다. <br>

![](/files/hyI6JQVHDgoI7IykXk3u)

1-1. IDO 탭 : IDO 탭을 클릭하여 최초 화면에서 페이지 이동을 합니다.&#x20;

1-2. Connect Wallet : Kaikas 혹은 Klip 지갑을 Klaybank와 연동합니다. 이는 통신을 위한 필수적인 절차입니다. 최초 연동 시 연결 허용을 해주세요.&#x20;

1-3. Join IDO : 해당 버튼을 누를 시, IDO 진행 화면으로 스크롤이 이동합니다.

### 2. IDO 참여

IDO에 직접적으로 참여할 수 있는 화면입니다.

![](/files/NvsogVnsAGQKW7s1k13q)

2-1. 남은 시간 : IDO 종료까지의 남은 시간을 의미합니다. IDO는 2021년 12월 29일(수) 10 PM \~ 2022년 1월 5일(수) 10 PM 동안 진행되지만, Hardcap에 도달할 시 ‘남은 시간’에 표시된 시간보다 조기에 마감될 수 있습니다.

2-2. Total Raise Amount : 접속 시점까지 모집된 금액을 의미합니다. Softcap인 375,000 KLAY에 도달할 시 IDO는 진행되며, ‘남은 시간’까지 이에 도달하지 못하면 컨트랙트로 전송된 금액은 전액 환급됩니다. 만약 해당 바(bar)의 끝인 Hardcap에 도달할 시 조기에 마감됩니다. 이 경우, 1 KBT는 0.4 KLAY의 가격을 갖게 됩니다.

2-3. Total Sale Amount : IDO를 통해 판매할 총 KBT 수량입니다. 이 수량은 총발행량의 0.25%이며, IDO 기간 내 고정된 값을 가집니다.

2-4. Status : IDO 시작 시 ‘Open’으로 표기되며, 그전에는 ‘Closed’로 표기됩니다. Hardcap에 도달하여 조기 종료되는 경우, 남은 기간이 임박하여 마감될 때에도 역시 ‘Closed’로 표기됩니다.

2-5. You sent : 유저가 전송한 KLAY 개수를 보여주는 공간입니다. 지갑에 연동하지 않았을 시 해당 경우와 같이 ‘-’로 표기되며, 연동 후 전송한 금액이 없는 경우 ‘0’, 전송하였다면 전송한 금액이 표시됩니다.

2-6. Connect Wallet : ‘1-2.’와 같은 기능입니다. 유저의 지갑과 Klaybank를 연동하는 역할을 합니다. 클릭하여 권한을 부여하면 IDO에 참여하실 수 있습니다.

2-7. KBT Information : KBT에 대한 각종 정보를 확인하실 수 있습니다. 특히, ‘Address’를 통해서 KBT 토큰에 대한 정보를 Klaytnscope에서 확인하실 수 있습니다.

2-8. Disclaimer : 해당 항목은 투자 전에 유의해야 할 항목을 다시 정리해놓은 것입니다.

* 이 웹사이트를 통해 전달된 정보는 투자에 대한 권유가 아닙니다.&#x20;
* 해당 정보에 대해서 스스로의 책임하에 투자하세요.
* IDO는 Hardcap인 1,000,000 KLAY에 도달하면 끝납니다. IDO에 참여한 이상, 이미 전송된 KLAY는 취소할 수 없습니다. 최소 모집 금액인 375,000 KLAY에 도달하면 프로젝트는 시작됩니다. 만약 그 미만으로 모일 시, 전송된 모든 KLAY는 환급됩니다.&#x20;
* KBT의 가격은 IDO에 전송된 KLAY 개수에 비례합니다. 1 KBT는 최소 0.15 KLAY 부터 0.4 KLAY의 가격을 지닙니다. Vesting은 Klaybank의 출시와 더불어서 시작됩니다. 최종적으로 모든 KBT가 분배될 때까지 매 블록당 분배가 진행되며, 40일 동안 분배될 예정입니다.

### 3. 지갑 연결 화면

1-2. 혹은 2-6.의 ‘Connect Wallet’을 클릭하면 다음과 같이 Kaikas 혹은 Klip 지갑 중 하나로 Klaybank와 연동하실 수 있습니다.

![](/files/NtPY7cfv3MK6GRp6tDkf)

3-1. Connect Wallet : Kaikas, Klip 중 사용하는 지갑을 선택하여 IDO에 참여하실 수 있습니다.

### **4. 지갑 연결 팝업** &#x20;

Kaikas의 경우, 지갑을 이미 만드셨을 경우 통상 다음과 같이 본인 확인 절차상 비밀번호를 입력하게 됩니다. 비밀번호를 입력한 경우, Klaybank와 연동을 허락하겠냐는 동의 부분이 나옵니다. 이를 허용하시면 다시 사이트로 돌아와서 자유롭게 이용하실 수 있습니다.

![](/files/D5br0bKdjMiMBoRtiDMP)

4-1. 비밀번호 입력 : 최초 설정 시의 비밀번호를 입력합니다.

### **5. 토큰 구매 단계 - 1**

지갑 연결까지 마쳤을 때는, ‘Join IDO’를 통해 다음과 같은 화면을 보실 수 있습니다. 단, 2-4.의 Status가 ‘Open’임을 알 수 있듯이, 해당 화면은 IDO의 시작 이후 화면입니다. 이제 ‘Purchase’를 통해 IDO에 참여하실 수 있습니다.

![](/files/MojW1x8hHwVXPq8gqlKk)

5-1. Purchase : 해당 버튼을 누름으로써 IDO에 참여할 수 있습니다. 오직 KLAY를 통해서만 참여하실 수 있습니다.

### **6. 토큰 구매 단계 - 2**

’Purchase’를 누른 후에 보시게 될 화면입니다. 해당 화면에서 구매자는 원하는 만큼 KLAY를 보내, KBT를 구매할 수 있습니다. 최소 수량과 최대 수량은 없습니다.

![](/files/Bib1NNb8EAEDIHabS0en)

6-1. Sending KLAY : 구매자가 컨트랙트에 송금할 KLAY 금액을 입력하는 화면입니다. 직접 원하는 수량을 입력할 수 있고, 6-1. 하단의 %를 통해 지갑에 보유하고 있는 KLAY 대비 비율로 간편하게 입력하실 수 있습니다. 우측의 ‘Max’를 클릭 시, 지갑에 있는 KLAY 전액이 입력됩니다. 이 경우, 네트워크 수수료로 지불할 KLAY가 모자라게 되므로, 해당 금액을 소액 만큼(약 0.1KLAY) 남겨두시고 진행해주시길 바랍니다.

6-2. Purchase : 6-1.에서 금액을 입력한 후, ‘Purchase’ 버튼을 누르면 지갑에서 동의 여부를 묻습니다. 이때 동의를 하면 소량의 네트워크 수수료와 컨트랙트로 해당 금액만큼의 KLAY가 빠져나가게 됩니다. 이를 통해 구매자는 IDO에 참여를 완료하게 됩니다.

### **7. 토큰 구매 단계 - 3**

다음은 구매 화면에서 지갑에 보유하고 있는 KLAY와 같거나 적은 양의 금액을 입력했을 경우 보게 되는 화면입니다.

![](/files/CKT5Z3PjaXfmPpsD32kO)

7-1. Purchase : 6-1.에서 금액을 입력 후 활성화되는 버튼을 나타냅니다.

### 8. 토큰 구매 단계 - 4

다음은 구매 화면에서 지갑에 보유하고 있는 KLAY 보다 많은 금액을 입력하였을 경우 보게 되는 화면입니다.

![](/files/Mmwv8DXYzdC4sKf0Vxsg)

8-1. Sending KLAY : 해당 금액을 지갑에서 보유하고 있는 KLAY 보다 많이 입력하였습니다.

8-2. Insufficient balance : 8-1.에 따라 구매 버튼이 비활성화됩니다.

### 9. 토큰 구매 단계 - 5

성공적으로 활성화된 ‘Purchase’ 버튼을 누를면 보게 되는 화면입니다. 이로써 여러분들은 IDO에 성공적으로 참여하셨습니다.

![](/files/refXbAAGoH5NhIWYWr1J)

9-2. Back to IDO : 해당 버튼을 누르면, 1-3.의 ‘Join IDO’를 누른 것과 같은 화면으로 돌아가게 됩니다. 이 경우, 2-5. 공간을 통해서 IDO를 통해 구매한 금액을 확인할 수 있습니다. 만약 더 많은 KBT를 구매하고 싶으시면 다시 5-1.의 ‘Purchase’ 버튼을 눌러 같은 과정을 반복하시면 됩니다.

### 10. IDO 종료 단계

IDO가 Hardcap에 도달되거나, IDO 기간의 종료와 더불어 Softcap 기준을 넘겼을 시 보게 되는 화면입니다.

![](/files/QC3guYdRklwsRHk9mwWw)

10-1. Closed : 더 이상 구매할 수 없는 상태를 의미합니다. IDO는 종료되었으며, Klaybank Main app 런칭 시점에 Claim 할 수 있는 기능이 추가될 예정입니다. 런칭 시점에 자동으로 Vesting은 시작되며, 수령할 수 있는 보상에 대해서는 사용자가 Claim을 통해 분배받을 수 있습니다. Vesting 기간은 40일 입니다.


# Airdrop (12/17\~1/8, 종료됨)

Klaybank의 Airdrop 이벤트에 참여해보세요!

## Airdrop Event <a href="#id-4161" id="id-4161"></a>

![Klaybank Airdrop](/files/F1aPBqVWRe9mv14mxE7X)

> 기간 : 2021년 12월 17일(금) \~ 2022년 1월 8일(토) 자정
>
> 방법 : 링크에 따라 6개의 미션 모두 수행, 2개의 추가 미션 수행 가능
>
> 상금 : **$1,000 상당의 KBT 10명, $100 상당의 KBT 100명**
>
> 링크 : <https://giv.gg/klaybank-airdrop>
>
> Airdrop 일시 : 2022년 2월 9일(수)

{% embed url="<https://medium.com/klaybank/airdrop%EC%97%90-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%B0%B8%EC%97%AC%ED%95%98%EB%82%98%EC%9A%94-df47d9352d36>" %}


