FlashLoan(플래시론)

Introduction

DeFi에서는 이자농사, 차익거래, 청산 등의 과정에 직접 참여하여 높은 수익을 누릴 수 있는 많은 기회들이 있지만, 투자 수익이 개인 자본에 제한되는 답답함이 있었습니다. 하지만 사실 디파이에는 이러한 한계를 벗어날 수 있게 해주는 유일무이한 아이디어가 이미 있습니다.
BiFi는 Lending 서비스와 함께 플래시론을 지원합니다. 플래시론은 하나의 거래(transaction)내에 대출과 상환을 모두 완료하여 자기 자본의 제한없이 레버리지를 사용할 수 있게 해줍니다. BiFi 플래시론을 이용해서 여러분의 수익을 극대화 하고, 자본이 없어 미처 시도해보지 못한 아이디어를 실현해 보실 수 있습니다.

BiFI 플래시론을 사용하기 위한 방법은 두 가지 입니다.

  1. 1.
    BIFI-X 서비스 : 이자농사, Long/Short 전략을 통해 BiFi FlashLoan을 가장 효과적으로 바로 사용할 수 있는 BiFi의 자매 서비스 입니다. BiFi에서는 개발자가 아닌 유저들도 손쉽게, 클릭 하나로 이를 실현할 수 있도록 BiFi X를 출시하여 많은 유저들이 작은 자본으로도 높은 수익을 실현할 수 있게 했습니다.
  2. 2.
    직접 이용: 무담보로 자본을 빌린다는 혁신적인 기능은 smart contract를 통해서만 가능합니다. BiFi-X는 이 어려운 과정을 자동으로 해주지만, BiFi 플래시론을 직접 이용하시기 위해서는 이를 위한 smart contract를 개발해야 합니다.
또한, BiFi 플래시론을 사용하기 위해서는 수수료(fee)를 지불해야 합니다. 하지만, BiFi 토큰을 보유하고 있는 사용자에게는 보유하신 양에 비례해서 수수료가 할인됩니다. (BiFi 토큰은 BiFi 서비스에서 reward로 얻으실 수 있습니다.) BiFi 플래시론의 fee 계산 방법은 아래 box를 참고하세요.

FlashLoan Fee 계산

BiFi 플래시론 Fee는 대출금액의 고정 비율(feeRate)로 산출됩니다. 사용자가 BiFi를 보유하고 있다면 BiFi 보유량에 고정 비율로 산출된 Fee에 할인 비율이 적용됩니다.

FlashLoan Fee 계산 공식

1
// calculate fee
2
discountRate = 0.1 + 0.9 * min(1, discountBase / bifiAmount)
3
FlashLoan Fee = flashLoanAmount * feeRate * discountRate
Copied!
  • discountRate: 최종 할인율. 사용자의 BiFi token 보유양(bifiAmount)에 의해서 변경됩니다. 많이 보유할 수록 할인율이 높아집니다. (최대 discountBase)
  • feeRate: 기본 BiFi 플래시론 수수료 적용 비율

BiFi FlashLoan 이용

BiFi X 서비스

BiFi-X는 BiFi 플래시론을 가장 효과적으로 손쉽게 이용할 수 있는 서비스 입니다. BiFi 플래시론을 이용해서 자신의 자본에 레버리지를 더하여 수익을 최대화합니다. 아래 주소를 통해서 이용하실 수 있습니다.

Smart Contract를 이용한 직접 이용

BiFi FlashLoan 서비스는 사용자가 만드는 FlashLoan Receiver Contract와 BiFi token pool을 이용해서 flash loan 서비스를 제공하는 FlashLoan Contract가 상호작용하여 수행됩니다.
  • FlashLoan Contract: BiFi의 유동성을 이용하여 사용자에게 요청받아 BiFi FlashLoan의 유동성을 제공하는 시스템 Contract입니다.
  • FlashLoanReceiver Contract: BiFi FlashLoan에서 대출을 받아 원하는 작업을 수행하는 Smart Wallet 역할을 합니다. FlashLoan Contract가 제공하는 flashloan() 함수를 호출하여 FlashLoan을 요청합니다. 사용자는 자신이 수행하고자 하는 작업을 executeOperation() 함수내에 구현해야 합니다. 이 executeOperation() 함수는 원하는 작업 후에는 대출한 금액을 fee와 함께 상환하는 엄격한 규칙을 반드시 지켜야 합니다.
FlashLoan 템플릿 가이드

FlashLoan 사전 준비

  1. 1.
    사용자는 FlashLoan contract 주소를 인자로 FlashloanReceiver contract를 deploy 합니다.
    1
    // _managerAddr : FlashLoan contract 주소
    2
    constructor(address _managerAddr)
    Copied!
  2. 2.
    UserFlashLoanReceiver Contract에 flashLoan의 Fee 만큼의 코인을 보냅니다.

FlashLoan 실행 순서

  1. 1.
    UserFlashLoanReceiver Contract의 flashloan 함수를 호출합니다.
    1
    // handlerID : Flashloan을 통해 자산을 빌릴 핸들러의 ID
    2
    // amount : Flashloan을 통해 빌릴 코인 개수
    3
    // amount의 기준은 각 토큰의 Decimal이 아닌 unifiedAmount(10**18)
    4
    // params : Flashloan의 executeOperation 함수로 전달할 인코딩된 파라미터
    5
    function flashloan(uint256 handlerID, uint256 amount, bytes calldata params)
    Copied!
  2. 2.
    FlashLoanReceiver Contract는 FlashLoan Contract의 flashloan 함수를 호출합니다.
    1
    // handlerID, amount, params :단계(1)에서 전달받은 인자
    2
    // receiverAddress: flashLoan 대출을 수령할 주소
    3
    function flashloan(uint256 handlerID, address receiverAddress, uint256 amount, bytes calldata params) external returns (bool)
    Copied!
  3. 3.
    FlashLoan Contract는 HandlerProxy Contract의 executeFlashloan 을 호출하여 flashLoan 대출 실행을 요청합니다.
  4. 4.
    HandlerProxy Contract는 요청받은 FlashLoan Amount만큼 FlashLoanReceiver Contract에게 토큰을 보냅니다.
  5. 5.
    FlashLoan Contract는 FlashLoanReceiverexecuteOperation 함수를 호출합니다.
    1
    // reserve****:**** Flashloan을 통해 자산을 빌린 자산(Token)의 Address
    2
    // amount**:** Flashloan을 통해 자산을 빌린 코인 개수
    3
    // fee: Flashloan을 통해 빌린 코인 개수에 대한 수수료(Fee) 개수
    4
    // params: flashloan 함수를 통해 전달 받은 인코딩된 파라미터
    5
    function executeOperation(address reserve, uint256 amount, uint256 fee, bytes calldata params)
    Copied!
  6. 6.
    FlashLoanReceiver Contract는 사용자 정의 로직 수행 이후, 단계(5)의 인자인 amountfee 의 합만큼 Repay를 수행합니다.

Appendix: Contract information

FlashLoan 서비스를 이용하기위해 호출할 FlashLoan Contract 정보는 다음과 같습니다.

FlashLoan Contract List

FlashLoan 서비스 내에서 대출할 수 있는 토큰 리스트와 HandlerID는 다음과 같습니다.

HandlerID List

HandlerID
Name
Address
Chain
0
ETHER
X
ETHEREUM
1
USDT
0xdac17f958d2ee523a2206206994597c13d831ec7
ETHEREUM
2
DAI
0x6b175474e89094c44da98b954eedeac495271d0f
ETHEREUM
3
LINK
0x514910771af9ca656af840dff83e8264ecf986ca
ETHEREUM
4
USDC
0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
ETHEREUM
5
WBTC
0x2260fac5e5542a773aa44fbcfedf7c193bc2c599
ETHEREUM
0
BNB
X
BINANCE
1
ETHER
0xf86d8218BCC15874f5D25c191FdDd43F2334c3EB
BINANCE
2
USDT
0x2A29598cbc17BA112C8Fd0E07Fbf5402eF57E6b8
BINANCE
3
DAI
0xB67C5433d234d656002f12664d15ab4b40666D9B
BINANCE
4
USDC
0xBA9De5a8FD91408826616f2d6d7470A11E34c9F0
BINANCE
5
BTCB
0x26d0E4707af1c1DAAd8e9BA21b99cDa7Fd24c40B
BINANCE
6
BUSD
0x829ED2a2BeF8b72e648f92CBF01587C7E12e8c1e
BINANCE
Last modified 2mo ago