Tôi không tin vào "code is law" – tôi tin vào audit code từng dòng một.
Năm 2026, khi thị trường tăng nóng đến mức ai cũng nghĩ mình là thiên tài, tôi nhận được một cuộc gọi. Một dự án AI Agent staking trên EigenLayer muốn tôi audit hợp đồng thông minh của họ. Whitepaper của họ dày 40 trang, viết về "cơ chế đồng thuận thông minh" và "xác thực kết quả inference phi tập trung". Nghe rất hay, nhưng tôi chỉ cần một điều để bắt đầu: mã nguồn.
Họ đưa cho tôi 15 file Solidity, tổng cộng 2,400 dòng code. Và trong đó, tôi tìm thấy một lỗi mà không ai – kể cả đội ngũ – muốn thừa nhận.
Bối Cảnh: Khi AI Gặp Restaking
EigenLayer, như bạn biết, là giao thức cho phép người dùng restake ETH của mình để bảo mật các dịch vụ khác (AVS). Ý tưởng rất hay: thay vì mỗi dự án phải xây dựng bộ validator riêng, họ có thể thuê bảo mật từ pool staking chung. Vào năm 2026, một làn sóng dự án AI Agent xuất hiện, tận dụng EigenLayer để xác thực kết quả inference của model machine learning. Họ hứa hẹn một mạng lưới "minh bạch và không thể gian lận" cho AI.
Dự án mà tôi audit, tạm gọi là "AIVerify", là một trong số đó. Họ có một AVS yêu cầu node operator chạy model AI và gửi kết quả lên chain. Nếu node operator gửi kết quả sai, họ sẽ bị slashing (mất một phần ETH staking). Đó là lý thuyết.
Trên thực tế, logic slashing của họ có một lỗ hổng chết người.
Core: Cuộc Đào Mã Nguồn
Tôi dành một tuần để re-write core code của họ trên local testnet. Tôi staking 5 ETH ảo, chạy 4 node operator giả lập. Và tôi phát hiện ra điều này:
Trong hàm validateAndSlash, logic được viết như sau:
function validateAndSlash(
bytes32 _taskId,
bytes memory _nodeResponse
) external onlyCoordinator returns (bool) {
bytes32 expectedHash = keccak256(abi.encodePacked(_nodeResponse));
// So sánh với hash từ oracle
if (expectedHash != taskHashes[_taskId]) {
// Slashing logic
uint256 slashedAmount = stakeOf[msg.sender] * slashingPercentage / 100;
stakeOf[msg.sender] -= slashedAmount;
totalStaked -= slashedAmount;
emit Slashed(msg.sender, slashedAmount);
return false;
}
return true;
}
Nhìn có vẻ ổn phải không? Sai. Điểm mù nằm ở chỗ: không có cơ chế checkpoint.
Tôi giải thích: Trong mô hình EigenLayer, một node operator có thể gửi output sai, bị phát hiện, bị slashing. Nhưng nếu họ gửi output sai trước khi bất kỳ ai có thể gửi bằng chứng sai (proof of fraud), thì sao? Trong hàm này, chỉ có một oracle duy nhất (hợp đồng coordinator) mới có thể kích hoạt validateAndSlash. Nếu oracle đó bị tấn công hoặc có độ trễ – và trên mạng thực tế, oracle thường có độ trễ từ 2-5 block – thì node operator có thể:
- Gửi output sai.
- Ngay lập tức rút toàn bộ stake của mình (bằng hàm
unstakeriêng biệt). - Trước khi oracle kịp phản ứng, stake đã biến mất. Hợp đồng không thể slashing nữa vì
stakeOf[msg.sender]đã về 0.
Tôi không tin vào "kinh tế học slashing" – tôi tin vào reentrancy guard và checkpoint.
Tôi đã chứng minh điều này bằng một script Python + Hardhat. Với 5 ETH staking, một node operator có thể gửi 10 output sai trong 30 giây, rút toàn bộ stake, và thoát. Hợp đồng không thể làm gì được. Tôi đã submit report 15 trang cho đội ngũ, trong đó có 3 page về lỗ hổng này và đề xuất thêm một cơ chế checkpoint bắt buộc: stake chỉ có thể rút sau ít nhất N block kể từ lần gửi output cuối cùng.
Contrarian: Điểm Mù Của Người Xây Dựng
Điều làm tôi ngạc nhiên là phản ứng của đội ngũ. Họ không muốn thay đổi code. Lý do: "Chi phí gas sẽ tăng lên 15% nếu thêm checkpoint." Họ đặt hiệu suất lên trên bảo mật. Đây là điểm mù kinh điển trong bull market: ai cũng nghĩ code của mình đẹp, cho đến khi có người chứng minh ngược lại.
Câu chuyện này nhắc tôi về Olympus DAO năm 2021. Khi tôi phát hiện lỗ hổng trong hàm rebase, đội ngũ từ chối sửa vì "mô hình (3,3) đã được kiểm chứng". Họ mất 10 triệu USD sau đó. Tôi viết post-mortem trên Twitter, và nó trở thành bài học cho nhiều người. Nhưng điều buồn cười là: lịch sử vẫn lặp lại.
Trong thị trường tăng, numbers go up che giấu mọi lỗi code. Marketing team bán giấc mơ, nhưng security auditor phải chỉ ra nơi giấc mơ sụp đổ.
Takeaway: Câu Hỏi Dành Cho Bạn
Dự án AIVerify cuối cùng đã đồng ý sửa code trước khi launch. Nhưng có bao nhiêu dự án khác ngoài kia, đang huy động hàng triệu USD, mà chưa từng được kiểm tra kỹ lưỡng như tôi đã làm? Tôi không viết bài này để khoe khoang. Tôi viết vì tôi muốn bạn – những người đọc, những người xây dựng – tự hỏi:
Nếu code của bạn có lỗi, liệu thị trường có tha thứ cho bạn? Hay nó sẽ khiến bạn mất tất cả trước khi bạn kịp nói "audit"?
Barcelona, tháng 3 năm 2026. Pool của tôi vẫn ổn. Nhưng con người thì không.