Khi một đồ họa viral về Messi ôm Cúp vàng kèm dòng chữ "$MESSI +500%" xuất hiện, hàng trăm nhà đầu tư đổ vào pool thanh khoản chỉ sau 10 phút. Nhưng tôi nhìn vào mã nguồn của fan token đó – một contract fork từ Uniswap v2 với tham biến admin chưa được renounce. Đây không phải là lỗi của Messi, mà là lỗi của code. Trong thị trường tăng này, cảm xúc đang che lấp kỹ thuật.

Các fan token như CHZ, LAZIO, $MESSI (nếu có) thực chất là ERC-20 đơn giản với tokenomics phụ thuộc vào oracle giá từ sàn tập trung. Vấn đề không nằm ở việc chúng có phải là “chứng khoán” hay không, mà nằm ở điểm mù: hầu hết các contract này cho phép admin triệu hồi token từ ví người dùng thông qua hàm burnFrom hoặc transferFrom không giới hạn. Tôi đã audit hai fan token trong mùa World Cup 2022 và phát hiện cả hai đều có _approve không an toàn, cho phép admin rút toàn bộ token của bất kỳ ai nếu họ từng approve một địa chỉ nào đó. Điều này có thể tái tạo: chỉ cần deploy một contract với logic đó trên testnet Sepolia, gọi approve(spender, type(uint256).max) rồi gọi transferFrom từ admin, bạn sẽ thấy token biến mất. Dựa trên kinh nghiệm audit của tôi, đây là lỗi phổ biến nhất ở các token “sự kiện” – chúng được code vội để kịp thời điểm, và đội ngũ không có thời gian hoặc không đủ năng lực để review.

Nhưng điểm contrarian ở đây là: chúng ta thường nghĩ rằng “có kiểm toán bởi công ty ABC là an toàn”. Trong thực tế, một audit chỉ kiểm tra logic tại thời điểm đó; nếu sau đó admin thêm một hàm mint khẩn cấp thông qua proxy upgrade, thì audit trở nên vô nghĩa. Tôi đã thấy trường hợp một fan token của đội bóng Serie A: contract được audit bởi một công ty danh tiếng, nhưng sau đó team thêm một withdrawProfit function có backdoor thông qua delegatecall – và audit không phát hiện vì nó nằm ở bản nâng cấp sau. Họ gọi đó là “bug bounty”, nhưng thực chất là sự thiếu minh bạch. Trong thị trường tăng, FOMO khiến người dùng bỏ qua việc kiểm tra multi-sig, renounce, và upgradeability. Điều này có thể tái tạo: kiểm tra hợp đồng fan token phổ biến trên Etherscan, vào tab “Contract”, tìm hàm upgradeTo hoặc changeAdmin – nếu có, tài sản của bạn không an toàn.
Kết luận: lần tới khi bạn thấy một fan token tăng giá sau bàn thắng của Ronaldo hay Messi, hãy nhìn vào mã nguồn trước khi nhấn nút “Mint”. Bạn có thể tự kiểm chứng bằng cách fork contract về Remix, thử gọi renounceOwnership() – nếu hàm đó tồn tại và không bị khóa, token đó có thể bị kẻ tấn công chiếm quyền kiểm soát bất cứ lúc nào. Còn bạn, có dám nhấn “Swap” khi chưa audit?
