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.
Key takeaways
- ·The 5-second pre-send check: read the 6 characters in the MIDDLE of the destination address (not just first and last), verify them on your hardware-wallet screen if you have one, then send a $20-50 test before the full amount.
- ·Address poisoning attempts reached 34,000 per hour and over 225 million total detected, with $500M+ confirmed stolen (Trust Wallet, sampled 2026-06-26). Ethereum's Fusaka upgrade (2025-12-03) cut blob/calldata gas costs roughly 6x and daily poisoning attempts jumped 5.5x in two months.
- ·Three distinct mechanisms: zero-value transferFrom (permissive zero-value semantics in ERC-20 — emits a real Transfer event without victim consent), dust poisoning (tiny inbound transfer from a vanity-generated lookalike address), and pure vanity address generation (matches first 5-6 and last 4-6 characters of the real address).
- ·Per-chain anatomy determines what happens on a one-character typo: TRC20 Base58Check rejects it (~1 in 4 billion collision), EIP-55 ERC20 warns or rejects (~0.025% miss rate), Bech32 BTC detects ALL up to 4-char errors, Solana has NO checksum at all so funds vanish silently.
- ·The UpSwap (99b.io) widget has no saved address book, no autocomplete from past sends, no inbound history — structurally immune to history-based poisoning. NOT immune if your own wallet is poisoned, NOT immune to social engineering, NOT immune if a seed phrase from an old wallet export still exists with an attacker (cloud backup, screenshot, email, old laptop).
If you are reading this because you noticed a small unexpected transfer in your wallet, or you are about to move a large amount and want to verify the destination correctly, this guide gives you the pre-send rules that would have prevented the December 2025 $50M USDT loss and the January 2026 4,556 ETH loss. It covers the three distinct poisoning mechanisms, the per-chain address anatomy that determines what a single-character typo does, and a 7-step checklist usable on any chain. The honest part: a non-custodial swap widget without address history is structurally immune to one specific attack class, but immune to none of the others.
The 5-second pre-send rule
Ethereum's Fusaka upgrade (2025-12-03) cut blob/calldata gas costs roughly 6x and removed the economic brake on mass dust distribution — daily poisoning attempts on Ethereum jumped from 628K in November 2025 to 3.4M by January 2026 (BeInCrypto, sampled 2026-06-26). The single rule that works across TRC20, ERC20, Solana, and Bitcoin: compare the 6 characters in the MIDDLE of the destination address against a source-of-truth you did NOT get from your wallet history. Vanity-address brute-force can cheaply match the first 5-6 and last 4-6 characters of any target address — the December 2025 attacker matched 5 in front and 4 behind on the $50M USDT loss (Coindesk, 2025-12-20, sampled 2026-06-26). The middle is the part they cannot forge.
The 5-second pre-send check:
- Middle 6 characters match a source you obtained outside your wallet history (counterparty signed message, official receive page, pre-saved whitelist).
- Hardware wallet on-device display shows the same address as the host (Trezor and Ledger official guidance, sampled 2026-06-26).
- First-corridor test of $20-50 before any send over a few thousand dollars (Crypto.com, Kraken, Effective Currency convergence, sampled 2026-06-26).
The remainder of this guide explains why each step matters and what differs between chains. If you read nothing else, the 5-second rule above is enough.
Why poisoning works — three mechanisms with a named victim each
Address poisoning is not one attack. It is three related techniques that all converge on the same outcome: you copy a destination address from somewhere you trust, believing it is your counterparty, when it is actually an attacker's wallet built to look identical.
Mechanism 1 — Zero-value transferFrom poisoning (ERC-20 only). The ERC-20 standard does not require a non-zero allowance to call transferFrom(victim, attacker, 0). An attacker calls this on the USDT contract with the victim as source and a vanity-generated lookalike address as destination. The transaction succeeds, emits a real Transfer(victim -> lookalike, 0) event, costs the victim no gas, and block explorers index it as an outbound transfer from the victim's wallet (OpenZeppelin issue 3931, sampled 2026-06-26). Days later the victim sees the 'transfer' in history and copies the destination thinking it is their OTC desk. Named incident: January 2026, 4,556 ETH (~$12.4M) lost to a lookalike address 0x6d9052b2...e592e48 of an OTC deposit address pattern (the victim's intended counterparty was reportedly using a Galaxy Digital OTC address per Cyvers; Galaxy Digital itself was not the compromised or victim party) after 37 hours of systematic dusting (Blockchain.news / Cyvers, sampled 2026-06-26).
Mechanism 2 — Dust / dust-back poisoning (works on chains without the zero-value loophole). Attacker sends a real but tiny transfer — fractions of a cent in stablecoin or native — from a vanity-generated lookalike INTO the victim's wallet. The inbound transaction shows the lookalike in the victim's receive history. Named incident: Coin Metrics Issue 349 documents one wallet (0x455bf23ea7575a537b6374953fa71b5f3653272c) sending ~3 million dust transfers to over 1 million victim addresses for a total stablecoin value of just $5,175 — fractions of a cent per victim, but enough surface to plant the lookalike (Coin Metrics, sampled 2026-06-26).
Mechanism 3 — Pure vanity-generated lookalike address. The shared prerequisite for both attacks above. Profanity-style or modern GPU-accelerated generators derive a private key whose address matches the target's first N and last N characters within a feasible compute budget at consumer hardware costs (per CertiK / Halborn published analyses). Wallet UIs that abbreviate as 0xABCD...WXYZ show exactly the cheap-to-forge segments and hide the expensive ones. Named incident: December 2025, $50M USDT. Victim sent a 50 USDT test successfully, attacker dust-poisoned within minutes from a vanity-generated lookalike matching the first 5 and last 4 characters, victim copied the spoof from history 26 minutes after the test and sent ~$50M. Funds were swapped to ~16,690 ETH and ~16,680 ETH deposited into Tornado Cash in under 30 minutes (Coindesk, 2025-12-20, sampled 2026-06-26).
The 2026 surge — by the numbers, with source URLs
The attack volume in late 2025 and early 2026 is not a marketing scare. Independent sources converge on the same trend, and the catalyst is identifiable: Ethereum's Fusaka upgrade activated 2025-12-03 and cut blob/calldata gas costs roughly 6x, removing the economic brake on mass dust distribution (The Defiant, sampled 2026-06-26).
| Metric | Value | Source (sampled 2026-06-26) |
|---|---|---|
| Trust Wallet detected attempts (cumulative) | 225 million+ | Trust Wallet announcement blog |
| Trust Wallet confirmed stolen (cumulative) | $500 million+ | Trust Wallet announcement blog |
| Trust Wallet observed attack rate | ~34,000 per hour | Trust Wallet announcement blog |
| Blockaid flagged since Jan 2025 | 65.4 million transactions (avg 160K/day) | Blockaid research blog |
| Blockaid confirmed successful drains | ~316,000 (roughly 1 in 200 attempts) | Blockaid research blog |
| Ethereum daily attempts pre-Fusaka (Nov 2025) | 628,000 | BeInCrypto / Fusaka surge report |
| Ethereum daily attempts post-Fusaka (Jan 2026) | 3.4 million (5.5x increase in 2 months) | BeInCrypto / Fusaka surge report |
| ETH daily dust transactions (post-Fusaka peak) | 30K -> 167K avg, peak 510K Jan 2026 | Coin Metrics Issue 349 |
| USDT dust transfers post-Fusaka | 4.2M -> 29.9M (+612%) | Coin Metrics Issue 349 |
| ScamSniffer 2-month aggregate loss | $62M (late 2025 - early 2026) | Crypto.news / ScamSniffer |
| Chainalysis 2026 crypto crime context | $154B sent to illicit addresses in 2025; $3.4B total theft | Chainalysis 2026 Crypto Crime Report |
Honest caveat: where aggregated derivative-coverage figures (e.g. a circulated $83.8M aggregate attributed to Chainalysis) appear in third-party write-ups, they were not directly confirmed in the Chainalysis report at sample time and should be treated as derivative until cross-checked.
One framing detail that matters: Blockaid's 1-in-200 success rate means the absolute number of victims is far smaller than the attempt count suggests, but the average loss per successful drain is large enough that aggregate losses are still material — and the success rate goes up sharply on high-value transfers because attackers concentrate dust on wallets they have profiled as whales.
Per-chain address anatomy — what a single character flip actually does
The reason every chain has different poisoning vulnerability is that every chain has different address-format guarantees. Here is what is actually in your address, what gets checked, and what happens when one character is wrong.
TRC20 (Tron) — 34 characters, starts with T
[0x41 prefix : 1 byte]
[20-byte payload = last 20 bytes of Keccak-256(secp256k1 pubkey)]
[4-byte checksum = first 4 bytes of double-SHA-256(prefix||payload)]
= 25 bytes total -> Base58 encode -> 34 visible chars (leading T)Encoding: Base58Check (Tron Protocol documentation, sampled 2026-06-26). Why every Tron address starts with T: 0x41 forces the leading character into the T range mathematically. What a single-character flip does: cascades through Base58 decoding and breaks the 4-byte tail checksum. Collision probability ~1 in 4 billion. Any compliant wallet refuses to broadcast. Poisoning vulnerability: not from typo — from vanity-generated lookalikes plus dust-based history poisoning (Tron USDT has been a primary poisoning target since 2022).
ERC20 (Ethereum and all EVM chains) — 42 characters, 0x + 40 hex
[0x prefix]
[20 raw bytes = last 20 bytes of Keccak-256(uncompressed secp256k1 pubkey)]
-> 40 hex chars; EIP-55 overlays case as optional checksum
EIP-55 rule: for each hex char of lowercased addr,
if the corresponding nibble of Keccak-256(lowercased addr w/o 0x) >= 8
then UPPERCASE that charEIP-55 specification, sampled 2026-06-26. Yields ~15 effective check bits. Random-typo miss rate ~0.0247%. What a single-character flip does: changes content, breaks case pattern, EIP-55-aware wallets warn or reject. EIP-1191 (ERC-1191) extends EIP-55 with chain ID. Critical caveat: case-insensitive all-lowercase addresses bypass EIP-55 entirely. Older clients accept them silently. Poisoning vulnerability: highest practical impact because EVM is where the zero-value transferFrom permissive semantics live.
Solana — 32-44 Base58 characters, no prefix
[32 raw bytes = full Ed25519 public key]
-> Base58 (NOT Base58Check) -> 32-44 visible chars
no version byte, no checksum byte, no error-correcting codeEncoding: Base58 (not Base58Check) of the raw Ed25519 public key (Coin.space documentation, sampled 2026-06-26). Error detection: none. Base58's alphabet eliminates visually ambiguous characters (no 0/O/I/l), but that is a typo-prevention property, not a checksum. What a single-character flip does: produces a different but still valid-looking 32-byte value. The runtime accepts it. Funds vanish into an address with no known private key — 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. Poisoning vulnerability: structurally the most vulnerable of the four. Hardware-wallet on-device verification matters more on Solana than anywhere else.
Bitcoin — four formats coexisting
P2PKH (prefix 1): [0x00 ver][RIPEMD160(SHA256(pubkey)) : 20B][4B checksum] -> Base58Check
P2SH (prefix 3): [0x05 ver][20B script hash][4B checksum] -> Base58Check
Bech32 (prefix bc1q): HRP "bc" + "1" + [witness ver 0] + [20B or 32B program]
+ [6-char BCH polymod checksum] (BIP173)
Bech32m(prefix bc1p): same as Bech32 but polymod constant = 0x2bc830a3 (BIP350)
fixes a known Bech32 mutation flawWhat a single-character flip does: all four formats are checksummed. Single-char flip is virtually guaranteed to fail. Bech32 and Bech32m additionally guarantee detection of ALL up to 4-character substitutions for addresses up to 89 chars and can localize the wrong character (BIP173, sampled 2026-06-26). Poisoning vulnerability: typo risk is the lowest of the four chains; lookalike poisoning still applies because checksums do not verify ownership intent.
The 7-step pre-send checklist
Each step is a do-this-now action. Run them in order. The full sequence takes under two minutes on a wallet you have used before, longer on a first-time send.
Source the address from outside wallet history: get the destination address from a place that is not your wallet's transaction history or autocomplete dropdown. Acceptable sources: counterparty's signed message, exchange's official deposit page reached via a manually-typed bookmark, a whitelist you maintain in a separate signed document. Unacceptable: anything you 'know' you 'sent to before' (this is exactly what the December 2025 victim believed).
Verify the middle 6 characters: read the 6 characters in the visual middle of the address. Compare to the source of truth. Brute-force vanity generation can cheaply match 5-6 in front and 4-6 behind; matching middle simultaneously is computationally infeasible at any realistic budget. MetaMask now expands the abbreviated display specifically to show middle characters (MetaMask Support, sampled 2026-06-26).
Bookmark the real domain: navigate to the receiving exchange or service via a bookmark you saved manually, not via search results. Phishing domains are a separate but adjacent attack vector that produces the same outcome — a wrong destination address.
Re-check the clipboard after paste: clipboard-hijacker ('clipper') malware silently replaces the address in your clipboard between copy and paste. After pasting, look at the field and re-verify the middle characters. Do not assume the paste matches the copy.
Confirm the address on the hardware-wallet screen: if you have a Trezor or Ledger, verify the address on the device screen, not the host screen. Trezor's guidance: '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 — verify every character, not just first or last few (Trezor and Ledger support docs, sampled 2026-06-26).
Send a first-corridor test of $20-50: for any send over a few thousand dollars, or any first-time corridor (new chain pair, new counterparty), send a $20-50 test, wait for on-chain confirmation, verify the destination credited the intended account, then send the remainder. Crypto.com, Kraken, Effective Currency, and Coinbase all converge on this practice (Effective Currency Test Transfers, sampled 2026-06-26). Caveat: a successful test does NOT validate the address against poisoning — the December 2025 victim sent a 50 USDT test successfully and was poisoned in the 26 minutes between test and full send.
Confirm refundTo is complete on cross-chain swaps: if you are using a swap router or aggregator, fill the refund address completely, on the correct chain. Guide #1 covers the refundTo failure modes; the short version is that an empty or wrong refundTo field can route a failed swap's funds into an inaccessible address even when the destination address was correct.
Why a non-custodial widget without history is structurally immune to history-based poisoning — and where that ends
The UpSwap (99b.io) widget has, by design, no surface that history-based poisoning can plant lookalike addresses into. Verified in source on 2026-06-26 across SwapWidget.tsx, Step1Quote.tsx, Step2Recipient.tsx, Step3Send.tsx, Step4Complete.tsx, and stores/swap.ts:
- No saved address book. The recipient field in
src/components/steps/Step2Recipient.tsxhas one state (recipient: string) and one paste handler. No autocomplete suggestions, no dropdown of past recipients, no contacts list. - No autocomplete from past sends. The component re-renders the recipient input as empty on each new swap session unless the user manually persists the field through their own clipboard.
- No inbound transaction history. The widget is non-custodial and per-session: no wallet connect, no on-chain history fetch, no Transfer event indexing, no incoming-tx panel. There is no UI surface where a poisoned dust transaction or zero-value transferFrom event could appear and be misread.
- Persistence is bounded.
src/stores/swap.tspersists ONLYrecentOrderIds(last 5 order IDs for status tracking) via Zustandpersistwithpartialize: (s) => ({ recentOrderIds: s.recentOrderIds }). Order IDs are opaque vendor references, NOT user addresses. The jurisdiction modal persists only a single acceptance flag. - Format-level validation via
src/lib/validation -> validateAddresswith chain-specific validators (EVM, Bitcoin, Solana, Tron, TON, Sui, NEAR, Zcash, Cardano, Stellar, XRP, Dogecoin, Litecoin, BCH, and others across the 24+ supported chains). Invalid format blocks the Next button viadisabled={!validation?.valid}. This catches structural typos against EIP-55, Base58Check, and Bech32 polymod — but it cannot catch Solana single-character flips (no checksum) or EIP-55-stripped lowercase ETH addresses.
The competitive framing is structural, not feature-based. Wallets like MetaMask, Trust Wallet, Trezor Suite, and Ledger Live need a history-based-poisoning detection layer because they have address history. UpSwap does not need that layer for the history-based-poisoning class because it does not have the surface. This is the same kind of structural property as a hardware wallet not having a software-signing path — a design pattern, not a claim of equivalent overall safety, and a hardware wallet structurally cannot sign without device confirmation in the same way.
1. Not immune if your own wallet has been poisoned. When you copy a recipient address out of your MetaMask, Trust Wallet, or Phantom history INTO the UpSwap recipient field, the widget accepts whatever you pasted. The immunity is one-sided — it does not propagate backward into your wallet.
2. Not immune to social-engineered manual entry. If you are told the wrong address by a fake support agent or a hijacked Telegram channel and you type or paste it in yourself, the widget cannot tell the difference.
3. Not immune if a seed phrase from an old wallet export still exists with an attacker — cloud backup, screenshot, email, an old laptop. UpSwap is not a recovery layer for previously-leaked keys; if the destination wallet's seed was leaked years ago and the attacker holds the private key, no widget-side property can prevent the eventual drain.
Per-pair landing pages (covering 24+ chains, 111+ tokens, 166 combinations) SSR-inject a chain and token preset, which controls the fromChain/toChain selection only. The recipient address is still manually entered each session. The pre-send checklist in the section above applies on every send regardless of which surface you use.
Named-incident reference table and what each one teaches
The four incidents below cover the design space: the recent record loss, the recent whale loss, the historical record loss, and the historical inflection that industrialized the toolchain.
| Incident | Date | Loss | Mechanism | Primary source (sampled 2026-06-26) |
|---|---|---|---|---|
| $50M USDT copy-paste loss | 2025-12-20 | $50,000,000 | Vanity-generated lookalike (5+4 chars match); dust-poisoned history 26 min after test transfer; victim copied from history | Coindesk |
| 4,556 ETH OTC lookalike (intended counterparty reportedly a Galaxy Digital OTC address per Cyvers; Galaxy Digital itself was not the compromised or victim party) | 2026-01 (37h post-dusting) | $12,400,000 | Vanity-generated lookalike of OTC deposit address; systematic dusting Dec 2025 - Jan 2026; victim copied lookalike during routine OTC transfer | Blockchain.news / Cyvers |
| $68M WBTC whale poisoning | 2024-05 | $68,000,000 (1,155 WBTC) | Vanity-generated lookalike populated victim's history; victim copied wrong address. Funds later returned by attacker after public negotiation. | Halborn post-mortem |
| Profanity vanity-address exploitation (precursor) | 2022-09 | $3,300,000 (multiple wallets including a Wintermute address) | Profanity generator's weak 32-bit seed allowed retroactive private-key derivation; made vanity generation cheap enough to industrialize subsequent poisoning | Halborn / Decrypt |
What each one teaches: the December 2025 case proves a successful test transfer does not validate the address against poisoning (the test went to the real address, the $50M went to a different address copied from history 26 minutes later). The January 2026 case proves systematic dusting over weeks is the new norm — 37 hours minimum between first dust and exploit. The May 2024 case proves the technique scales to nine figures and that public negotiation occasionally recovers funds (rarely). The September 2022 Profanity case is the inflection point: from that date forward, vanity address generation at scale became cheap enough that poisoning could move from targeted to industrial.
One last question before any large send: where did this address come from, and can I verify it from a different source than where I copied it? If the answer is 'from my wallet history' or 'from a chat that might be hijacked', stop and re-verify out-of-band. The 5-second pre-send rule at the top of this guide is the operational form of that question — built for situations where you do not have time to think about it. For pre-send alerts and chain-specific advisories before they reach exchange status pages, contact UpSwap support at @upswapservice on Telegram.
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
- USDT (Ethereum / ERC20) → USDT (Tron / TRC20) →
- USDT (Tron / TRC20) → USDT (Ethereum / ERC20) →
- BTC (Bitcoin Mainnet) → USDT (Tron / TRC20) →
- ETH (Ethereum / Mainnet) → USDT (Tron / TRC20) →
- SOL (Solana) → USDT (Tron / TRC20) →
- ETH (Ethereum mainnet) → SOL (Solana mainnet) →
- BTC (Bitcoin mainnet) → ETH (Ethereum mainnet) →
- USDT (Tron / TRC20) → USDC (Ethereum / ERC20) →
Related comparisons
Other guides
- Non-Custodial vs Custodial: Where Funds Go If Swap Fails →
- Further reading: USDT ERC20 vs TRC20 vs BEP20 vs SPL: which network to send, when (2026 fee snapshot + 5-use-case decision tree) →
- Related: My cross-chain swap is stuck — diagnose by symptom and source chain (BTC / ETH / SOL / TRC20 5-minute decision tree) →
- The 5-layer fee stack of every cross-chain swap (3 routes, 2026-06-26) →
- Further reading: Binance withdrawal vs cross-chain swap: the real break-even by size, chain and asset (sampled 2026-06) →
- Related: Sent USDT to the wrong network? The 2026 recovery decision matrix + DIY private-key rescue walkthrough →
Ready to swap?
Pick your tokens and swap directly — non-custodial, no KYC, all-in fixed quote.