👻
Aave Book
  • Introduction
  • TradFi vs DeFi: Lending
  • Market forces x Interest Rate Models
  • On Indexes
    • Why use indexes?
  • Scaling and ATokens
  • Deposit & Borrow Interest
  • Stable borrowing
    • 🚧Under construction
  • Liquidation
    • 🚧TODO: Full example
    • 🚧Under construction: oracles
  • Primer
    • Bitmap & Masks
      • 🚧padding and bytes
    • WadRayLibrary
      • Math Operations
      • 🚧WIP: Scaling different decimal representations
      • 🚧WIP: 2's complement
      • 🚧casting: to uint128
    • PercentageMath
    • Embedded vs Linked Libraries
  • Functions
    • General Execution flow
    • Architecture & Design choices
      • 🚧Upgradability and Proxies
    • Common Functions
      • getReserveFactor, getDecimals
      • .cache
      • .updateState
      • .updateInterestRates
      • SupplyCap, BorrowCap
      • getFlags
        • 🚧more on flags
      • calculateUserAccountData
    • supply
      • validateSupply
      • transfer & mint
      • isFirstSupply
        • isUsingAsCollateralOne, isUsingAsCollateralAny
      • On check-effects-interactions pattern
    • withdraw
      • get user balance & withdraw amount
      • validateWithdraw
      • collateral check
      • burn ATokens
      • Ensure existing loans are collateralized
    • borrow
      • getIsolationModeState
      • .validateBorrow
      • Mint debt token
      • setBorrowing
      • update IsolationMode debt
      • transfer underlying to user
    • repay
      • get current debt
      • validateRepay, paybackAmount
      • burn debt tokens
      • Cleanup + Collect repay
    • liquidate
      • _calculateDebt
      • validateLiquidationCall
      • getConfigurationData
      • calculateAvailableCollateralToLiquidate
      • 🚧_burnDebtTokens
      • liquidate/burn collateral
      • liquidation Fee
      • Wrap-up
    • 🚧swapBorrowRateMode
    • 🚧setUserUseReserveAsCollateral
  • Contracts
    • AToken
      • Simple example: mint & balanceOf
    • StableDebtToken
      • Implementation explained
    • VariableDebtToken
    • DefaultReserveInterestRateStrategy
    • L2
      • 🚧PriceOracleSentinel
  • Audit findings
    • 🚧Under construction
  • Appendix
    • Simple, Compound, APR, APY
  • Aave Features
    • Risk Management
      • Supply & Borrow Caps
      • Isolation Mode
      • Siloed Borrowing
    • Other features
      • Repay with ATokens
      • eMode: High efficiency Mode
      • 🚧Aave Vault
      • 🚧Portal
Powered by GitBook
On this page
  • User-facing functions
  • Common functions

Was this helpful?

Edit on GitHub
  1. Functions

General Execution flow

User-facing functions

Most of the core user-facing functions can be called from Pool.sol:

  • supply, withdraw

  • borrow, repay

  • liquidate, etc

We will review these functions within this section and breakdown their logic and workflow to illustrate the inner workings of Aave.

Most functions share a similar structure in their execution flow

  1. cache storage variables

  2. update the state, system-wide (interest accrued)

  3. validate action to be taken against updated system

  4. if validate, change state as per action

  5. update rates, reflective of latest action taken

General execution flow

  • cache -> updateState -> validation -> changeState -> updateRates

Except flashloan:

  • validation -> user payload -> cache -> updateState -> changeState -> updateRates

  • to protect against reentrancy and rate manipulation within the user specified payload

Common functions

  • cache, updateState, updateRates

  • getFlags, getDecimals

  • getSupplyCap, getBorrowCap

PreviousEmbedded vs Linked LibrariesNextArchitecture & Design choices

Last updated 1 year ago

Was this helpful?

cache, updateState and updateRates are common components of almost all state-changing functions within Aave. They will be covered within , along other repeated functions.

Common functions