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.
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
}
Cơ chế kỹ thuật step-by-step
- Người dùng deploy FlashLoanReceiver contract với logic tùy chỉnh
- Gọi
pool.flashLoan(receiverAddress, assets, amounts, ...) - Aave pool chuyển token cho receiver
- Aave pool gọi
receiver.executeOperation()— nơi logic của bạn chạy - Trong executeOperation: thực hiện arbitrage, swap, liquidate... bất kỳ thứ gì
- Cuối executeOperation: approve pool rút lại tiền + fee
- 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ức | Phí Flash Loan | Tài sản hỗ trợ |
|---|---|---|
| Aave V3 | 0.05–0.09% | Tất cả tài sản trong pool |
| Uniswap V3 | 0.01–1% (pool fee) | Bất kỳ cặp token nào có pool |
| Balancer | 0% (flash loan) + pool fee | Tài sản trong Balancer vault |
| dYdX | 0% (chỉ cần trả đủ) | ETH, USDC, DAI |
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:
- Chờ bị liquidate: Bot liquidate bạn, nhận Liquidation Bonus 5–15% từ collateral của bạn
- Self-liquidate bằng flash loan: Tự thanh lý với chỉ phí 0.09%
// 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
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ông | Công cụ | Lỗ hổng thực sự |
|---|---|---|
| bZx 2020 | Flash loan | Oracle dùng giá spot từ DEX thanh khoản thấp |
| Cream Finance 2021 | Flash loan | Logic tính giá collateral sai |
| Mango Markets 2022 | Vốn thật $10M | Oracle tài sản thanh khoản thấp, không có supply cap |
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:
- Solidity cơ bản — hiểu contract, interface, approve/transfer
- Aave V3 FlashLoan docs — docs.aave.com/developers/guides/flash-loans
- Hardhat / Foundry — test trên fork mainnet trước khi deploy thật
- DeFi Saver — nếu chỉ cần self-liquidation, dùng UI không cần code