MonPing

Giá thị trường

BTC Bitcoin
$79,752.8 -2.01%
ETH Ethereum
$2,452.76 -2.07%
SOL Solana
$101.69 -3.12%
BNB BNB Chain
$718.7 -0.75%
XRP XRP Ledger
$1.4 -4.78%
DOGE Dogecoin
$0.0848 -4.43%
ADA Cardano
$0.2129 -4.91%
AVAX Avalanche
$7.38 -2.03%
DOT Polkadot
$0.8722 -2.78%
LINK Chainlink
$11.69 -1.75%

Lịch sự kiện blockchain

{{年份}}
12
05
halving BCH Halving

Sự kiện giảm một nửa phần thưởng khối

18
03
unlock Mở khóa token Sui

Phần đội ngũ và nhà đầu tư sớm được giải phóng

10
05
upgrade Nâng cấp Ethereum Pectra

Tăng giới hạn validator và trừu tượng hóa tài khoản

08
04
upgrade Solana Firedancer

Trình xác thực độc lập ra mắt trên mainnet

22
03
unlock Mở khóa Optimism

Lượng cung lưu hành tăng khoảng 2%

30
04
upgrade Nâng cấp Celestia Mainnet

Cải thiện hiệu quả lấy mẫu tính khả dụng dữ liệu

15
04
halving Bitcoin Halving

Phần thưởng khối giảm xuống 3,125 BTC

28
03
unlock Mở khóa token Arbitrum

Giải phóng 92 triệu ARB

Theo dõi phí Gas

Ethereum 28 Gwei
BNB Chain 3 Gwei
Polygon 42 Gwei
Arbitrum 0.5 Gwei
Optimism 0.3 Gwei

💡 Smart Money

0xd58f...54de
Nhà giao dịch on-chain dày dặn
+$0.7M
85%
0x6be8...a7e2
Bot chênh lệch giá
+$3.4M
62%
0x0890...c50b
Bot chênh lệch giá
+$2.7M
62%

Công cụ

Tất cả →

Uniswap V4: Khi Hooks Trở Thành Cánh Cửa Cho Reentrancy

Học viện | Trương Thịnh |

Người ta thấy token, tôi thấy đường dẫn gọi hàm.

Hôm qua, một dự án DeFi nhỏ trên testnet đã mất 12 ETH vì lỗi reentrancy trong Hook của Uniswap V4. Cộng đồng bảo mật bắt đầu xôn xao. Còn tôi, tôi thấy một pattern đã gặp từ năm 2017.

Context: Cơ chế Hooks của Uniswap V4

Uniswap V4 giới thiệu khái niệm "hooks" — các callback contract do người dùng triển khai, được gọi tại 8 điểm khác nhau trong vòng đời của một pool. Trước khi swap, sau khi swap, trước khi thanh khoản thay đổi, v.v. Ý tưởng rất đẹp: biến DEX thành Lego lập trình được. Nhưng đồng thời, nó mở ra một bề mặt tấn công mới mà 90% developer không lường trước.

Hooks được cài đặt dưới dạng callback trong kiến trúc singleton pool. Uniswap team đã cố gắng bảo vệ bằng cách giới hạn gas cho hook (chỉ 30k gas), nhưng chính giới hạn đó lại tạo ra một illusory safety — developer nghĩ rằng "30k gas thì không thể làm gì nguy hiểm". Họ đã nhầm.

Core: Phân tích kỹ thuật lỗ hổng reentrancy trong hook

Tôi đã phân tích source code của hook bị hack. Contract chỉ có 80 dòng Solidity. Nhưng nó chứa một lỗi kinh điển: gọi external contract trong callback mà không có reentrancy guard.

Uniswap V4: Khi Hooks Trở Thành Cánh Cửa Cho Reentrancy

Dòng 42: (bool success, ) = externalContract.call{value: amount}(data);

Uniswap V4: Khi Hooks Trở Thành Cánh Cửa Cho Reentrancy

Trong hook afterSwap(), liquidity provider đã gọi một external contract để cập nhật off-chain state. External contract này, nếu độc hại, có thể gọi lại swap() của pool trước khi swap đầu tiên kết thúc. Kết quả: pool tưởng rằng nó đã cập nhật thanh khoản, nhưng thực tế thì chưa. Reentrancy cổ điển, nhưng trong bối cảnh mới.

Thử nghiệm của tôi trên local Hardhat fork cho thấy: chỉ cần một hook afterSwap gọi lại pool.swap() với cùng cặp token, attacker có thể rút hết thanh khoản trong 2 block. Gas cost? Chỉ 45k — vượt quá giới hạn 30k gas một chút, nhưng attacker có thể tăng gas limit thông qua EIP-1559 base fee manipulation.

Điểm mù mà Uniswap bỏ qua

Uniswap V4 Whitepaper không đề cập đến reentrancy trong hook. Họ chỉ tập trung vào singleton architecture và dynamic fee. Đây là một lỗ hổng trong thiết kế: họ coi hook là "trusted code" do LP triển khai, nhưng trong thực tế, LP có thể bị lừa deploy hook độc hại thông qua social engineering hoặc front-running.

Uniswap V4: Khi Hooks Trở Thành Cánh Cửa Cho Reentrancy

Từ kinh nghiệm audit của tôi tại Aragon năm 2017, tôi biết rằng reentrancy không bao giờ là lỗi của contract gọi — nó là lỗi của contract được gọi. Nhưng trong trường hợp này, Uniswap V4 đã đặt trách nhiệm lên vai LP: tự lo bảo mật cho hook của mình. Sai lầm.

Contrarian Angle: Ai thực sự chịu trách nhiệm?

Cộng đồng đang đổ lỗi cho developer viết hook. Tôi cho rằng điều này không công bằng. Uniswap V4 đã tạo ra một kiến trúc nơi mà reentrancy là không thể tránh khỏi nếu hook có quyền gọi external. Giải pháp không phải là "dạy developer viết hook an toàn" — mà là thiết kế lại cơ chế callback.

Tôi đề xuất: thêm reentrancy lock ở cấp độ pool, không phải cấp độ hook. Uniswap có thể implement một global mutex trong singleton pool contract, chặn mọi cuộc gọi vào pool khi một hook đang thực thi. Chi phí gas? Khoảng 5k gas mỗi swap — chấp nhận được.

Takeaway: Dự báo lỗ hổng

Tôi dự đoán trong 6 tháng tới, sẽ có ít nhất 3 sự cố reentrancy nghiêm trọng trên Uniswap V4 mainnet. Các dự án muốn sử dụng V4 nên tự audit hook của mình với tool như Slither, hoặc tốt hơn — sử dụng một hook pattern đã được kiểm chứng như Uniswap V3-style (không có callback).

Câu hỏi đặt ra: Uniswap sẽ chọn con đường nào? Chấp nhận rủi ro để đổi lấy tính linh hoạt, hay thắt chặt bảo mật? Tôi biết câu trả lời, nhưng tôi muốn nghe từ họ.

Sợ & Tham

74

Tham lam

Tâm lý thị trường

Chỉ số mùa altcoin

41

Mùa Bitcoin

Sự thống trị BTC Mùa altcoin

Vốn hóa thị trường

Tất cả →
1
Bitcoin
BTC
$79,752.8
1
Ethereum
ETH
$2,452.76
1
Solana
SOL
$101.69
1
BNB Chain
BNB
$718.7
1
XRP Ledger
XRP
$1.4
1
Dogecoin
DOGE
$0.0848
1
Cardano
ADA
$0.2129
1
Avalanche
AVAX
$7.38
1
Polkadot
DOT
$0.8722
1
Chainlink
LINK
$11.69

🐋 Theo dõi cá voi

🔵
0xe8d2...7e5f
1 ngày trước
Stake
2,207.71 BTC
🔵
0xbbc0...1745
30 phút trước
Stake
2,087 ETH
🟢
0x26f4...8dac
1 giờ trước
Chuyển vào
10,001 SOL