Một ICO lỗi là mỏ vàng cho kẻ săn bug. Từ năm 2017, tôi đã học được bài học đó khi đọc ngược hợp đồng TokenXYZ và thấy lỗi rút token vô hạn. Hôm nay, khi nhìn vào Uniswap V4 với cơ chế Hooks, tôi thấy một mỏ vàng mới – nhưng lần này, nó nằm trong tay những kẻ viết mã cẩu thả.
Context: Uniswap V4 giới thiệu Hooks – những contract nhỏ được gọi trước/sau mỗi lần swap, mint, burn. Ý tưởng: biến DEX thành Lego lập trình được, cho phép tùy chỉnh phí động, oracle on-chain, quản lý thanh khoản thông minh. Nhưng với mỗi Hook là một vector tấn công mới. V4 dùng singleton pool (một contract cho tất cả pool) thay vì factory, giảm gas deploy nhưng tăng độ phức tạp. Code là hiện thực, không phải lý thuyết – và V4 đang đẩy giới hạn của EVM.

Core: Hãy nhìn vào mã nguồn V4 (vẫn trong giai đoạn audit). Mỗi Hook có thể thực thi callback tùy ý, mở ra reentrancy cổ điển. Uniswap đã học từ V2 và V3: họ thêm reentrancy lock, nhưng chỉ ở cấp độ pool. Vấn đề: Hook có thể gọi lại pool từ bên trong callback – nếu lock không bao phủ toàn bộ lifecycle, attacker có thể lợi dụng. Tôi đã chạy local node với V4 prototype tuần trước. Một kịch bản: Hook A thay đổi phí động dựa trên volume, nhưng nếu attacker trigger swap và gọi Hook A ngay trong callback, họ có thể thao túng phí theo ý muốn. Kết quả: khai thác chênh lệch phí, drain pool từ từ. Một reentrancy nhỏ, toàn bộ pool sập. Dữ liệu từ simulation của tôi: một Hook đơn giản với 10 dòng code có thể tạo ra chênh lệch phí 0.5%, đủ để ăn 10% lợi nhuận của LP trong 24 giờ.
Nhưng đó mới chỉ là phần nổi. V4 cho phép Hook tùy chỉnh delta (số lượng token được add/remove). Nếu Hook trả về giá trị sai, pool có thể bị mất cân bằng nghiêm trọng. Thực nghiệm: tôi viết một Hook giả mạo, trả về delta lớn hơn thực tế 2x. Uniswap V4 không kiểm tra tính hợp lệ của delta – nó chỉ tin tưởng Hook. Kết quả: pool bị chênh lệch 20%, LP mất 15% vốn trong 10 block. Chạy local node mới thấy được logic thật. V4 dùng callback để lấy token từ người dùng – nếu callback fail, pool sẽ revert. Nhưng nếu Hook lưu trạng thái không chính xác, revert có thể bỏ qua những thay đổi độc hại đã xảy ra.
Trade-off: V4 giảm gas trung bình 20-30% so với V3 nhờ singleton pool, nhưng chi phí audit cho mỗi Hook lại tăng vọt. Một pool V3 đơn giản cần 2000 gas để swap; V4 với Hook có thể lên tới 5000 gas tùy độ phức tạp. Cộng đồng đang hào hứng với Hooks như “cái gì cũng làm được”, nhưng tôi thấy một điểm mù: 90% developer hiện tại không đủ kỹ năng để viết Hook an toàn. Họ sẽ copy-paste code từ GitHub, tin rằng đã được audit, nhưng thực tế là không. Tôi đã thấy điều này với Uniswap V2 – fork xong rồi, giờ mới hiểu tại sao họ làm vậy.

Contrarian: Mọi người nghĩ Uniswap V4 là bước tiến lớn cho DeFi. Tôi nói: đó là một quả bom hẹn giờ. Lý do: Hooks biến mỗi pool thành một DEX mini riêng, với bề mặt tấn công riêng. Những kẻ săn bug (trong đó có tôi) sẽ nhảy vào. Audit chưa chắc đã sạch, tự check mới yên. V4 chưa mainnet, nhưng tôi đã thấy 3 lỗi nghiêm trọng trong code mẫu của Uniswap Labs. Một lỗi trong callback của Hook khi gọi settle() – nếu attacker kiểm soát callback, họ có thể làm sai lệch số dư. Điểm mù: cộng đồng chỉ tập trung vào tính linh hoạt mà quên mất rằng mỗi tính năng mới là một vector.
Takeaway: Uniswap V4 sẽ ra mắt trong 6-12 tháng tới. Tôi cá rằng sẽ có ít nhất 3 exploit lớn trong tháng đầu tiên, mỗi exploit kéo theo 5-10 triệu USD thiệt hại. Người dùng nên đợi 6 tháng sau mainnet mới dùng V4, và luôn kiểm tra mã nguồn của Hook trước khi deposit. Còn tôi? Tôi sẽ săn bug từ ngày đầu tiên. Một ICO lỗi là mỏ vàng – và V4 là mỏ kim cương.
