"Chúng tôi có 43 oracle signals." Câu nói đó được lặp lại đến 9 lần trong AMA của Codex Protocol tháng 6 vừa rồi.
Nhưng khi tôi kiểm tra on-chain, tôi chỉ thấy một con số: 0. Đó là số lượng validator thực sự tham gia vào quá trình đồng thuận trước khi sự cố xảy ra.
Context
Codex Protocol là một nền tảng lending cross-chain với cơ chế bảo vệ vị thế tự động. Họ tự hào với hệ thống 88 oracle node, mỗi node chạy trên một validator độc lập, được thiết kế để ngăn chặn việc thao túng giá.
Tôi đã theo dõi Codex từ ngày đầu mainnet. Lý do đơn giản: họ hứa hẹn quá nhiều. 88 node. 43 signals. Phi tập trung. Chống kiểm duyệt. Tất cả những buzzword đó, khi kết hợp với tốc độ tăng trưởng TVL ấn tượng 400% trong 3 tháng, thường có mùi của một thứ gì đó rất cũ kỹ.

Bối cảnh thị trường hiện tại đang giảm mạnh. Trong 7 ngày qua, khối lượng giao dịch trên các DEX lớn đã giảm 35%. Đây là thời điểm các giao thức yếu nhất bắt đầu lộ diện. Và Codex, với vẻ ngoài cứng cáp, đã là một trong những cái tên đầu tiên chảy máu.
Core
Tuần trước, tôi nhận được một tip từ một bot MEV cũ. Một giao dịch bất thường trên Polygon: một whale rút 4,7 triệu USDC khỏi Codex trong một block duy nhất. Không có lý do rõ ràng. Thị trường đang ổn định, không có thanh lý hàng loạt.
Tôi bắt đầu đào. Bước đầu tiên: kiểm tra sổ cái on-chain của Codex. Cấu trúc của họ khá phức tạp: một proxy contract, 4 implementation contracts cho các chức năng lending, oracle, liquidation, và governance.
Phát hiện đầu tiên: Sự im lặng của 87 node
Tôi đã viết một script Python đơn giản để truy vấn 100 block gần nhất trước vụ rút tiền. Mục tiêu: xác định có bao nhiêu oracle node thực sự đang gửi dữ liệu giá.
Kết quả: chỉ có 1 node duy nhất active. Node đó là 0x3f...a2, một địa chỉ được deploy từ cùng một factory contract với deployer của chính đội ngũ dự án.
88 node. 43 signals. Nhưng chỉ một người gửi.
Điều này có nghĩa: toàn bộ cơ chế phi tập trung của Codex chỉ là một lớp sơn trên một cấu trúc hoàn toàn tập trung. Họ claim có 88 validator, nhưng trên thực tế, chỉ có một oracle duy nhất hoạt động. 87 cái còn lại chỉ là những trusted signer trong config file, không bao giờ thực sự ký.
Phát hiện thứ hai: Logic redeem bị gãy
Tiếp theo, tôi kiểm tra logic redeem. Hợp đồng lending cho phép người dùng rút tài sản thế chấp khi tỷ lệ LTV dưới 80%. Nhưng có một đoạn code thú vị:
function calculateWithdrawable(address user) public view returns (uint256) {
(, int256 price, , , ) = oracle.latestRoundData();
uint256 currentLTV = (user.debt * 1e18) / (user.collateral * uint256(price));
if (currentLTV < ltvThreshold) {
return user.collateral - (user.debt * 1e18) / (ltvThreshold * uint256(price));
}
return 0;
}
Thoạt nhìn, có vẻ ổn. Nhưng khi whale rút tiền, tôi thấy price trong transaction đó là $100,000 cho ETH. Giá thị trường thực tế lúc đó là $3,200.

Whale đã khai thác một lỗ hổng: khi oracle node duy nhất gửi dữ liệu sai, toàn bộ hệ thống tin tưởng nó. Không có cơ chế so sánh chéo, không có staleness check giữa các node, không có dispute period.
Phát hiện thứ ba: Cuộc chạy đua trước sập
Sau khi whale rút 4,7 triệu USD với giá ETH ảo, các LP khác đổ xô rút tiền. Trong 24 giờ tiếp theo, tổng số tiền rút là 47 triệu USD – một con số chết người với một giao thức có TVL chỉ 120 triệu.
Tôi truy vết 527 giao dịch liên quan đến vụ việc. Một địa chỉ 0x7f...e3 (chính là whale) đã rút 8,3 triệu USD ngay trong block đầu tiên, thông qua một hợp đồng proxy giấu tên – giống hệt mô hình tôi đã thấy trong vụ Yam Finance năm 2020.
Codex Protocol đã chết trong 48 giờ.
Contrarian
Bây giờ, phần mà tôi tin là nhiều người sẽ không đồng ý: Codex không phải là một rug pull. Ít nhất, không phải theo nghĩa đen.
Tôi đã kiểm tra lịch sử deployer. Địa chỉ 0x3f...a2 (oracle duy nhất active) không liên quan đến deployer chính. Nhưng nó được tạo ra từ factory contract của cùng một team. Đây có thể là một lỗi vận hành nghiêm trọng, không phải ý đồ xấu.
Tôi cũng kiểm tra lịch sử giao dịch của deployer trong 6 tháng trước vụ việc. Họ đã thanh lý các vị thế cá nhân trước đó, nhưng không có dấu hiệu rút thanh khoản khỏi giao thức.
Câu chuyện thực sự có thể là: một lỗi cấu hình đã giết chết một giao thức. Một người quản lý node đã sai lầm khi cấp quyền cho một oracle duy nhất, và không có ai kiểm tra trong gần 1 năm.
Đây là điểm mù mà các auditor thường bỏ qua: kiểm tra logic smart contract là một chuyện, kiểm tra sự vận hành thực tế của hệ thống là chuyện khác. Codex đã pass 2 audit từ các công ty lớn, nhưng không ai kiểm tra ai thực sự đang ký trên mạng lưới của họ.
Takeaway
47 triệu USD đã bay hơi. Không phải vì một hacker tài ba, cũng không phải vì một team lừa đảo. Mà vì một câu hỏi chưa ai đặt ra: "Ai đang thực sự chạy những validator này?"
Tôi kết thúc bài này bằng một câu hỏi: Khi bạn nhìn vào bất kỳ giao thức DeFi nào với con số TVL hàng chục triệu, bạn đã bao giờ tự hỏi, trên on-chain, ai là người duy nhất nắm giữ chìa khóa đó chưa?
Có lẽ, câu trả lời sẽ khiến bạn ngạc nhiên.