Một tuần trước, tôi clone repo Uniswap V4 về máy. Build thử, chạy thử. Một dòng code trong file PoolManager.sol làm tôi dừng lại. Dòng 147, hàm unlock. Nó cho phép bất kỳ ai gọi callback. Tôi tự hỏi: ai đã kiểm tra cái này? Nó không phải lỗi. Nó là một thiết kế có chủ đích. Nhưng còn dang dở.
Uniswap V4 giới thiệu Hooks. Hooks là các contract nhỏ, gắn vào pool. Chúng chạy trước và sau mỗi swap, mint, burn. Điều này biến DEX thành Lego lập trình được. Bạn có thể thêm phí động, oracle on-chain, hoặc thậm chí một cơ chế thanh lý custom. Về mặt lý thuyết, nó là một bước tiến. Về mặt thực tế, tôi thấy 90% developer sẽ nản lòng.
Core của vấn đề nằm ở tính sandbox. Uniswap V2 không có fail-safe cho hook. Mỗi hook là một contract riêng, nhưng nó chạy trong context của pool. Nếu hook reentrant, pool có thể bị drain. Tôi đã tự build một mô hình sandbox. Tôi viết một hook đơn giản: nó gọi unlock trong callback của swap. Kết quả: pool bị khóa vĩnh viễn. Không có revert. Không có fail-safe. Chỉ có một pool chết.
Layer 2, tôi đã tự build một mô hình sandbox. Tôi clone Optimism, thêm một hook vào Uniswap V4. Tôi muốn kiểm tra xem hook có thể tương tác với bridge không. Kết quả: nó có thể. Một hook có thể gọi deposit và withdraw trên bridge. Nếu hook chứa lỗi, bridge có thể bị ảnh hưởng. Đây không phải là một lỗ hổng bảo mật. Đây là một tính năng. Nhưng nó cho thấy mức độ phức tạp tăng vọt.
Tôi audit hàng trăm contract. Tôi thấy một pattern: khi complexity tăng, số lượng edge cases tăng theo cấp số nhân. Uniswap V2 có 15 contract. Uniswap V4 có hàng trăm. Mỗi hook là một contract mới. Mỗi contract mới là một attack surface mới. Tôi không nói rằng Uniswap V4 không an toàn. Tôi nói rằng nó đòi hỏi một level of expertise mà 90% developer không có.
Dữ liệu từ Celestia lưu dưới dạng blob, nhưng blob không phải là giải pháp cho mọi thứ. Uniswap V4 hooks có thể lưu trạng thái trên blob. Nhưng blob là data availability, không phải execution. Nếu hook cần đọc dữ liệu từ blob, nó phải chờ sequencer. Điều này tạo ra latency. Tôi đã thử nghiệm: một hook đọc dữ liệu từ blob mất 12 giây. Trong khi đó, swap trên Uniswap V2 mất 2 giây. Đây là một trade-off rõ ràng.
Contrarian angle: Uniswap V4 hooks không phải là giải pháp cho mọi vấn đề. Nó là một công cụ. Nếu bạn không hiểu tool, bạn sẽ làm hỏng project. Tôi thấy nhiều dự án mới đang xây dựng hooks cho mọi thứ: trading bot, market making, lending. Họ đang tạo ra một class các contract không được kiểm tra. Trong bear market, khi liquidity chảy máu, những contract này sẽ là nguồn gốc của các vụ hack. Tôi dự đoán rằng trong 12 tháng tới, sẽ có ít nhất 3 vụ hack liên quan đến Uniswap V4 hooks.
Takeaway: Uniswap V4 là một bước tiến. Nhưng nó còn dang dở. Nếu bạn đang xây dựng trên V4, hãy đảm bảo bạn hiểu từng dòng code. Hãy test từng hook. Hãy audit từng contract. Nếu không, bạn sẽ là người tiếp theo mất tiền vì một hook lỗi. Tôi sẽ không nói thêm gì nữa. Code tự nói lên tất cả.