Bird
Raised Fist0
Blockchain / Solidityprogramming~10 mins

Flash loans in Blockchain / Solidity - Step-by-Step Execution

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Concept Flow - Flash loans
Start Transaction
Borrow funds instantly
Use funds for arbitrage or swap
Repay loan + fee within same transaction
If repayment successful
Transaction succeeds
If repayment fails
Transaction reverts, no loss
Flash loans borrow funds instantly within one transaction, use them, and repay immediately; if repayment fails, the whole transaction is canceled.
Execution Sample
Blockchain / Solidity
function executeFlashLoan() {
  borrow(amount);
  useFunds();
  repay(amount + fee);
}
This code borrows funds, uses them, and repays the loan plus fee all in one transaction.
Execution Table
StepActionState ChangeConditionResult
1Start transactionTransaction beginsN/AReady to borrow
2Borrow fundsBalance += amountLoan availableFunds received
3Use fundsPerform arbitrage or swapFunds borrowedPotential profit
4Repay loan + feeBalance -= amount + feeSufficient fundsLoan repaid
5Check repaymentVerify repaymentRepayment successfulTransaction succeeds
6End transactionCommit changesAll steps successfulState updated
ExitIf repayment failsRevert all changesRepayment failedTransaction reverted, no loss
💡 Transaction reverts if loan plus fee is not repaid within the same transaction
Variable Tracker
VariableStartAfter BorrowAfter UseAfter RepayFinal
balanceinitialinitial + amountvaries (profit/loss)initial + profit - feeupdated or reverted
Key Moments - 3 Insights
Why does the transaction revert if the loan is not repaid?
Because flash loans require repayment within the same transaction; if repayment fails, the blockchain cancels all changes to prevent loss, as shown in the exit row of the execution_table.
Can you keep the borrowed funds after the transaction?
No, the borrowed funds plus fee must be repaid before the transaction ends, or else the entire transaction is reverted, ensuring no funds are lost or kept.
What happens if the useFunds step does not generate enough profit?
If the profit is insufficient to repay the loan plus fee, the repayment step fails, causing the transaction to revert as shown in the exit row of the execution_table.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what happens at step 4?
ATransaction ends successfully
BBorrow funds, increasing balance
CRepay loan plus fee, reducing balance
DTransaction reverts
💡 Hint
Check the 'Action' and 'Result' columns at step 4 in the execution_table
At which step does the transaction revert if repayment fails?
AStep 3
BExit row
CStep 5
DStep 6
💡 Hint
Look for the row labeled 'Exit' in the execution_table
If the useFunds step generates no profit, what is the likely outcome?
ATransaction reverts due to failed repayment
BTransaction succeeds with profit
CLoan is repaid with fee easily
DFunds are kept without repayment
💡 Hint
Refer to the 'Use funds' and 'Repay loan + fee' steps in the execution_table and variable_tracker
Concept Snapshot
Flash loans let you borrow funds instantly within one transaction.
You must use and repay the loan plus fee before the transaction ends.
If repayment fails, the whole transaction reverts, so no loss occurs.
Common uses include arbitrage and swaps.
This ensures risk-free borrowing within a single blockchain transaction.
Full Transcript
Flash loans are a special kind of loan on the blockchain that lets you borrow money instantly but only within one transaction. The process starts by beginning a transaction, then borrowing the funds. You use these funds for something like arbitrage or swapping tokens. Before the transaction ends, you must repay the loan plus a small fee. If you do this successfully, the transaction completes and all changes are saved. But if you fail to repay, the blockchain cancels the entire transaction, so no one loses money. This makes flash loans a powerful tool for quick, risk-free borrowing and trading within a single transaction.

Practice

(1/5)
1. What is the main feature of a flash loan in blockchain?
easy
A. You can borrow funds without collateral but must repay within the same transaction
B. You borrow funds with collateral and repay anytime
C. You borrow funds and repay after 30 days
D. You borrow funds only for staking purposes

Solution

  1. Step 1: Understand flash loan basics

    Flash loans allow borrowing without collateral but require repayment in the same transaction.
  2. Step 2: Compare options

    Only You can borrow funds without collateral but must repay within the same transaction correctly states no collateral and instant repayment.
  3. Final Answer:

    You can borrow funds without collateral but must repay within the same transaction -> Option A
  4. Quick Check:

    Flash loan = no collateral + instant repayment [OK]
Hint: Flash loans = borrow now, repay instantly [OK]
Common Mistakes:
  • Thinking collateral is required
  • Assuming repayment can be delayed
  • Confusing flash loans with regular loans
2. Which of the following is the correct Solidity function signature to implement a flash loan callback?
easy
A. function repayLoan(uint256 amount) external
B. function flashLoan(address borrower, uint256 amount) public
C. function startLoan(address asset, uint256 amount) external returns (bool)
D. function executeOperation(address[] calldata assets, uint256[] calldata amounts, uint256[] calldata premiums, address initiator, bytes calldata params) external returns (bool)

Solution

  1. Step 1: Identify the standard flash loan callback

    The Aave protocol requires implementing executeOperation with specific parameters.
  2. Step 2: Match function signature

    function executeOperation(address[] calldata assets, uint256[] calldata amounts, uint256[] calldata premiums, address initiator, bytes calldata params) external returns (bool) matches the exact signature needed for flash loan execution and repayment.
  3. Final Answer:

    function executeOperation(address[] calldata assets, uint256[] calldata amounts, uint256[] calldata premiums, address initiator, bytes calldata params) external returns (bool) -> Option D
  4. Quick Check:

    executeOperation signature = function executeOperation(address[] calldata assets, uint256[] calldata amounts, uint256[] calldata premiums, address initiator, bytes calldata params) external returns (bool) [OK]
Hint: Flash loan callback is always executeOperation with specific params [OK]
Common Mistakes:
  • Using incorrect function names
  • Missing required parameters
  • Wrong return type
3. Given this simplified Solidity snippet inside executeOperation:
uint256 amountOwing = amounts[0] + premiums[0];
IERC20(assets[0]).approve(address(LENDING_POOL), amountOwing);
return true;
What does this code do?
medium
A. Transfers the loan amount to the borrower
B. Approves the lending pool to withdraw the loan plus fee for repayment
C. Withdraws the loan amount from the lending pool
D. Rejects the flash loan request

Solution

  1. Step 1: Understand the approval call

    The code approves the lending pool contract to spend the loan amount plus premium from this contract.
  2. Step 2: Interpret the purpose

    This approval is necessary so the lending pool can pull repayment automatically after the operation.
  3. Final Answer:

    Approves the lending pool to withdraw the loan plus fee for repayment -> Option B
  4. Quick Check:

    approve() = allow repayment withdrawal [OK]
Hint: approve() lets lending pool pull repayment [OK]
Common Mistakes:
  • Confusing approve with transfer
  • Thinking it sends funds to borrower
  • Missing the premium fee in amount
4. Identify the error in this simplified flash loan executeOperation snippet:
function executeOperation(address[] calldata assets, uint256[] calldata amounts, uint256[] calldata premiums, address initiator, bytes calldata params) external returns (bool) {
    uint256 amountOwing = amounts[0] + premiums[0];
    IERC20(assets[0]).transferFrom(msg.sender, address(this), amountOwing);
    return true;
}
medium
A. Incorrect function parameters
B. Missing return statement
C. Using transferFrom instead of approve for repayment
D. Not calling the lending pool to borrow funds

Solution

  1. Step 1: Analyze repayment method

    The code tries to pull repayment using transferFrom from msg.sender, which is incorrect.
  2. Step 2: Correct repayment approach

    Flash loans require approving the lending pool to pull funds, not transferring from msg.sender.
  3. Final Answer:

    Using transferFrom instead of approve for repayment -> Option C
  4. Quick Check:

    Repayment needs approve(), not transferFrom() [OK]
Hint: Repay by approve(), not transferFrom() [OK]
Common Mistakes:
  • Confusing transferFrom with approve
  • Forgetting to approve lending pool
  • Misunderstanding msg.sender role
5. You want to use a flash loan to perform arbitrage between two decentralized exchanges (DEXs). Which sequence correctly describes the steps inside executeOperation to profit and repay the loan?
hard
A. Borrow funds -> Buy low on DEX1 -> Sell high on DEX2 -> Approve repayment -> Return true
B. Borrow funds -> Approve repayment -> Buy low on DEX1 -> Sell high on DEX2 -> Return true
C. Approve repayment -> Borrow funds -> Buy low on DEX1 -> Sell high on DEX2 -> Return true
D. Buy low on DEX1 -> Borrow funds -> Sell high on DEX2 -> Approve repayment -> Return true

Solution

  1. Step 1: Understand flash loan flow

    You first borrow funds, then use them to buy low on one DEX and sell high on another to gain profit.
  2. Step 2: Approve repayment and finish

    After trading, approve the lending pool to pull the loan plus fee, then return true to complete.
  3. Final Answer:

    Borrow funds -> Buy low on DEX1 -> Sell high on DEX2 -> Approve repayment -> Return true -> Option A
  4. Quick Check:

    Arbitrage flow = borrow -> trade -> approve -> return [OK]
Hint: Trade first, then approve repayment [OK]
Common Mistakes:
  • Approving repayment before trading
  • Trying to trade before borrowing
  • Not approving repayment at all