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