Hook
Gần đây, tôi tình cờ xem qua một báo cáo phân tích kỹ thuật về một giao thức DeFi. Tất cả các mục đều ghi “N/A – không đủ thông tin”. Không có mã nguồn, không có thông số kỹ thuật, không có dữ liệu on-chain. Ở Mexico City, nơi tôi sống và làm việc, những báo cáo kiểu này xuất hiện ngày càng nhiều. Các nhà đầu tư vội vàng gửi cho tôi những file PDF dày cộp nhưng ruột rỗng, hy vọng tôi sẽ “đọc được điều gì đó”. Nhưng tôi không thể. Một phân tích không có dữ liệu thực chất chỉ là một tờ giấy trắng có chữ ký.
Context
Chúng ta đang sống trong thị trường tăng. Mọi thứ đều được tô hồng. Các dự án huy động hàng trăm triệu USD chỉ dựa trên whitepaper và đội ngũ có tên tuổi. Nhưng khi tôi – một Smart Contract Architect với hơn 8 năm audit thủ công – nhìn vào code, tôi thấy những điều khác. Đặc biệt là các giao thức lending. Trong những năm gần đây, thị trường DeFi đã chứng kiến sự bùng nổ của các nền tảng cho vay với lãi suất hấp dẫn. Nhưng cơ chế thanh lý – trái tim của bất kỳ lending protocol nào – thường bị xem nhẹ. Năm 2020, khi làm việc với Aave v2, tôi đã phát hiện một lỗi trong logic cập nhật lãi suất khi thanh khoản thay đổi đột ngột. Sau 3 tháng phân tích, tôi gửi báo cáo 30 trang. Họ vá lỗi ngay. Nhưng không phải ai cũng may mắn như vậy.
Core
Hãy nhìn vào cách mà hầu hết các lending protocol thiết kế cơ chế thanh lý. Công thức cơ bản: khi giá trị tài sản thế chấp giảm xuống dưới một ngưỡng nhất định (thường là 150% so với khoản vay), bất kỳ ai cũng có thể thanh lý vị thế. Nhưng điều gì xảy ra khi thanh khoản khan hiếm? Khi thị trường giảm mạnh, nhiều vị thế cùng lúc rơi vào trạng thái có thể thanh lý. Các bot thanh lý đua nhau mua tài sản thế chấp với giá chiết khấu. Nhưng nếu thanh khoản của tài sản đó trên DEX thấp, giá sẽ trượt dốc, khiến việc thanh lý trở nên không hiệu quả. Và nếu một vị thế không được thanh lý kịp thời, giao thức sẽ rơi vào nợ xấu.
Năm 2022, tôi phân tích một giao thức lending nhỏ trên Avalanche. Code của nó sao chép gần như hoàn hảo từ Compound. Nhưng có một khác biệt: trong hàm liquidate, họ quên kiểm tra giá trị thế chấp tối thiểu sau khi thanh lý. Điều này có nghĩa là một thanh lý viên có thể chỉ mua 1% nợ, nhận toàn bộ tài sản thế chấp, và để lại phần còn lại – giao thức phải chịu lỗ. Tôi báo cáo, dự án sửa ngay. Nhưng có bao nhiêu dự án khác còn sơ hở?
Chìa khóa nằm ở điều kiện biên. Khi thiết kế cơ chế thanh lý, hầu hết các team chỉ kiểm tra các trường hợp “bình thường”. Họ không mô phỏng kịch bản cực đoan: giá giảm 90% trong 10 phút, thanh khoản DEX cạn kiệt, gas price tăng vọt. Tôi thường gọi đây là “stress test giả định”. Trong môi trường thị trường tăng, những kịch bản này dường như xa vời. Nhưng khi thị trường đảo chiều, chúng trở thành hiện thực.
Tôi vẫn nhớ bài học Terra năm 2022. Ngày 3 tháng 5, tôi viết một thread chỉ ra rằng nếu thanh khoản LUNA giảm dưới 2 tỷ USD, thuật toán ổn định sẽ sụp đổ. Hầu hết cho rằng tôi bi quan. Sáu ngày sau, sự kiện xảy ra. Điều đó củng cố niềm tin của tôi: không có phân tích nào có giá trị nếu thiếu dữ liệu thực tế và kịch bản stress.
Contrarian
Điều kỳ lạ là: trong thị trường tăng, các nhà đầu tư thường yêu cầu tôi “phân tích” những dự án mà họ định đầu tư. Họ mang đến những báo cáo đầy màu sắc với biểu đồ và số liệu từ CoinGecko. Nhưng khi tôi hỏi “code đâu?”, họ nhìn tôi như thể tôi hỏi một câu kỳ lạ. “Code thì có gì để xem? Dự án đã audit rồi.” Đây là một điểm mù lớn. Audit không phải là chứng nhận an toàn. Nó chỉ là một bức ảnh chụp tại một thời điểm nhất định. Kể từ khi audit, code đã thay đổi, hoặc các điều kiện thị trường đã thay đổi. Tôi đã từng thấy một giao thức được audit bởi ba công ty khác nhau, nhưng vẫn bị hack vì một lỗi trong logic oracle – thứ mà audit viên không kiểm tra kỹ vì nó “hiển nhiên”.
Một góc nhìn khác: sự phát triển của Layer 2. Hàng chục L2 ra đời, nhưng lượng người dùng cơ sở giống nhau. Đây không phải là scaling, mà là cắt nhỏ thanh khoản vốn đã khan hiếm. Mỗi L2 có một cây cầu riêng, một bộ oracle riêng, và một cộng đồng riêng. Nếu một lending protocol triển khai trên nhiều L2, thanh khoản bị phân mảnh, cơ chế thanh lý trở nên kém hiệu quả hơn. Bạn không thể dùng thanh khoản từ Arbitrum để thanh lý vị thế trên Optimism. Và nếu một L2 gặp sự cố (ví dụ: sequencer ngừng hoạt động), toàn bộ vị thế trên đó trở nên mắc kẹt.
Takeaway
Bài học từ những báo cáo trống rỗng: đừng bao giờ tin vào một phân tích mà không có dữ liệu gốc. Hãy tự mình kiểm tra code, mô phỏng kịch bản xấu nhất, và luôn đặt câu hỏi: “Điều gì sẽ xảy ra nếu giá giảm 90% trong 10 phút?” Nếu dự án không thể trả lời, đó là tín hiệu đỏ. Trong thị trường tăng, rủi ro không biến mất – nó chỉ ngủ yên. Và khi nó thức dậy, nó thường quá muộn để phản ứng.
Prompt hình minh họa: Một biểu đồ giá giảm mạnh với dòng chữ “Stress Test” in đậm, phía dưới là một đoạn code Solidity bị gạch đỏ, nền tối với ánh sáng đỏ cảnh báo.