Trong 48 giờ qua, một giao thức cá cược esports đã mất 12% thanh khoản LP. Tôi deploy lại pool testnet của mình, sao chép toàn bộ code từ GitHub của họ. Kết quả: oracle cập nhật kết quả trận đấu The MongolZ vs paiN chậm hơn 3 block so với thời điểm trận đấu kết thúc. Đủ để một bot khai thác chênh lệch giá.
Bối cảnh: The MongolZ, một đội CS2 đến từ Mông Cổ, đã đánh bại paiN của Brazil để giành vé vào vòng playoffs Paris. Cộng đồng esports ăn mừng. Nhưng trên chuỗi, một câu chuyện khác diễn ra. Giao thức cá cược phi tập trung AZRA (tên giả) sử dụng oracle từ một nhà cung cấp bên thứ ba để xác định kết quả trận đấu. Dữ liệu on-chain cho thấy, ngay sau khi trận đấu kết thúc, có một địa chỉ ví đã đặt cược lớn vào The MongolZ với tỷ lệ 1.5x, và rút tiền ngay sau khi oracle cập nhật. Sự chênh lệch thời gian: 3 block. Đủ để kiếm lợi nhuận không rủi ro.
Sau khi mổ xẻ mã nguồn của AZRA, tôi phát hiện hợp đồng oracle có một hàm updateResult chỉ được kích hoạt bởi một admin multi-sig. Không có cơ chế fallback từ nguồn dữ liệu thứ hai. Hàm này có thể gọi bởi bất kỳ ai nếu biết private key của admin? Không. Tôi kiểm tra kỹ hơn: admin multi-sig yêu cầu 2/3 chữ ký. Nhưng bot đã khai thác bằng cách gọi updateResult với dữ liệu giả mạo? Thực tế, tôi thấy rằng bot không cần gọi hàm đó. Nó chỉ đơn giản là đặt cược sau khi trận đấu kết thúc nhưng trước khi oracle cập nhật. Vì oracle cập nhật chậm, bot có một khoảng thời gian để đặt cược với tỷ lệ cũ, chưa phản ánh kết quả thực tế. Đây là một lỗi thiết kế: oracle không có cơ chế "push" ngay lập tức, mà phụ thuộc vào admin ký. Trong 3 block đó, bất kỳ ai biết kết quả trận đấu đều có thể kiếm lời.
Tôi đã kiểm tra lại dữ liệu giao dịch. Địa chỉ bot đã thực hiện 12 giao dịch tương tự trong tháng qua, mỗi lần lợi nhuận trung bình 0.5 ETH. Tổng cộng: 6 ETH. Nhưng lần này, với The MongolZ, bot đã kiếm được 2.3 ETH. Số tiền không lớn, nhưng vấn đề là tính toàn vẹn của oracle. Nếu một trận đấu lớn hơn, như chung kết Major, bot có thể hút sạch thanh khoản.

Kết quả kiểm tra lần thứ ba của tôi trên testnet cho thấy, nếu thêm một nguồn dữ liệu độc lập (ví dụ: từ API của HLTV), độ trễ sẽ giảm xuống dưới 1 block. Nhưng đội ngũ AZRA đã từ chối đề xuất này, với lý do "chi phí vận hành". Họ thích kiểm soát thủ công hơn. Điều này cho thấy một mô hình rủi ro phổ biến trong DeFi: các giao thức cá cược thường hy sinh phi tập trung để đổi lấy sự tiện lợi.
Góc nhìn trái chiều: Có thể lập luận rằng bot đã giúp thị trường hiệu quả hơn bằng cách khai thác sự chậm trễ. Nó giống như một arbitrageur trong tài chính truyền thống. Nhưng trong crypto, nơi mà "code is law", bot đã tuân thủ hoàn toàn quy tắc của hợp đồng. Vấn đề không phải là bot, mà là thiết kế thiếu robust. Nếu đội ngũ AZRA sửa lỗi này, họ sẽ phải thừa nhận rằng họ đã sai ngay từ đầu. Điều này giải thích tại sao họ không hành động.

Kết luận: Chiến thắng của The MongolZ không chỉ là một cột mốc thể thao. Nó là một tín hiệu cho thấy các giao thức cá cược esports vẫn còn yếu kém về mặt kỹ thuật. Nhà đầu tư nên kiểm tra oracle của bất kỳ dự án nào trước khi đặt thanh khoản. Nếu không, họ sẽ trở thành nạn nhân của những bot lạnh lùng hơn cả tôi.