Cover photo

Any bot detector can flag any percentage you like.

Every airdrop post-mortem carries the same line: X% of these wallets were bots. Across nine million wallets scored by ZeruAI, we’ve found that number usually says more about the detector than about the wallets.

Think of a grading curve. A teacher who fails the bottom third of every class will fail the bottom third of a class of straight-A students too. The curve knows nothing about the subject. It only knows the order.

Plenty of bot detection works this way. The underlying signals are real: how evenly spaced a wallet’s activity is, how much its spending varies. But those signals get turned into a number by asking where each wallet sits relative to everyone else in the batch. Then the bottom slice gets a label.

Feed that detector a room full of genuine power users and it still produces a bottom slice. Feed it a room full of actual bots and it still produces a top slice it calls clean.

What Zeru’s detector did

ZeruAI ran a campaign cohort of 1,981 wallets. The detector came back with 618 hard bots. That’s 31.2%.

Then we looked at who those 618 actually were.

Wallets in the cohort

1,981

Flagged as hard bots

618

Median transactions among the flagged

1,886

The flagged set was the most active part of the cohort, not the least.

The detector did what it was built to do: rank wallets by how mechanical their activity looks and flag the top of that ranking. Heavy users look mechanical. They transact constantly, often at regular intervals, frequently through scripts and bots they run themselves. That’s what heavy use looks like from the outside.

What a hand check found

We pulled a sample of the flagged wallets and traced them one at a time.

Three of five were genuinely automated. A script fanning out with four seconds between transactions. A market maker running across several chains at ten thousand transactions. A contract spammer firing every eighteen seconds. Real automation, correctly caught.

The other two were a power user and an airdrop farmer. Both human, both doing nothing they shouldn’t.

That ratio is the useful part. A detector can be right most of the time and still produce a headline percentage that means nothing on its own, because the percentage was set by the size of the slice rather than by how many bots were in the room.

The question worth asking

When someone tells you what share of an airdrop was bots, ask whether the same detector would return the same percentage on a group nobody suspects. If it would, you’re reading a ranking, not a count.

How Zeru’s zScore avoids the curve

The fix is to stop grading on a curve. Score each wallet against a fixed reference instead of against whoever happens to be in the batch, and the number starts meaning something absolute.

That’s how ZeruAI built zScore. It’s a learned function of one wallet’s own onchain history and it returns a bounded score. Nothing in it asks who else is in the batch, so a wallet gets the same score in a cohort of 2,000 or 2 million. The model is the fixed reference: whatever it learned from sits behind every score and doesn’t shift when the room does.

ZeruAI’s attribution research found the same thing from the other side. The anomaly ensemble that screens for malicious wallets in reward programs pairs a reconstruction model with an isolation forest. On a labeled set of 1,073 malicious wallets (124,638 transactions) it reached 0.923 ± 0.013 ROC-AUC, against 0.891 ± 0.016 for the reconstruction model alone. That gain only appeared when the isolation forest was fit on benign wallets. Fit it on the pooled population, benign and malicious mixed, and its polarity flipped and the gain disappeared.

We also don’t let a hard label decide payouts. In the same framework, penalties are graduated, so a wallet that looks suspicious loses a proportion of its share. A false positive on a power user costs them part of a payout, not all of it.

None of this makes it perfect. Models drift as behavior shifts, anyone who publishes a detector invites people to game it, and high-stakes calls still get a human review.

More on ZeruAI at zeruai.org.