Một dòng code thừa. Bảy dòng thiếu. Đó là tất cả những gì ngăn cách một giao thức an toàn với một vụ khai thác 5 triệu USD.
Thị trường đi ngang. Khối lượng giao dịch giảm. Các đội ngũ tập trung vào marketing, airdrop, và xây dựng cộng đồng. Lập trình viên chính của dự án chuyển sang nhiệm vụ khác. Hợp đồng thông minh bị bỏ quên trong nhiều tháng.
Chính xác là lúc các lỗ hổng ẩn náu.
Tôi đã kiểm toán hơn 200 dự án DeFi trong 5 năm qua. Mỗi lần kiểm toán là một lần tôi đặt câu hỏi: "Tại sao lỗi này tồn tại lâu đến vậy?" Câu trả lời thường đến từ một sự thật phản trực giác: thị trường sôi động che giấu lỗi, nhưng thị trường trầm lắng mới là nơi chúng thực sự phát triển.
Hook: Một case study không tên
Đầu năm 2023, tôi nhận kiểm toán một AMM nhỏ trên Arbitrum. Dự án đã hoạt động được 8 tháng, TVL dưới 1 triệu USD. Đội ngũ 3 người, toàn bộ tập trung vào việc gọi vốn cho vòng tiếp theo. Hợp đồng gốc được fork từ Uniswap V2, nhưng họ đã thêm một tính năng: phí giao dịch được tái đầu tư tự động vào pool thanh khoản.
Tôi đọc mã nguồn trong hai ngày. Tìm thấy một lỗi trong logic tính phí tích lũy – tương tự lỗi tôi đã tìm ra ở Bancor năm 2017. Nhưng lần này, lỗi nằm ở dòng thứ 47 của file FeeManager.sol: biến accumulatedFee được cập nhật trước khi trừ đi số dư thực tế. Kết quả: bất kỳ ai cũng có thể gọi hàm collectFee() nhiều lần, rút toàn bộ phí chưa được phân bổ.
Tôi báo cáo cho đội ngũ. Họ ngạc nhiên. "Chúng tôi đã audit bởi một công ty khác trước khi launch," họ nói. Vấn đề: bản audit đó được thực hiện khi thị trường bullish – đội ngũ audit có thể đã bỏ qua lỗi này vì áp lực thời gian.
Context: Cơ chế của sự im lặng
Thị trường đi ngang không chỉ ảnh hưởng đến giá token. Nó ảnh hưởng đến hành vi của đội ngũ phát triển. Khi không có áp lực tăng trưởng TVL hay token pump, họ có xu hướng:
- Giảm tần suất cập nhật smart contract – "Nếu nó không hỏng, đừng sửa."
- Chuyển nguồn lực sang các hoạt động phi kỹ thuật – marketing, partnership, fundraising.
- Co lại quy mô đội ngũ – nhà phát triển chính rời đi, chỉ để lại junior dev bảo trì.
Theo logic đó, lỗ hổng càng có nhiều thời gian để "chín". Mỗi ngày trôi qua mà không có ai kiểm tra lại logic, rủi ro tích lũy.
Nhưng tại sao các auditor cũng bỏ qua? Bởi vì chính họ cũng bị ảnh hưởng. Khi thị trường đi ngang, nhu cầu audit giảm, các công ty audit phải cạnh tranh, chạy theo số lượng, giảm chất lượng. Tôi thấy đồng nghiệp của mình kiểm toán một dự án trong 3 ngày thay vì 2 tuần. Kết quả: bỏ sót lỗi cơ bản.
Core: Phân tích kỹ thuật sâu – bẫy trong logic tính phí
Lỗi tôi tìm thấy trong dự án AMM đó là một dạng lỗi reentrancy tinh vi. Không phải reentrancy cổ điển (gọi lại hàm), mà là reentrancy do thứ tự cập nhật trạng thái không đúng.