Skip to main content

Address poisoning and pre-send verification: per-chain anatomy + the 5-second check against the 2026 attack surge

Address poisoning attempts hit 34,000 per hour (Trust Wallet, sampled 2026-06-26; same source for 225M+ cumulative attempts and $500M+ confirmed stolen) and Ethereum daily attempts jumped from 628K in November 2025 to 3.4M by January 2026 after Ethereum's Fusaka upgrade cut gas costs ~6x (BeInCrypto, sampled 2026-06-26). The 5-second rule before any send: check the 6 middle characters of the address, verify on the hardware-wallet screen, and send a $20-50 first-corridor test. Different chains break differently when a character flips — TRC20 and BTC reject silently, Solana does not.

· 14 min read

Key takeaways

Frequently asked questions

Is a bech32 BTC address really safer than a legacy 1... address?

Yes, but the safety property is narrower than people assume. Bech32 (BIP173, the bc1q... format) uses a BCH polymod checksum that is mathematically guaranteed to detect ANY combination of up to 4 character substitutions for addresses up to 89 characters, and can often hint at which character is wrong. Legacy 1... and 3... addresses use Base58Check, a 32-bit double-SHA256 checksum: it almost always catches single-character typos (collision probability ~1 in 4 billion), but it cannot localize the error and gives no clean guarantee on multi-character corruption. Taproot (bc1p..., Bech32m, BIP350) carries the same 4-character detection guarantee while fixing a known mutation flaw in original Bech32. Important caveat: NONE of this protects against address poisoning, where the attacker shows you a checksummed-valid address that simply belongs to them. Checksums protect against typos and bit-flips, not against fraudulent intent.

Why doesn't Solana have an address checksum?

Solana addresses are the raw 32-byte Ed25519 public key encoded in Base58, with no version byte, no checksum byte, and no error-correcting code (Coin.space documentation, sampled 2026-06-26). Base58's alphabet drops visually ambiguous characters (no 0, O, I, l), which prevents some categories of OCR/typo errors, but that is a glyph-design property, not a checksum. The practical consequence is that a single-character typo on a Solana address produces a different but still 'valid-looking' 32-byte value the runtime will accept. Funds vanish into an address whose private key nobody holds — or, as has been documented, attackers pre-generate vanity addresses resembling common recipients so a typo can route to an attacker-controlled address rather than a dead one. This is why Solana is structurally the most poisoning- and typo-vulnerable of the four major chains. The widget-side validator can confirm length and Base58 alphabet but cannot detect single-character substitutions. On-device hardware-wallet verification and a small first-corridor test transfer matter more on Solana than on any other chain in this guide.

Can a poisoned address ever be safe to reuse later?

Treat any address that appeared in your wallet via an unsolicited dust transfer or a zero-value transferFrom as permanently hostile. Do not copy it. Do not 'return' the dust. Do not whitelist it. SlowMist's Dark Forest Self-Guard Handbook (sampled 2026-06-26) is explicit: 'avoid copying and pasting addresses without checking — even if an address appears in the transaction history, users should always verify that it is correct.' The December 2025 USDT victim sent a 50 USDT test successfully, the attacker dust-poisoned the history within minutes, and 26 minutes later the victim copied the poisoned address from history believing it was the recently-validated counterparty (Coindesk, 2025-12-20, sampled 2026-06-26). The poisoned address was never safe — it was designed from the start to be visually indistinguishable from the legitimate one.

Does a hardware wallet like Ledger or Trezor prevent address poisoning?

It substantially reduces — but does not eliminate — the risk, and the protection is narrower than commonly assumed. Trezor's official guidance (sampled 2026-06-26) is: 'Carefully compare the receive address you copy & paste with the one shown on your Trezor device. If they are different, your computer may be infected by malware.' Ledger's guidance is parallel: 'Always verify the destination address on your Ledger device before sending funds, checking every character, not just the first or last few.' The threat model the device defends against is host compromise: malware tampering with the address displayed in your browser or wallet app on the computer. The device displays the same bytes that get signed by its secure element. What it does NOT defend against is the case where YOU originally copied a poisoned address out of a history list before pasting it anywhere. The hardware wallet faithfully signs whatever you, having looked at the screen, confirm. The protection requires the user to actually compare every character, especially the middle ones — see the MetaMask guidance on middle characters.

What if my own wallet shows a poisoned address in its suggestions or recent contacts?

This is exactly the surface the December 2025 USDT and January 2026 4,556 ETH incidents exploited. Modern wallets — MetaMask, Trust Wallet, Rabby, Blockaid-integrated wallets — now flag dust from lookalike addresses, expand the displayed range from '0xEdf89...ff7ED' to '0xEdf89FdA047F28...C6341a8ff7ED', and block transactions when the first 4 and last 4 characters match a previous interaction but the middle differs (MetaMask Support, sampled 2026-06-26). Practical defense: (1) update your wallet to a version with poisoning detection, (2) NEVER copy a recipient address from transaction history — only from the counterparty's signed message, their official page, or your own pre-saved whitelist whose entries came from outside the history, (3) hide or label suspicious dust so it does not autocomplete. UpSwap's widget has no address history at all (verified in src/components/steps/Step2Recipient.tsx, sampled 2026-06-26) — but if you paste a poisoned address INTO it from a compromised wallet, the widget will accept what you pasted. The structural immunity does not propagate backward into your wallet.

The middle-character rule — why middle, not just first and last?

Because that is the only part vanity-address generation cannot cheaply forge. A GPU-accelerated brute-force generator can match the first 5-6 and last 4-6 characters of a target address within a feasible compute budget at consumer hardware costs (per CertiK / Halborn published analyses; the December 2025 attacker matched 5 chars front, 4 chars back, per Coindesk, 2025-12-20, sampled 2026-06-26). Matching all 30-ish middle characters of an Ethereum address simultaneously is computationally infeasible at any realistic budget — that is the security of the full 160-bit address space. Wallet UIs that abbreviate as '0xABCD...WXYZ' are showing you exactly the parts the attacker can cheaply forge and hiding the parts they cannot. The middle-character rule reverses this. MetaMask's mitigation explicitly expands the displayed range so middle characters are visible, and blocks sends when middle differs from a prior counterparty (MetaMask Support, sampled 2026-06-26). On a hardware wallet, scroll through the full address on-device and compare to a source-of-truth you obtained outside the wallet history.

Is a $20-50 test transfer enough on Ethereum mainnet given current gas costs?

The test transfer's purpose is verification, not value-protection, so the absolute amount matters less than the procedure. Crypto.com, Kraken, Effective Currency, and Coinbase all converge on $1-50 as the canonical range, with $20-50 typical for high-value corridors (Effective Currency Test Transfers guide, sampled 2026-06-26). A test transfer verifies four things: correct network (the Guide #2 mistake class — see /guides/usdt-network-decision-guide-erc20-trc20-bep20-spl), wallet compatibility on the destination, no copy-paste typo or hidden-character corruption, and realistic fee and timing expectations. What it does NOT verify is the poisoning case where the destination address is one you copied from a poisoned history list — because the test transfer arrives 'successfully' at the attacker's wallet. The December 2025 USDT victim's 50 USDT test went through cleanly, which is precisely why they trusted the address 26 minutes later when sending $50M. Combine the test transfer with the middle-character check and an out-of-band confirmation with your counterparty (signal, in-person, signed message) — not as a substitute for them.

Does address poisoning affect chains like Cosmos, Avalanche, Polygon, NEAR?

Yes, with chain-specific variations on the mechanism. Any EVM-equivalent chain (Polygon, Avalanche C-chain, BSC, Arbitrum, Optimism, Base) inherits the zero-value transferFrom permissive semantics — the ERC-20 standard's permissive zero-value rules apply identically, so the December 2025 / January 2026 attack pattern transplants directly (OpenZeppelin issue 3931, sampled 2026-06-26). EIP-55 checksumming is consistent across EVM chains; EIP-1191 extends it with chain ID. Cosmos addresses use Bech32 with chain-specific HRPs (cosmos1, osmo1, juno1) and inherit Bech32's 4-character detection. NEAR uses human-readable account IDs (alice.near) with no cryptographic checksum — typo risk is real, and lookalike account IDs can be registered given the human-readable namespace (no published cost study for NEAR vanity generation in fact pack at sample time). Tron USDT (TRC20) has been a primary poisoning target via dust-based variants since 2022 — the attack pattern is dust-with-lookalike (mechanism 2 in section above) rather than zero-value. UpSwap supports 24+ chains and 111+ tokens across 166 combinations; per-pair landing pages (/swap/usdt-trc20-to-erc20, /swap/eth-to-sol) preset the chains but the recipient address is still manually entered per session.

Swap routes referenced in this guide

Related comparisons

Other guides

Ready to swap?

Pick your tokens and swap directly — non-custodial, no KYC, all-in fixed quote.