Skip to main content
Unaudited preview — not for production funds. Flashloans are available in the ETHGlobal preview only — the FlashloanRegistry and LiFiFlashloanAdapter contracts are not deployed to production and are unaudited. Use this materialiser for the hackathon and experimentation only; do not route significant value through it.
flashloan sources a flow input by borrowing the amount from a flashloan provider instead of pulling it from the signer. The borrowed amount is made available to the flow as its input, so the rest of the flow can spend capital the user doesn’t hold upfront. Because a flashloan must be repaid in the same transaction, a flow that borrows via this materialiser must settle the loan (principal + the provider’s fee) before it ends — typically with one or more lifi.flashloanRepay ops. If the loan isn’t repaid, simulation reverts. Config:
FieldTypeNotes
providerKind'aave-v3' | 'erc3156' | 'balancer-v2' | 'morpho-blue'Which flashloan provider to borrow from. Fees vary by provider (e.g. Aave V3 charges 5 bps; Balancer V2 charges none).
amountinteger stringThe amount to borrow, in the token’s smallest units.

Example

Borrow USDC via an Aave V3 flashloan and settle it within the flow:
const builder = sdk.flow(8453, {
  name: 'flashloan-borrow',
  inputs: {
    borrowed: resources.erc20(USDC, 8453),
  },
});

// ... spend `builder.inputs.borrowed` across ops, then repay the loan
// (principal + fee) with `lifi.flashloanRepay` before the flow ends ...

const request = sdk.request(builder.build(), {
  signer: OWNER,
  inputs: {
    borrowed: materialisers.flashloan({
      providerKind: 'aave-v3',
      amount: '1000000000', // 1,000 USDC (6 decimals)
    }),
  },
});
For a complete, tested flow that uses two concurrent flashloans to migrate a borrow position, see the debt-migration recipe and aaveToMorphoDebtMigration.ts. For the minimal borrow-and-repay shape, see flashloanRepay.ts.