20 ETH mất vì một chiếc hợp đồng cười. Đó là câu chuyện tôi kể lại mỗi khi đứng trước một dự án DeFi mới toanh, lấp lánh lời hứa "phi tập trung" nhưng thiếu kiểm toán độc lập. Tuần trước, tôi nhận được một hợp đồng thông minh từ dự án LotusYield – một giao thức yield farming tự xưng là "made in Vietnam", huy động 500 ETH chỉ sau 48 giờ. Tôi mở file Solidity, và trong vòng 30 phút, tôi đã tìm thấy một hàm emergencyWithdrawForOwner(). Backdoor không bao giờ là lỗi, là chủ ý.
LotusYield ra mắt vào đầu tháng 6/2024, giữa lúc thị trường tăng nóng. Họ kể câu chuyện về một nền nông nghiệp số bền vững, hỗ trợ nông dân Việt Nam token hóa sản phẩm. Nhưng bất kỳ ai từng audit code cũng biết: mọi dự án yield farming đều hứa hẹn lãi suất 2000% APR, và họ chỉ cần một cái cớ để rút tiền. LotusYield không có audit từ bên thứ ba. Họ chỉ đăng một bài Medium dài, kèm link GitHub với một contract chưa được verify trên Etherscan. Cộng đồng Telegram sôi sục: "KYC? Không cần! Chỉ cần connect wallet và stake." Đó là dấu hiệu đỏ đầu tiên.

Tôi bắt đầu mổ xẻ contract. Họ dùng một biến owner với modifier onlyOwner, nhưng không public. Tôi deploy contract lên môi trường Remix và chạy thử. Hàm deposit() ghi nhận số dư, nhưng không có cơ chế rút tiền nào khác ngoài withdraw(uint256 amount) – hàm này chỉ cho phép rút tối đa số tiền đã stake. Vậy emergencyWithdrawForOwner() ở đâu? Tôi tìm thấy nó trong một contract thư viện riêng biệt, được import qua import "./lib/Ownable.sol". Hàm này cho phép owner rút bất kỳ số dư nào của bất kỳ user nào, và nó được gọi qua một external call không có kiểm soát. Tôi kiểm tra lịch sử giao dịch trên testnet: địa chỉ deployer đã test hàm này 3 lần, mỗi lần rút 10 ETH ảo. Rõ ràng đây không phải lỗi code. Đây là một chiếc bẫy được thiết kế tinh vi.
Tôi viết một thread trên Twitter: "LotusYield có backdoor. Đừng stake. Proof trong thread." Tôi đính kèm ảnh chụp mã nguồn và hash giao dịch testnet. Trong vòng 2 giờ, giá token của họ giảm 80%. Nhóm phát triển phản bác: "Đó là tính năng khẩn cấp, chúng tôi sẽ sớm xóa nó." Nhưng code đã trên mainnet, không thể xóa. Dự án sụp đổ ngay ngày hôm sau. Nhà đầu tư mất 470 ETH, chỉ có 30 ETH được rút kịp trong panic. Tôi nhận được tin nhắn cảm ơn từ một thành viên cộng đồng: "Chị ơi, em đã stake 5 ETH, may quá em đọc thread của chị." Nhưng tôi biết, còn hàng trăm người không đọc.

Điều trớ trêu: phe bò của LotusYield đã đúng trong ngắn hạn. Trong 48 giờ đầu, APR thực tế lên tới 3000% nhờ phí stake từ người đến sau. Nếu không có backdoor, dự án có thể sống sót vài tháng. Nhưng sự tồn tại của backdoor cho thấy chủ ý scam ngay từ đầu. Vậy bài học là gì? Đừng tin vào lời hứa "DeFi thuần Việt". Đừng tin vào một team ẩn danh. Và đừng bao giờ stake vào một contract chưa được audit bởi ít nhất hai công ty độc lập. 20 ETH mất vì một chiếc hợp đồng cười – câu chuyện đó sẽ còn lặp lại, cho đến khi cộng đồng đòi hỏi sự minh bạch tuyệt đối. Bạn có dám mở contract tiếp theo và tự hỏi: "Ai đang cầm chìa khóa?"