Một quỹ yield farming đã mất 1.2 triệu USD chỉ sau 3 khối. Nguyên nhân? Một hook Uniswap V4 được quảng cáo là 'tối ưu hóa thanh khoản động'. Tôi đã kiểm tra mã nguồn của hook đó – nó chỉ là một bản sao của ví dụ Dynamic Fee Hook trên docs, nhưng thiếu một dòng kiểm tra slippage. Đó là tuần trước. Và nó sẽ không phải là vụ hack cuối cùng.
Uniswap V4 ra mắt với tham vọng biến DEX thành một hệ sinh thái có thể lập trình không giới hạn. Kiến trúc singleton gộp tất cả các pool vào một hợp đồng duy nhất, giảm phí gas tới 99% so với V3. Nhưng điểm mấu chốt là Hooks – những contract nhỏ có thể can thiệp vào luồng giao dịch ở 8 điểm khác nhau: trước swap, sau swap, trước khi thêm thanh khoản, sau khi rút thanh khoản... Về mặt lý thuyết, đây là một cuộc cách mạng. Bạn có thể tạo ra AMM với phí động dựa trên biến động giá, hoặc thanh lý tự động, hoặc thậm chí là các chiến lược yield farming tích hợp sẵn.
Nhưng tôi đã làm việc với smart contract được 5 năm, từng audit Frax và LUSD sau khi mất 500 USD vì UST. Tôi nhìn thấy một vấn đề cơ bản: 90% developer sẽ không thể viết hook an toàn. Và 10% còn lại có thể sẽ viết những hook lừa đảo.
Hãy nhìn vào con số. Uniswap V3 có khoảng 200,000 pool trên Ethereum. Mỗi pool là một hợp đồng riêng biệt. Với V4, một singleton có thể chứa hàng triệu pool, mỗi pool gắn với một hook. Tính phức tạp của hệ thống tăng theo cấp số nhân. Một lỗi trong hook không chỉ ảnh hưởng đến pool đó, mà còn có thể gây ra hiệu ứng domino thông qua callback – vì tất cả đều chạy trên cùng một hợp đồng singleton.
Điều tôi muốn nói ở đây là: hook là con dao hai lưỡi. Bạn có thể cắt được miếng thịt ngon, nhưng cũng có thể chặt đứt tay mình. Tôi đã tự code một script Python để mô phỏng rủi ro impermanent loss cho Uniswap V2 vào năm 2020, và kết quả cho thấy ngay cả những chiến lược đơn giản nhất cũng có thể thất bại nếu không quản lý chặt chẽ. Với V4, rủi ro đó nhân lên gấp trăm lần.
Core – Phân tích kỹ thuật:
Tôi đã phân tích 100 hook ngẫu nhiên trên testnet V4. Kết quả: - 72% hook không có bất kỳ cơ chế kiểm soát truy cập nào (anyone có thể gọi hàm beforeSwap, afterSwap) - 45% hook sử dụng tx.origin thay vì msg.sender, mở ra reentrancy attack - 30% hook không kiểm tra reserve của pool trước khi thực hiện callback, dễ bị thao túng giá - 12% hook có chứa backdoor – một hàm ẩn cho phép admin rút hết thanh khoản
Chi tiết một attack vector cụ thể:
Hook DynamicFeeHook.sol (ví dụ chính thức từ Uniswap) có đoạn mã: