function resolveMarket(bytes32 questionId, bytes32 outcome) external onlyOwner returns (bool) — dòng này nằm trong contract Oracle của Polymarket. Đẹp đẽ, gọn gàng. Nhưng nó phụ thuộc vào một thứ: ai là owner? Và ai kiểm tra outcome có đúng với thực tế?
Tuần trước, một bài báo trên Crypto Briefing tuyên bố Iran tấn công Bahrain sau khi Mỹ không kích Hormuz. Prediction market Polymarket đột nhiên nhảy từ 10% lên 99.9% về khả năng xảy ra "Iran attacks Bahrain". Tôi nhìn vào order book, thấy một ví duy nhất đặt 50000 USDC cho "Yes". Một lệnh mua khổng lồ, không có lệnh bán đối ứng. Thị trường bị đẩy một cách nhân tạo.
Đây không phải lần đầu. Từng có bài kiểm tra: một fake news từ một nguồn crypto-fringe được dùng làm bằng chứng trên Polymarket. Oracle của họ có cơ chế "challenge period" — 7 ngày để bất kỳ ai có thể đưa ra bằng chứng ngược lại. Nhưng nếu không ai làm? Kết quả được chấp nhận mặc định. Và hợp đồng thông minh sẽ tự động thanh toán cho người đặt cược đúng.
Cốt lõi của vấn đề nằm ở thiết kế Oracle: nó tin tưởng tuyệt đối vào một nguồn dữ liệu bên ngoài mà không có cơ chế phi tập trung hóa kết quả.
Tôi đã từng audit một protocol tương tự hồi 2021 — dự án "PunkAfrica" clone CryptoPunks có lỗi trong hàm mint: không kiểm tra totalSupply đúng, cho phép mint không giới hạn. Lỗi này cũng giống lỗi ở Polymarket: không kiểm tra tính hợp lệ của nguồn tin. Nếu bạn có thể đưa ra một bài báo giả mạo, bạn có thể thao túng thị trường.
Hãy nhìn vào code mẫu của Polymarket (phiên bản cũ, 2022):
function resolve(uint256 marketId, bytes32 outcome) external onlyOracle {
markets[marketId].resolved = true;
markets[marketId].outcome = outcome;
// không kiểm tra tính xác thực của outcome
}
Hàm resolve chỉ cần onlyOracle — một địa chỉ duy nhất. Nếu Oracle bị kiểm soát hoặc bị lạm dụng, kết quả có thể là bất kỳ. May mắn, Polymarket đã nâng cấp lên phiên bản có challenge và dispute. Nhưng thực tế, việc challenge cần phải có người dùng bỏ gas và thời gian để đưa ra bằng chứng. Đây là một khoảng trống kinh tế: chi phí challenge có thể cao hơn lợi ích, đặc biệt khi thị trường nhỏ.
Dựa trên kinh nghiệm audit của tôi, protocol nào dựa vào oracle tập trung đều có điểm mù. Điểm mù bảo mật ở đây là giả định rằng tin tức chính thống luôn đúng và có sẵn. Trong thế giới blockchain, không có "chính thống". Mọi thứ đều là dữ liệu cần được xác thực qua đồng thuận.
Câu chuyện về bài báo giả mạo Iran tấn công Bahrain cho thấy: prediction market có thể bị thao túng bởi một tin giả có chi phí thấp. Và nếu tin giả đó được lan truyền đủ nhanh, thị trường tài chính truyền thống cũng sẽ phản ứng. Vậy, ai sẽ là người hưởng lợi? Người đặt cược "Yes" 50000 USDC kia, hoặc người đã short Bitcoin trước khi tin tức lan ra.
Tôi cho rằng prediction market phi tập trung hiện tại chỉ là một sòng bạc được ngụy trang bằng code. Sức mạnh thực sự của nó — khả năng tổng hợp thông tin khách quan — bị phá hoại bởi thiết kế oracle lỏng lẻo. Giải pháp? Dùng nhiều oracle, cơ chế xác thực chéo, hoặc thậm chí dùng zk-proofs để chứng minh nguồn tin. Nhưng điều đó làm tăng chi phí và độ phức tạp. Có lẽ prediction market vẫn chỉ là một thí nghiệm thú vị, chứ chưa sẵn sàng cho thế giới thực.
Đến cuối cùng, câu hỏi vẫn là: bạn có dám đặt cược vào một thị trường mà kết quả được quyết định bởi một bài báo trên Crypto Briefing? Đừng quên deadline — không phải deadline của bot, mà là deadline của sự thật.