Skip to main content

Flash Loans SDK

A flash loan is one where the borrowing and returning of loans from pools is performed within a single programmable transaction block. The SDK exposes functions that allow you to implement this functionality. See Flash Loans for more details on the API.

Flash loan functions

The DeepBookV3 SDK provides the following flash loan related functions.

borrowBaseAsset

Use borrowBaseAsset to borrow a base asset from the pool identified by the poolKey value you provide. The call returns a function that takes a Transaction object

Parameters

  • poolKey: String that identifies the pool from which to borrow.
  • borrowAmount: Number that represents the amount to borrow from the pool.
borrowBaseAsset(poolKey: string, borrowAmount: number);

returnBaseAsset

Use returnBaseAsset to return the base asset to the pool identified by the poolKey value you provide. The call returns a function that takes a Transaction object.

Parameters

  • poolKey: String that identifies the pool from which to borrow.
  • borrowAmount: Number that represents the amount to borrow from the pool.
  • baseCoinInput: Coin object representing the base asset to be returned.
  • flashLoan: Flash loan object representing the loan to be settled.
returnBaseAsset(
{
poolKey: string,
borrowAmount: number,
baseCoinInput: TransactionObjectArgument,
flashLoan: TransactionObjectArgument,
}
)

borrowQuoteAsset

Use borrowQuoteAsset to borrow a quote asset from the pool identified by the poolKey value you provide. The call returns a function that takes a Transaction object.

Parameters

  • poolKey: String that identifies the pool from which to borrow.
  • borrowAmount: Number that represents the amount to borrow from the pool.
borrowQuoteAsset(poolKey: string, borrowAmount: number);

returnQuoteAsset

Use returnQuoteAsset to return a quote asset to the pool identified by the poolKey you provide. The call returns a function that takes a Transaction object.

Parameters

  • poolKey: String that identifies the pool from which to borrow.
  • borrowAmount: Number that represents the amount to borrow from the pool.
  • baseCoinInput: Coin object representing the quote asset to be returned.
  • flashLoan: Flash loan object representing the loan to be settled.
returnQuoteAsset(
poolKey: string,
borrowAmount: number,
quoteCoinInput: TransactionObjectArgument,
flashLoan: TransactionObjectArgument,
);

Flash loan example

The following example demonstrates flash loan usage in DeepBookMarketMaker class.

// 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());
};