Kỹ thuật nâng cao · DeFi Primitive

Flash Loan là gì? Atomic, Không thế chấp & Self-liquidation

Khoản vay không cần thế chấp, tồn tại trong một transaction, phải hoàn trả trước khi block đóng. Đây là đổi mới nguyên bản nhất — và bị hiểu sai nhiều nhất — trong DeFi.

⏱ ~12 phút📅 2025🎯 Intermediate → Advanced
Mục lục
  1. Flash Loan là gì?
  2. Atomic transaction hoạt động thế nào?
  3. Cơ chế kỹ thuật step-by-step
  4. Phí và điều kiện
  5. 4 use case thực tế
  6. Self-liquidation — tiết kiệm 5–15%
  7. Collateral Swap atomic
  8. Flash Loan attack — hiểu đúng bản chất
  9. Code example cơ bản

Flash Loan là gì?

Flash Loan là khoản vay không cần thế chấp với một điều kiện duy nhất: toàn bộ vốn vay phải được hoàn trả trong cùng một transaction. Nếu không hoàn trả đủ trước khi transaction kết thúc, toàn bộ giao dịch bị revert — như thể chưa từng xảy ra.

Nguyên lý cốt lõi
Blockchain thực thi giao dịch theo nguyên tắc all-or-nothing. Flash loan khai thác nguyên lý này: pool cho vay vốn → bạn dùng vốn → trả lại trong cùng 1 block. Nếu không trả đủ → tất cả revert, pool không mất gì.

Flash loan là đổi mới không tồn tại trong tài chính truyền thống. Không ngân hàng nào có thể cho vay $1 tỷ, nhận lại trong 1 giây, không cần bất kỳ tài sản thế chấp nào — vì họ không có blockchain đảm bảo tính atomic.

Atomic Transaction — Nền tảng kỹ thuật

Một transaction Ethereum là atomic: hoặc tất cả các bước thực thi thành công, hoặc tất cả bị revert về trạng thái ban đầu. Không có trạng thái "thực thi một phần".

// Pseudocode: Flash loan trong 1 transaction
Transaction {
  Step 1: Pool chuyển $1,000,000 USDC cho bạn
  Step 2: Bạn làm gì đó với $1,000,000 (arbitrage, swap, liquidate...)
  Step 3: Bạn trả lại $1,000,000 + fee (0.09%) = $1,000,900

  // Nếu Step 3 không xảy ra hoặc số tiền không đủ:
  → REVERT tất cả Steps
  → Pool không mất gì, trạng thái blockchain không đổi
}
Pool không có rủi ro gì không?
Đúng về mặt kỹ thuật. Pool không thể mất tiền từ flash loan (nếu smart contract đúng). Rủi ro là từ oracle manipulation và logic lỗi — không phải từ cơ chế flash loan.

Cơ chế kỹ thuật step-by-step

  1. Người dùng deploy FlashLoanReceiver contract với logic tùy chỉnh
  2. Gọi pool.flashLoan(receiverAddress, assets, amounts, ...)
  3. Aave pool chuyển token cho receiver
  4. Aave pool gọi receiver.executeOperation() — nơi logic của bạn chạy
  5. Trong executeOperation: thực hiện arbitrage, swap, liquidate... bất kỳ thứ gì
  6. Cuối executeOperation: approve pool rút lại tiền + fee
  7. Aave pool kiểm tra balance — nếu đủ: thành công; nếu không đủ: REVERT
// Simplified FlashLoanReceiver
contract MyFlashLoan is IFlashLoanReceiver {
  function executeOperation(
    address[] memory assets,
    uint256[] memory amounts,
    uint256[] memory premiums,  // = fee 0.09%
    address initiator,
    bytes memory params
  ) external returns (bool) {
    
    // *** Logic của bạn ở đây ***
    // Ví dụ: arbitrage giữa 2 DEX
    uint256 amountIn = amounts[0];  // $1,000,000 USDC
    // ... swap USDC → ETH trên Uniswap
    // ... swap ETH → USDC trên Curve (giá tốt hơn)
    // ... profit = ~$2,000
    
    // Approve trả lại pool
    uint256 amountOwed = amounts[0] + premiums[0];  // $1,000,900
    IERC20(assets[0]).approve(address(POOL), amountOwed);
    return true;
  }
}

Phí và điều kiện Flash Loan

Giao thứcPhí Flash LoanTài sản hỗ trợ
Aave V30.05–0.09%Tất cả tài sản trong pool
Uniswap V30.01–1% (pool fee)Bất kỳ cặp token nào có pool
Balancer0% (flash loan) + pool feeTài sản trong Balancer vault
dYdX0% (chỉ cần trả đủ)ETH, USDC, DAI
Chi phí thực tế
Flash loan $1,000,000 USDC trên Aave tốn phí ~$900 (0.09%). Cộng gas Arbitrum ~$1. Tổng <$1,000 để có quyền dùng $1M trong 1 transaction. Không cần vốn, không cần thế chấp.

4 Use Case Thực Tế

1. Arbitrage DEX-DEX

ETH giá $2,000 trên Uniswap, $2,020 trên Curve. Vay $10M USDC → mua ETH Uniswap → bán ETH Curve → lợi nhuận $100K → trả lại $10M + fee. Profit ~$99,100.

2. Self-liquidation (quan trọng nhất với người dùng)

Xem phần riêng bên dưới — đây là use case có giá trị nhất với người vay thông thường.

3. Collateral Swap

Muốn đổi collateral ETH sang WBTC mà không cần đóng vị thế: flash loan USDC → trả nợ → rút ETH → bán ETH → mua WBTC → gửi WBTC → vay USDC → trả flash loan. Tất cả trong 1 transaction.

4. Leverage trong 1 transaction

Xây dựng đòn bẩy không cần nhiều bước: flash loan → mua thêm collateral → gửi collateral → vay stablecoin → trả flash loan. 3x–5x leverage trong 1 giao dịch.

Self-liquidation — Tiết kiệm 5–15% penalty

Khi HF tiếp cận 1.0, bạn có hai lựa chọn:

// Self-liquidation flow (Arbitrum, ~$0.5 gas)
Bước 1: Flash loan $40,000 USDC (= toàn bộ nợ còn lại)
Bước 2: Dùng $40,000 USDC trả nợ trên Aave
Bước 3: Rút toàn bộ collateral ETH (đã không còn nợ)
Bước 4: Bán một phần ETH để lấy $40,036 USDC (trả flash loan + fee)
Bước 5: Giữ lại toàn bộ ETH còn lại

So sánh:
- Bị liquidate: mất 5–15% × $40,000 = $2,000–6,000
- Self-liquidate: tốn 0.09% × $40,000 = $36
- Tiết kiệm: $1,964 – $5,964
Khi nào self-liquidation có ý nghĩa?
Khi HF < 1.1 và bạn không có tiền mặt thêm để repay hoặc thêm collateral. Self-liquidation đóng toàn bộ vị thế ngay lập tức với chi phí tối thiểu. Cần biết code hoặc dùng giao diện DeFi Saver.

Hiểu thêm về tại sao liquidation penalty tồn tại: Liquidation DeFi: Cơ chế và Liquidation Bonus →

Collateral Swap Atomic

Muốn đổi collateral ETH → WBTC mà không muốn đóng/mở lại vị thế (tốn gas và có thể gặp slippage lúc giá xấu)?

// Atomic collateral swap: ETH collateral → WBTC collateral
// Giả sử: 5 ETH collateral, $6,000 USDC nợ

Bước 1: Flash loan $6,000 USDC
Bước 2: Repay toàn bộ nợ USDC
Bước 3: Rút 5 ETH collateral
Bước 4: Swap 5 ETH → tương đương WBTC trên DEX
Bước 5: Deposit WBTC làm collateral mới
Bước 6: Vay lại $6,000 USDC
Bước 7: Trả flash loan $6,000 + $5.4 fee

Kết quả: Vị thế giống hệt, chỉ đổi collateral ETH → WBTC
Gas: ~$2–5 trên Arbitrum, tất cả trong 1 transaction

Flash Loan Attack — Hiểu đúng bản chất

Flash loan thường bị đổ lỗi trong các vụ tấn công DeFi. Sự thật: flash loan không phải nguyên nhân, nó chỉ là công cụ khuếch đại vốn. Lỗ hổng thực sự luôn là ở giao thức bị tấn công.

Vụ tấn côngCông cụLỗ hổng thực sự
bZx 2020Flash loanOracle dùng giá spot từ DEX thanh khoản thấp
Cream Finance 2021Flash loanLogic tính giá collateral sai
Mango Markets 2022Vốn thật $10MOracle tài sản thanh khoản thấp, không có supply cap
Flash loan không phải lỗ hổng
Nếu không có flash loan, attacker chỉ cần nhiều vốn hơn — kết quả tương tự. Vấn đề là thiết kế oracle, không phải tính năng flash loan. Aave đã giữ flash loan vì lợi ích hợp pháp lớn hơn rủi ro.

Xem chi tiết oracle risk: Oracle Risk trong DeFi: Nguồn gốc mọi cuộc tấn công →

Bắt đầu với Flash Loan — Resources

Để thực sự dùng flash loan, bạn cần:

Test kỹ trước khi dùng thật
Bug trong executeOperation không revert transaction ngay — nó có thể khiến bạn trả flash loan nhưng không nhận được gì. Test toàn diện trên Hardhat fork mainnet trước khi dùng vốn thật.