Hook
0.8 ETH. Đó là số tiền tôi mất trong 3 phút. Bot floor sweep của tôi vừa mua 12 NFT từ bộ sưu tập Squiggles – một dự án 10k item với floor giá 0.05 ETH. Tôi tưởng mình đang arbitrage. Thực ra tôi đang hút thanh khoản giả. Khi code chạy, tôi mới biết mình sai ở đâu.
Context
Cuối 2021, thị trường NFT điên cuồng. Ai cũng muốn sweep floor – mua hết những NFT rẻ nhất trong một collection để đẩy giá lên. Tôi viết một script Python kết nối OpenSea API, tự động quét danh sách listing, mua bất kỳ token nào dưới 0.05 ETH. Logic đơn giản: nếu giá thấp hơn ngưỡng thì mua, không cần kiểm tra thêm. Tôi chạy bot 2 ngày, kiếm 1.5 ETH lợi nhuận từ 30 giao dịch. Mọi thứ có vẻ hoàn hảo. Cho đến khi tôi gặp Squiggles.

Squiggles là một collection 10k item, mới lên sàn, floor giá 0.06 ETH. Bot tôi thấy một loạt NFT giảm xuống 0.04 ETH, 0.03 ETH, thậm chí 0.02 ETH. Tôi nghĩ đây là cơ hội. Script mua 12 cái trong 3 phút. Tổng cộng 0.8 ETH. 30 giây sau, floor giá Squiggles biến mất. Toàn bộ thanh khoản trên OpenSea sụp đổ. Tôi kiểm tra contract – team đã rút hết ETH từ contract, lock listing, và biến mất.
Core
NFT floor sweep script dạy tôi về thanh khoản giả. Khi tôi audit contract Squiggles sau vụ việc, tôi phát hiện ba dấu hiệu kỹ thuật quan trọng:
- Ownership chưa được chuyển giao: Contract vẫn nằm dưới quyền kiểm soát của deployer, không có renounceOwnership(). Một dấu hiệu cổ điển: team có thể thay đổi listing, rút tiền, hoặc hủy giao dịch bất kỳ lúc nào. Bot của tôi không kiểm tra điều này.
- Liquidity pool không tồn tại: NFT trên OpenSea chỉ có thanh khoản từ các listing tự do. Nhưng collection Squiggles không có bất kỳ pool thanh khoản nào trên LooksRare hay X2Y2. Điều đó có nghĩa là team tự tạo listing ảo với giá thấp để đánh lừa bot. Họ đặt 200 NFT giá 0.02 ETH, nhưng không có người bán thật. Khi bot mua, team nhận ETH và hủy listing còn lại.
- Hợp đồng vesting khả nghi: Tôi mở contract trên Etherscan, thấy một hàm
emergencyWithdrawkhông được comment. Hàm đó cho phép deployer rút toàn bộ số dư ETH từ contract bất kỳ lúc nào. Một collection thật sự không cần hàm đó nếu không có kế hoạch rug.
Sau khi mất 0.8 ETH, tôi refactor script. Thêm ba bước kiểm tra trước mỗi giao dịch:
- Kiểm tra
ownercủa contract có phải là zero address không (đã renounce chưa?) - Kiểm tra số lượng listing thực tế trên ít nhất 2 sàn khác nhau (OpenSea + LooksRare) để phát hiện thanh khoản ảo.
- Kiểm tra lịch sử giao dịch của deployer: nếu deployer vừa tạo contract vài giờ trước, chưa có bất kỳ giao dịch bán nào từ ví khác, đó là dấu hiệu rug.
Kết quả: Bot chạy ổn định 2 tháng sau đó, không mất thêm một giao dịch lừa đảo nào.
Contrarian
Nhiều người nghĩ rug pull chỉ xảy ra với các dự án DeFi thiếu audit. Thực tế, NFT rug pull dễ hơn nhiều vì thanh khoản trên thị trường secondary rất mỏng. Một bot sweep floor không kiểm tra ownership sẽ trở thành nạn nhân hoàn hảo. Tôi từng cho rằng chỉ cần đọc contract là đủ. Sai lầm: đọc contract không đồng nghĩa với hiểu cơ chế thanh khoản. Mỗi lần thua, tôi đều refactor code và tâm lý. Lần này, tôi học được rằng dữ liệu on-chain không bao giờ đủ nếu thiếu phân tích hành vi người dùng.

Câu chuyện Squiggles không phải cá biệt. Theo dữ liệu từ RugDoc, 70% rug pull NFT trong 2021 sử dụng chiêu thức listing ảo kết hợp với listing giảm giá để dụ bot. Smart money không bao giờ sweep floor mà không kiểm tra volume thực tế. Họ nhìn vào số lượng giao dịch thật, không chỉ floor giá.

Takeaway
Tôi vẫn sweep floor, nhưng không còn tin vào một con số nữa. Thanh khoản giả là thứ phá bot mạnh nhất. Câu hỏi đặt ra: khi bạn nhìn thấy một collection giảm giá mạnh, bạn có dám chắc đó là cơ hội hay cái bẫy? Hãy mở contract lên, kiểm tra ownership, và nhìn vào dòng lệnh thật – bot không biết sợ, nhưng bạn thì có thể.