Ba ngày trước, tôi mở Dune Analytics để kiểm tra số liệu thanh khoản của một giao thức lending mà tôi từng audit. Con số khiến tôi dừng lại: tổng TVL giảm 40% chỉ trong 7 ngày. Không phải do exploit, không phải do rug pull. Đơn giản là LP đã rút hết thanh khoản. Tôi bắt đầu đào sâu vào mã nguồn và phát hiện một lỗi thiết kế trong cơ chế khuyến khích mà hầu hết mọi người bỏ qua. Đây là câu chuyện về cách một tham số tưởng chừng vô hại có thể giết chết một giao thức trong thị trường giảm.
Cơ chế gốc: Giao thức này sử dụng mô hình "khoá token để nhận phần thưởng" – điển hình của các DeFi 2020. Khi thị trường tăng, mọi người khoá token vì kỳ vọng giá lên. Nhưng khi thị trường giảm, giá token giảm, phần thưởng bằng token cũng mất giá trị. LP bắt đầu tính toán: nếu chi phí cơ hội (opportunity cost) của việc khoá lớn hơn lợi nhuận kỳ vọng, họ sẽ rút. Điều này xảy ra ở hầu hết các giao thức. Nhưng ở đây, vấn đề nằm ở tham số "thời gian khoá tối thiểu" được đặt quá ngắn – chỉ 3 ngày. Điều này tạo ra một vòng xoáy tử thần: khi giá giảm, LP rút ồ ạt, thanh khoản giảm, giá càng giảm, LP càng rút.
Tôi kiểm tra mã nguồn hợp đồng staking (StakingPool.sol). Logic có vẻ ổn – không có reentrancy, không có lỗi số học. Nhưng vấn đề nằm ở chỗ không có cơ chế "cooldown" hoặc "penalty" khi rút sớm. Trong thị trường giảm, việc không có phạt rút sớm giống như mở cửa cho tất cả thoát ra cùng lúc. Dựa trên kinh nghiệm audit của tôi, đây là lỗi thiết kế phổ biến ở các giao thức non-custodial. Họ quá tập trung vào trải nghiệm người dùng (không khoá) mà quên mất tính ổn định của thanh khoản. Kết quả: TVL từ 45 triệu USD rơi xuống 27 triệu USD trong 7 ngày.
Điểm mù bảo mật ở đây không phải là mã nguồn, mà là kinh tế học giao thức. Tôi đã từng phân tích sự sụp đổ của Terra năm 2022 – lỗi tương tự: thiết kế arbitrage không có biện pháp chống sốc. Ở giao thức này, họ có thể tránh được nếu thêm một lớp "khoá tối thiểu 7 ngày" kèm penalty 10% khi rút sớm. Nhưng họ đã không làm, vì sợ mất người dùng. Kết quả là mất tất cả.
Trong thị trường giảm, sống sót quan trọng hơn lợi nhuận. Bài học: đừng bao giờ đặt tham số khoá quá ngắn nếu bạn không có cơ chế kiểm soát thanh khoản. Mã tốt tự nói lên tất cả – nhưng mã tốt cũng cần được thiết kế cho cả thị trường gấu. Nếu bạn đang hold token của một giao thức, hãy kiểm tra tham số khoá. Nếu thấy thời gian khoá dưới 7 ngày mà không có penalty, hãy rút ngay. Đừng để lịch sử lặp lại.