Hook: Một dòng code 'vô hại' đã làm sập giao thức
Nếu bạn đọc kỹ whitepaper của hầu hết các giao thức DeFi, bạn sẽ thấy một điểm chung: chúng đều hứa hẹn một hệ thống 'phi tập trung', 'minh bạch' và 'an toàn'. Nhưng trong thực tế audit của tôi, tôi đã fork repo và phát hiện ra rằng, ẩn sâu trong những dòng code tưởng chừng như vô hại, là những giả định tin cậy chết người. Hãy lấy một ví dụ điển hình: một giao thức lending mà tôi đã audit vào năm 2022. Mọi thứ trên whitepaper đều hoàn hảo: mô hình lãi suất động, oracle được chọn lọc kỹ càng, quy trình thanh lý tự động. Nhưng khi nhìn vào merkle tree của contract, tôi thấy một điều kỳ lạ. Có một hàm updateInterestRates() không có bất kỳ access control nào. Bất kỳ ai cũng có thể gọi nó, và nếu bị tấn công, lãi suất có thể bị đẩy lên vô cùng, gây ra thanh lý hàng loạt. Đây là một lỗ hổng 'kinh điển' mà ngay cả những dự án lớn cũng mắc phải.
Context: Bối cảnh của sự 'quá tin tưởng'
Thị trường đang trong giai đoạn giảm, và điều này khiến các nhà đầu tư càng trở nên hoảng loạn. Họ tìm đến những giao thức có vẻ ngoài 'an toàn' nhất, dựa trên whitepaper dày cộp và các bài blog giới thiệu đầy tính thuyết phục. Nhưng sự thật là, bảo mật trong DeFi không nằm ở whitepaper, mà nằm ở code. Và code thì thường có những điểm mù. Trong bối cảnh này, tôi thấy có một sự bất thường về mặt dữ liệu: TVL của một số giao thức vẫn tăng đều đặn, bất chấp thị trường giảm. Điều này nghe có vẻ tích cực, nhưng với một security auditor, đó là một dấu hiệu đỏ. Khi dòng tiền đổ vào quá nhanh, rủi ro sẽ tăng lên, bởi vì các cơ chế bảo vệ vốn có sẽ bị thử thách.
Core: Phân tích kỹ thuật - Code nói lên tất cả
Đây là những gì code thực sự nói, và nó khác xa so với những gì whitepaper tuyên bố. Tôi lấy ví dụ về một giao thức yield aggregator nổi tiếng. Whitepaper của họ nói rằng họ sử dụng một 'chiến lược đầu tư thông minh' để tối ưu hóa lợi nhuận. Nhưng khi tôi đọc contract, tôi thấy chiến lược đó thực chất chỉ là một hardcode: nó luôn chuyển tiền vào một pool duy nhất, bất kể điều kiện thị trường. Điều này có nghĩa là nếu pool đó bị tấn công, toàn bộ tiền của người dùng sẽ mất sạch.
Một điểm mù khác mà tôi thường gặp là về Oracle. Các giao thức thường tuyên bố sử dụng 'oracle phi tập trung', nhưng thực tế code lại chỉ gọi một single source. Báo cáo audit tiết lộ điều thú vị: nhiều dự án dùng Uniswap TWAP làm oracle, nhưng lại quên mất rằng nếu thanh khoản của Uniswap thấp, giá có thể bị thao túng dễ dàng. Tôi đã từng viết một thread 15 phần về giả định tin cậy của LayerZero, và một trong những điểm tôi nhấn mạnh là: 'Giả định tin cậy' mà họ đang đặt ra không phải là về công nghệ, mà là về sự trung thực của những người vận hành oracle. Một lần nữa, đây là một vấn đề về 'con người' trong một hệ thống được quảng cáo là 'không cần tin tưởng'.
Ngoài ra, vấn đề về Access Control là một lỗi phổ biến. Tôi đã từng thấy một contract cho phép bất kỳ ai cũng có thể gọi hàm rút tiền khẩn cấp (emergency withdraw). Ý tưởng là để ứng phó với tấn công, nhưng thực tế nó tạo ra một lỗ hổng nghiêm trọng: kẻ tấn công cũng có thể gọi nó để rút tiền của người khác.
Contrarian: Điểm mù của chính cộng đồng audit
Góc nhìn phản trực giác ở đây là: không phải lúc nào lỗi cũng nằm ở code. Đôi khi, chính quy trình audit cũng có vấn đề. Nhiều dự án thuê nhiều công ty audit cùng lúc, nhưng các công ty này lại không chia sẻ kết quả với nhau. Kết quả là, mỗi công ty chỉ nhìn thấy một phần của bức tranh, và lỗ hổng tổng thể vẫn tồn tại. Tôi gọi đây là 'audit fatigue' - sự mệt mỏi vì audit, khi các dự án coi audit như một tấm vé thông hành, chứ không phải là một quá trình liên tục.
Hơn nữa, có một sự thật phũ phàng: audit chỉ là một bức ảnh chụp nhanh tại một thời điểm. Code có thể thay đổi sau khi audit, và đó là lúc rủi ro thực sự xuất hiện. Nhiều dự án sau khi audit đã thêm vào các tính năng mới, nhưng lại không audit lại. Đây là lý do tại sao tôi luôn khuyên các nhà đầu tư nên kiểm tra lịch sử commit của contract, chứ không chỉ dựa vào báo cáo audit.
Takeaway: Làm thế nào để sống sót qua thị trường giảm?
Trong bối cảnh này, câu hỏi không phải là 'giao thức nào đang tăng trưởng tốt?', mà là 'giao thức nào đang chảy máu?' Hãy nhìn vào dữ liệu: nếu TVL giảm nhưng số lượng người dùng lại tăng, đó có thể là dấu hiệu của một vụ tấn công sybil. Nếu lợi nhuận đột nhiên tăng vọt, hãy nghi ngờ có điều bất thường xảy ra trong hợp đồng.
Tôi sẽ không nói rằng hãy rút hết tiền khỏi DeFi. Điều đó là phi thực tế. Nhưng tôi sẽ nói rằng: hãy tự mình kiểm tra code. Nếu bạn không thể, hãy tìm những người có thể. Và hãy nhớ rằng, trong thế giới này, 'tin tưởng nhưng kiểm tra' không còn đủ nữa. Hãy kiểm tra, và rồi kiểm tra lại. Bởi vì một dòng code nhỏ cũng có thể khiến bạn mất tất cả.