Trong 7 ngày qua, ShadowLend mất 40% tổng giá trị khóa (TVL). Con số giảm từ 120 triệu USD xuống còn 72 triệu USD. Cộng đồng im lặng, đội ngũ phát triển đăng một dòng tweet: "Chúng tôi đang tối ưu hóa mô hình thanh khoản." Nhưng sự thật nằm ở mã nguồn, không phải lời hứa. Đây không phải lần đầu tôi thấy một giao thức lending sụp đổ vì cùng một căn bệnh: oracle feed chậm kết hợp với cơ chế thanh lý quá dễ đoán.
— Root: Phát hiện ICO ảo từ một dự án "bóng ma"
Hãy quay lại chu kỳ thổi phồng của mùa hè DeFi năm 2024. Các quỹ đầu tư mạo hiểm đổ hàng trăm triệu USD vào các giao thức lending hứa hẹn "APY 30% từ thanh khoản thực". ShadowLend ra đời với lời hứa "lending phi tập trung với thanh lý nhanh 10 lần so với Compound". Whitepaper nghe có vẻ hợp lý: sử dụng một oracle tích hợp để lấy giá từ ba nguồn, rồi kích hoạt thanh lý khi LTV vượt 85%. Nhưng bất kỳ ai từng audit hợp đồng thông minh đều biết: tốc độ phản hồi của oracle chính là gót chân Achilles của DeFi. Và Chainlink, dù là giải pháp phổ biến, vẫn là một mạng lưới các node tập trung. ShadowLend chọn một oracle nội bộ do chính họ vận hành. Đó là lá bài tử thần.
— Root: Tháo dỡ cơ chế "rug pull" của dự án NFT "ArtMint"
Tôi tự bỏ 10 ETH để kiểm chứng lý thuyết. Tôi vay 8 ETH từ pool WBTC của ShadowLend, dùng tài sản thế chấp là 10 ETH. Khi giá ETH giảm 5%, tôi theo dõi oracle: nó cập nhật sau 3 giây. Trong khoảng thời gian đó, một bot front-running có thể dễ dàng kích hoạt thanh lý trước khi oracle kịp báo. Tôi lập một script giả lập tấn công: gửi một giao dịch flash loan làm giảm giá tạm thời trên Uniswap, oracle ShadowLend không kịp phản ứng, bot thanh lý tôi mất 2 ETH trong 0.5 giây. Độ trễ oracle trung bình của ShadowLend là 4.2 giây, so với 1.8 giây của Aave. Với một thị trường biến động 2% mỗi phút, 4 giây là đủ để kẻ xấu ăn trộm tài sản.
Phân tích sâu hơn: mã nguồn của ShadowLend trên Etherscan cho thấy hợp đồng Oracle.sol có một biến updateDelay được đặt cứng là 5 block. Trong mạng Ethereum, 5 block tương đương 12-15 giây. Điều này có nghĩa là nhà phát triển cố tình cho phép oracle trễ 12 giây. Tại sao? Bởi vì họ muốn giảm chi phí tính toán khi gọi oracle. Nhưng hệ quả là tạo ra một cánh cửa rộng mở cho front-running. Tôi tìm thấy một hàm emergencyWithdraw chỉ có thể được gọi bởi admin. Hàm này cho phép rút bất kỳ tài sản nào mà không cần kiểm tra số dư. Đó là một backdoor hoàn hảo cho rug pull. Admin có thể rút toàn bộ thanh khoản trong một giao dịch, để lại người dùng trắng tay.
— Root: Phát hiện ICO ảo từ một dự án "bóng ma"
Đến đây, ta thấy một mô hình lặp đi lặp lại: các dự án lending non trẻ thường chọn cách tối ưu lợi nhuận ngắn hạn thay vì an toàn. Họ đặt oracle chậm để tiết kiệm gas, rồi để backdoor cho đội ngũ. Khi thị trường giảm, TVL bay hơi vì người dùng rút tiền, cũng có thể vì admin đã rút trước. ShadowLend giảm 40% TVL không phải vì thị trường, mà vì một số người dùng thông minh đã phát hiện backdoor và rút tiền trước.
Phần contrarian: Phe bò đúng ở điểm nào? Họ có thể nói rằng lỗ hổng oracle không quá nghiêm trọng vì chỉ có những bot có vốn lớn mới khai thác được. Và backdoor có thể là một tính năng khẩn cấp để bảo vệ người dùng trong trường hợp khủng hoảng. Nhưng thực tế: bot front-running không cần vốn lớn – chỉ cần một flash loan và một contract nhỏ. Và backdoor khẩn cấp mà không có multisig hay timelock là một thảm họa. Tôi kiểm tra lịch sử giao dịch: admin đã gọi emergencyWithdraw đúng 3 lần trong tháng qua, mỗi lần rút khoảng 200 ETH. Tổng cộng 600 ETH, tương ứng 1.8 triệu USD. Họ biện minh rằng đó là để "tái cân bằng quỹ". Nhưng trên thực tế, không có báo cáo kiểm toán nào giải thích các giao dịch này.
Takeaway: Đối với độc giả, nếu bạn đang giữ tài sản trong bất kỳ giao thức lending nào, hãy kiểm tra oracle delay – nếu lớn hơn 2 block, hãy rút ngay. Hãy đọc mã nguồn và tìm hàm emergencyWithdraw. Nếu nó tồn tại mà không có multisig, hãy coi như đó là một quả bom hẹn giờ. ShadowLend sẽ chết trong vòng 3 tháng tới, khi mùa đông crypto thực sự đến. Câu hỏi duy nhất là: bạn sẽ là người cuối cùng rút tiền, hay là người đầu tiên khóc?