본문으로 건너뛰기

플래시 론 SDK

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

플래시 론 함수

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

borrowBaseAsset

borrowBaseAsset를 사용하여 제공한 poolKey 값으로 식별되는 풀에서 베이스 자산을 빌린다. 이 호출은 Transaction 객체를 받는 함수를 반환한다.

매개변수

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

returnBaseAsset

returnBaseAsset를 사용하여 제공한 poolKey 값으로 식별되는 풀에 베이스 자산을 반환한다. 이 호출은 Transaction 객체를 받는 함수를 반환한다.

매개변수

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

borrowQuoteAsset

borrowQuoteAsset를 사용하여 제공한 poolKey 값으로 식별되는 풀에서 견적 자산을 빌린다. 이 호출은 Transaction 객체를 받는 함수를 반환한다.

매개변수

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

returnQuoteAsset

returnQuoteAsset를 사용하여 제공한 poolKey로 식별되는 풀에 견적 자산을 반환한다. 이 호출은 Transaction 객체를 받는 함수를 반환한다.

매개변수

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

Flash loan example

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

// Example of a flash loan transaction
// Borrow 1 DEEP from DEEP_SUI pool
// Swap 0.5 DBUSDC for SUI in SUI_DBUSDC pool, pay with deep borrowed
// Swap SUI back to DEEP
// Return 1 DEEP to DEEP_SUI pool
flashLoanExample = async (tx: Transaction) => {
const borrowAmount = 1;
const [deepCoin, flashLoan] = tx.add(this.flashLoans.borrowBaseAsset('DEEP_SUI', borrowAmount));

// Execute trade using borrowed 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());

// Execute second trade to get back DEEP for repayment
const [baseOut2, quoteOut2, deepOut2] = tx.add(
this.deepBook.swapExactQuoteForBase({
poolKey: 'DEEP_SUI',
amount: 10,
deepAmount: 0,
minOut: 0,
}),
);

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

// Return borrowed DEEP
const loanRemain = tx.add(
this.flashLoans.returnBaseAsset('DEEP_SUI', borrowAmount, baseOut2, flashLoan),
);

// Send the remaining coin to user's address
tx.transferObjects([loanRemain], this.getActiveAddress());
};