본문으로 건너뛰기

플래시 론 SDK

Flash loan은 pool에서의 대출과 상환이 하나의 programmable transaction block 안에서 수행되는 대출이다. SDK는 이 기능을 구현할 수 있는 함수를 제공한다. API에 대한 자세한 내용은 플래시 론를 참조하라.

플래시 론 함수

DeepBookV3 SDK는 다음 flash loan 관련 함수를 제공한다.

borrowBaseAsset

borrowBaseAsset를 사용하여 제공한 poolKey 값으로 식별되는 pool에서 base asset을 빌린다. 이 호출은 Transaction object를 받는 함수를 반환한다.

매개변수

  • poolKey: 빌릴 pool을 식별하는 String이다.
  • borrowAmount: pool에서 빌릴 양을 나타내는 Number이다.
borrowBaseAsset(poolKey: string, borrowAmount: number);

returnBaseAsset

returnBaseAsset를 사용하여 제공한 poolKey 값으로 식별되는 pool에 base asset을 반환한다. 이 호출은 Transaction object를 받는 함수를 반환한다.

매개변수

  • poolKey: 빌릴 pool을 식별하는 String이다.
  • borrowAmount: pool에서 빌릴 양을 나타내는 Number이다.
  • baseCoinInput: 반환할 base asset을 나타내는 Coin object이다.
  • flashLoan: 정산할 대출을 나타내는 Flash loan object이다.
returnBaseAsset(
{
poolKey: string,
borrowAmount: number,
baseCoinInput: TransactionObjectArgument,
flashLoan: TransactionObjectArgument,
}
)

borrowQuoteAsset

borrowQuoteAsset를 사용하여 제공한 poolKey 값으로 식별되는 pool에서 quote asset을 빌린다. 이 호출은 Transaction object를 받는 함수를 반환한다.

매개변수

  • poolKey: 빌릴 pool을 식별하는 String이다.
  • borrowAmount: pool에서 빌릴 양을 나타내는 Number이다.
borrowQuoteAsset(poolKey: string, borrowAmount: number);

returnQuoteAsset

returnQuoteAsset를 사용하여 제공한 poolKey로 식별되는 pool에 quote asset을 반환한다. 이 호출은 Transaction object를 받는 함수를 반환한다.

매개변수

  • poolKey: 빌릴 pool을 식별하는 String이다.
  • borrowAmount: pool에서 빌릴 양을 나타내는 Number이다.
  • baseCoinInput: 반환할 quote asset을 나타내는 Coin object이다.
  • flashLoan: 정산할 대출을 나타내는 Flash loan object이다.
returnQuoteAsset(
poolKey: string,
borrowAmount: number,
quoteCoinInput: TransactionObjectArgument,
flashLoan: TransactionObjectArgument,
);

Flash loan example

다음 예시는 DeepBookMarketMaker class에서 flash loan을 사용하는 예를 보여준다.

// flash loan transaction 예시
// DEEP_SUI pool에서 DEEP 1을 차입한다
// SUI_DBUSDC pool에서 DBUSDC 0.5를 SUI로 swap하고 차입한 DEEP로 지불한다
// SUI를 다시 DEEP로 swap한다
// DEEP_SUI pool에 DEEP 1을 반환한다
flashLoanExample = async (tx: Transaction) => {
const borrowAmount = 1;
const [deepCoin, flashLoan] = tx.add(this.flashLoans.borrowBaseAsset('DEEP_SUI', borrowAmount));

// 차입한 DEEP를 사용해 거래를 실행한다
const [baseOut, quoteOut, deepOut] = tx.add(
this.deepBook.swapExactQuoteForBase({
poolKey: 'SUI_DBUSDC',
amount: 0.5,
deepAmount: 1,
minOut: 0,
deepCoin: deepCoin,
}),
);

tx.transferObjects([baseOut, quoteOut, deepOut], this.getActiveAddress());

// 상환용 DEEP를 되찾기 위해 두 번째 거래를 실행한다
const [baseOut2, quoteOut2, deepOut2] = tx.add(
this.deepBook.swapExactQuoteForBase({
poolKey: 'DEEP_SUI',
amount: 10,
deepAmount: 0,
minOut: 0,
}),
);

tx.transferObjects([quoteOut2, deepOut2], this.getActiveAddress());

// 차입한 DEEP를 반환한다
const loanRemain = tx.add(
this.flashLoans.returnBaseAsset('DEEP_SUI', borrowAmount, baseOut2, flashLoan),
);

// 남은 coin을 사용자의 address로 전송한다
tx.transferObjects([loanRemain], this.getActiveAddress());
};