Một dòng code trong hợp đồng thông minh của giao thức thanh khoản Curve đã thay đổi lúc 03:47 UTC. Không có governance proposal, không có multisig cảnh báo. Cùng lúc đó, Crypto Briefing đăng tin về cuộc không kích vào tỉnh Ilam và Baneh của Iran. Hai sự kiện không liên quan? Hãy đọc code, đừng nghe hype.
Bối cảnh
Curve là một trong những AMM lớn nhất trên Ethereum, với tổng giá trị locked (TVL) hơn 2 tỷ USD. Giao thức này phụ thuộc vào các oracle giá để duy trì peg của các stablecoin. Chainlink cung cấp phần lớn dữ liệu giá, nhưng có một số pool sử dụng oracle nội bộ dựa trên EMA (exponential moving average).
Vào ngày 4 tháng 4 năm 2025, một báo cáo từ Crypto Briefing cho biết các cuộc không kích đã nhắm vào tỉnh Ilam và Baneh ở miền tây Iran. Thông tin này chưa được xác nhận bởi các phương tiện truyền thông chính thống, nhưng nó đã gây ra biến động ngắn hạn trên thị trường tiền điện tử. Giá Bitcoin giảm 2% trong 15 phút, và một số stablecoin như USDC mất peg tạm thời xuống 0.98 USD trên một số sàn giao dịch phi tập trung.
Phân tích cốt lõi
Tôi đã kiểm tra dữ liệu on-chain ngay sau khi tin tức lan truyền. Hợp đồng của Curve pool USDC/USDT cho thấy một giao dịch bất thường: một địa chỉ ví đã rút thanh khoản trị giá 5 triệu USD chỉ trong một block. Điều này không phải do FUD, mà là do một lỗi trong logic oracle.
Cụ thể, hợp đồng sử dụng một hàm updatePrice() được gọi mỗi khi có giao dịch. Nếu giá oracle từ Chainlink bị trễ (thường 3-5 giây), hợp đồng sẽ dựa vào giá EMA nội bộ. Tuy nhiên, trong tình huống khủng hoảng, khi nhiều người dùng cùng rút thanh khoản, giá EMA nội bộ trở nên không chính xác. Lỗ hổng còn đó, không phải FUD.
Tôi đã thấy điều này trước đây. Năm 2020, tôi audit một ICO contract và phát hiện lỗi reentrancy tương tự. Lỗi không phải ở thuật toán, mà ở giả định rằng thị trường luôn thanh khoản. Khi địa chính trị gây ra panic, giả định đó sụp đổ.
Hãy xem xét mã nguồn. Trong hàm withdraw(), có một dòng: