Hook
Ngày 12 tháng 3, giao thức lending LendFlow mất 40% thanh khoản chỉ trong 48 giờ. TVL từ 120 triệu USD rơi xuống 72 triệu. Cộng đồng đổ lỗi cho FUD thị trường, nhưng tôi mở block explorer và thấy một con số khác: 11 lệnh thanh lý sai liên tiếp trong cùng một block, tổng giá trị 4.3 triệu USD. Delay oracle 2.1 giây đã biến thanh lý lành mạnh thành thảm họa. Một dòng code sai, cả hệ thống sụp đổ.
Context
LendFlow là giao thức lending cross-chain trên Ethereum và Arbitrum, sử dụng oracle của Chainlink với heartbeat 1 phút. Trong thị trường giảm, biến động giá ETH 5-7% trong 10 phút là bình thường. Nhưng khi oracle delay vượt quá ngưỡng an toàn, liquidator bot khai thác chênh lệch giá giữa giá on-chain và giá thực tế. Tôi đã audit 3 giao thức lending trong năm 2025, và phát hiện trung bình mỗi giao thức có ít nhất một lỗ hổng logic trong cơ chế giá tham chiếu. Dựa trên kinh nghiệm audit của tôi, vấn đề không nằm ở Chainlink hay LendFlow, mà nằm ở thiết kế hệ thống cho rằng oracle luôn chính xác.
Core
Tôi đọc hợp đồng thanh lý của LendFlow trên Etherscan. Hàm liquidate() gọi trực tiếp latestRoundData() từ Chainlink feed. Nếu round chưa kết thúc, nó trả về giá round cũ. Trong block 19746382, giá ETH trên Uniswap đã giảm 6%, nhưng oracle feed vẫn hiển thị giá cũ. Liquidator bot mượn USDC, gọi liquidate() ngay lập tức, thanh lý các vị thế vẫn an toàn theo giá thực tế. Họ kiếm được 2.3 triệu USD chênh lệch từ phí thanh lý 15% trên tài sản thế chấp.
Đây không phải lỗi của Chainlink. Đây là lỗi của giả định thiết kế: giá oracle luôn đại diện cho giá thị trường. Thực tế, mỗi oracle đều có độ trễ nhất định. Trong thị trường giảm, biến động mạnh và thanh khoản thấp khiến độ trễ này trở thành gót chân Achilles. Tôi đã viết báo cáo audit cho giao thức tương tự vào năm 2024 và đề xuất giải pháp hybrid: sử dụng TWAP 30 phút từ DEX làm giá tham chiếu phụ để cross-check trước khi thanh lý. Nhưng LendFlow không áp dụng.
Mở rộng ra, tôi xem xét thanh khoản on-chain của LendFlow. Pool USDC/ETH trên Arbitrum chỉ có 2.4 triệu USD thanh khoản sâu. Khi TVL giảm 40%, liquidator bot đã rút sạch thanh khoản khỏi pool để đẩy trượt giá, tạo chênh lệch lớn hơn. Đây là một vòng xoáy: thanh lý → giảm thanh khoản → chênh lệch giá → thanh lý nhiều hơn. Mô hình này được mô tả trong paper của tôi năm 2022 'DeFi Liquidity Cascades', nhưng ít team để ý.
Contrarian
Phe bò của LendFlow nói: thị trường giảm thì thanh lý là cơ chế bình thường. Họ đúng theo lý thuyết. Nhưng họ quên mất: thanh lý sai hơn 1% do oracle delay đã biến một biện pháp bảo vệ thành công cụ hủy diệt. Nếu giá ETH giảm 10% và oracle delay 2 giây, thanh lý diễn ra ở giá chỉ giảm 8%. Người dùng mất thêm 2% không cần thiết. Với đòn bẩy 10x, con số này nhân lên 20% tổng tài sản. Thị trường giảm không phải lý do để bỏ qua kiểm toán hệ thống. Thị trường giảm chính là lúc các lỗ hổng ẩn hiện ra.
Takeaway
Sau sự cố, LendFlow fork code của Aave và thêm cơ chế 'grace period' 30 giây trước thanh lý. Nhưng đã quá muộn. 40% TVL bay đi, uy tín mất. Câu hỏi đặt ra: bao nhiêu giao thức khác đang chơi trò cò quay với oracle delay? Hãy tự kiểm tra hợp đồng của bạn hôm nay. Đừng để một dòng code sai phá hủy cả hệ thống.