HelpMechanic

Community spam reports

Anyone browsing the aggregator can flag a contract as spam. Once enough distinct users report it, the contract is auto-blocked across /profile, /gallery and /trade - without us having to play moderator.

How a report becomes a block

Click Report spam on any non-Artsunami NFT card in /profile. The button POSTs /api/spam/report with the contract + chain. We record your IP as one reporter for that contract. After 5 distinct IPs report the same contract, it's added to the per-chain community blocklist and immediately disappears from the aggregator (unless 'Show suspicious' is on).

Three layers of spam filtering

1. Reservoir / Alchemy classifier - covers ~95 % of obvious airdrop scams. 2. Heuristic score - phishing keywords, lookalike collection names (Levenshtein), young contract with mass airdrops, image on free hoster. 3. Blocklists - a small static list curated by the team, plus the community blocklist populated by reports.

Storage

Reports are stored in Vercel KV (Upstash Redis) under spam:report:{chainId}:{contract}. The cardinality of that set is the report count; once it crosses 5, the contract is added to spam:blocked:{chainId} which is what the aggregator reads. The check is cached per-request for 60 seconds. No remote KV configured? Reports still work locally but don't persist across cold starts - wire up Vercel KV in production.

What if my legit collection got reported

5 reports = block, but the team can also un-block. Open an issue with the contract address and the chain; we'll lift the entry. Lookalike-of-a-known-collection can't be appealed by the same logic - rename your collection.

Need a personalised answer?

ChatZilla lives at the top of the Help center. It knows every topic in this center and can walk you through your specific collection, wallet or transaction.

Create