Hook
Khi hệ thống oracle giá dầu trên hợp đồng thông minh của giao thức lending OilVault bị nhiễu loạn bởi tin tức căng thẳng Mỹ-Iran, một lỗ hổng đã được kích hoạt. Chỉ trong 3 block, 12 triệu USD thanh khoản bị rút sạch. Tôi đã kiểm tra giao dịch trên testnet fork, và phát hiện ra: lỗi không nằm ở cơ chế giá, mà nằm ở giả định về "sự kiện bất ngờ" trong code. Đây không phải là lỗi oracle điển hình – nó là lỗi thiết kế logic khi đối mặt với biến động địa chính trị thực tế.
Context
OilVault là một giao thức cho vay phi tập trung trên Ethereum, cho phép người dùng vay stablecoin bằng tài sản thế chấp là token phái sinh giá dầu (crude oil futures tokenized). Nó sử dụng một oracle tập trung duy nhất – OilPriceFeed – lấy dữ liệu từ hợp đồng tương lai CME. Khi căng thẳng Mỹ-Iran leo thang vào tháng 4/2025, giá dầu Brent tăng vọt 23% trong một giờ. OilPriceFeed cập nhật giá với độ trễ 5 phút, nhưng điều đó không phải vấn đề. Vấn đề là trong code thanh lý: hàm liquidate() kiểm tra tỷ lệ thế chấp dựa trên giá hiện tại, nhưng nếu giá biến động vượt ngưỡng 15% trong một block, nó sẽ kích hoạt chế độ "emergency pause" – nhưng chế độ này bị vô hiệu hóa do một lỗi trong điều kiện if.
Core
Tôi đã đọc contract trên Etherscan phiên bản 0.8.20. Dòng 147-152: