We funded a wallet at breakfast. Scammers impersonated it by lunch.

This morning we topped up our fleet’s payer wallet with $15 of USDC and ran a routine payment sweep — 22 real micropayments across every service we operate, to prove the rails end to end. Minutes into the sweep, our revenue channel on Discord pinged twice with something that should be impossible: a $0.0000 payment. Our cheapest endpoint costs $0.001. Nothing on our fleet can produce a zero-dollar sale. Whatever those two alerts were, they weren’t customers.
The tell was four characters on each end
We pulled the transaction from the chain. It wasn’t a payment at all — it was a batch transaction spraying microscopic amounts of USDC, a hundredth of a cent at a time, to dozens of unrelated wallets. Buried in the batch was a transfer of $0.000015 to one of our revenue wallets. And the sender was the interesting part:
Same first four characters. Same last four characters. Everything in between — thirty-four characters of it — completely different. That’s not a coincidence: wallet addresses are effectively random, so an attacker can cheaply grind through millions of candidate wallets until one happens to start and end with the same characters as yours. It costs them nothing but compute, and it only has to match on the parts people actually look at. Because here is the uncomfortable truth every wallet app, block explorer, and Discord bot shares: they all display addresses truncated, as 0x4c41…7807. Both wallets above render identically in almost every interface you use.
The scam, in plain language
It’s called address poisoning, and the dust transfer is not the theft — it’s the setup. By sending a fraction of a cent from their lookalike wallet to yours, the attacker plants their address in your wallet’s transaction history. It now sits there looking exactly like your own wallet, one line among your real transactions. Then they wait. The payoff comes weeks or months later, the day you — or your bookkeeper, or your automation — need to send funds and grab the address the fast way: scroll the history, spot the familiar 0x4c41…7807, copy, paste, send. The money goes to the attacker, and on a blockchain there is no undo button, no fraud department, no chargeback. This scam has taken tens of millions of dollars from real victims — the most famous single case lost $68 million in one copy-pasted transfer.
What startled us was the speed
between funding the wallet with $15 and the first poisoning attempt landing in our revenue wallet
dust transfers at 11:54 and 11:58 UTC — both fired while our payment sweep was still running
the cost of each attempt. Grinding the lookalike address costs the attacker nothing but electricity
Nobody targeted us personally. Bots watch the chain for freshly funded, newly active wallets, auto-generate a lookalike, and dust every counterparty the target touches — all in the same breath as the activity itself. Our wallet started making payments; within minutes, machinery on the other side was seeding fake history into the wallets we’d paid. It is fully industrialized, and it costs the attacker so little that every active wallet gets this treatment eventually. Yours will too. The only question is whether it matters when it happens.
Why the agent economy is the perfect target
Address poisoning is old news in DeFi. But x402 and agent payments make an unusually rich hunting ground, for three reasons that are structural, not incidental.
Selling to agents means operating wallets that pay and get paid all day in small amounts. Every transfer is a fresh signal to the poisoning bots and a fresh line of history for a fake address to hide in. A cold-storage whale gets dusted once; an x402 operator gets dusted on schedule.
Agent operators live in Discord alerts, dashboards, and monitoring feeds — surfaces that all truncate addresses to first-and-last characters, the exact format the attack is built to exploit. We take our own wallet address from a Discord bot more often than we’d like to admit. That habit is precisely what the attacker is betting on.
An automation that "tops up the usual wallet" by reading recent transaction history — a completely natural thing to build — will copy the poisoned address without ever feeling suspicious. Software doesn’t squint at the middle characters unless you tell it to. As more non-technical builders wire up agents that move money, this failure mode ships by default.
The defense is boring, and it works completely
Here’s the good news: this attack has a 100% cure, and it costs nothing. The dust in your wallet is harmless — it’s real money, it can’t hurt you sitting there, and you never need to touch it. The attack only ever succeeds at the moment someone copies the wrong address. Remove that moment and the whole industry of it goes dark. Habits, in order of importance:
Not from a block explorer, not from a Discord alert, not from your wallet’s activity feed. History is the one surface the attacker can write to. Keep your own addresses in one trusted place — a doc, a password manager, your service config — and copy from there, every time.
The first and last four characters are exactly what the attacker matched. If you verify an address by eye, read a chunk from the middle — the attacker almost certainly couldn’t afford to match those too.
Any agent or script that sends funds should have its destination addresses pinned in configuration and compare them full-length, character for character. Never let software derive a destination from chain history. One line of config is the difference between immune and exposed.
Our Discord bot faithfully relayed the attacker’s transfer as a $0.0000 payment — which put the poisoned address in front of exactly the humans it was aimed at. We patched it the same hour: transfers below our cheapest real price are now logged as suspected poisoning and never alerted. If your fleet has a price floor, your alerts should enforce it.
Moving something that would hurt to lose? Send a token amount first, confirm it arrived at the destination you meant, then send the rest. Thirty seconds of ceremony, permanent immunity to the worst version of this.
The part that stays with us
The attack cost thirty-thousandths of a cent and was launched by a bot within minutes of our wallet doing anything worth impersonating. It failed here for an unglamorous reason: a $0.00 payment looked wrong to someone who knew the fleet’s cheapest price, and we pulled the transaction instead of shrugging. That’s the whole lesson. As agent payments pull in builders who’ve never had to think like a blockchain security auditor — which is the point of x402, and a good thing — the defenses have to live in habits and tooling, not vigilance. Vigilance doesn’t scale. Address books, full-length comparisons, and alert thresholds do.
Selling to agents?
We publish everything we learn operating 500+ paid x402 endpoints — including the incidents. The free scan checks whether stock agent clients can actually pay your endpoint, and the Server Starter Kit ships the settlement-proven dual-rail middleware we run in production, with updates dropped into buyers’ Discord as the ecosystem shifts.
Related reading: the silent v1/v2 client split that made correct endpoints unpayable and our health census of every seller in the x402 Bazaar.
- security
- wallets
- address poisoning
- field report
The x402 SDK Went v2. The Client Everyone Installs Didn’t. Your Endpoint May Be Unpayable.
We Health-Checked Every Seller in the x402 Bazaar. One in Four Can’t Take an Agent’s Money.
Three Different People Just Started Writing the Rules for How Agents Pay
The 500-Character Cliff: One Extra Byte Makes an x402 Listing Silently Unpayable
43% of the x402 Catalog Vanished Overnight. Nobody Announced It.
Open USD Blindsided Circle — and Previewed the Fight Over Agent Money