Worked example · 2022-20
Cross-Chain Locked-Liquidity and Token Metadata Spoofing Cohort — 2022–2025 — Aggregate $20M+
Summary
This cohort entry documents two distinct but structurally related T2 sub-patterns that share the same root cause: the user-facing UI displays a claim (lock receipt, token metadata) whose on-chain reality differs from what the claim implies, and the verification that would surface the discrepancy is not performed by the UI the user is looking at.
T2.003: Cross-Chain Locked-Liquidity Spoof
The cross-chain lock-spoof pattern emerged as multi-chain token launches became standard. A project deploys its tradable LP on chain B (BSC, Polygon, Solana, Base — typically a chain with weaker locker-registry coverage) while publishing a marketing claim referencing a lock receipt on chain A (Ethereum — typically the chain with the strongest locker-registry and block-explorer UX). The lock receipt is "real" in the narrow sense that a transaction hash or locker-contract entry exists on chain A, but the LP tokens referenced by that lock entry are freshly-minted tokens on chain A with no relationship to the tradable pool on chain B. The marketing claim is literally true at the transaction-hash level and semantically empty at the pool-constraint level.
Two operational sub-patterns dominate:
Lock-on-A pool-on-B (standard variant). The project explicitly or implicitly claims "LP locked" and provides an Etherscan link to a Team Finance or Unicrypt lock entry on Ethereum. The pool, however, is on BSC or Base. The lock receipt on Ethereum covers a token with the same name/symbol deployed on Ethereum, but that token has no liquidity and is not the token users are trading. The pool on BSC has no lock at all.
Address-overlap variant. The locker-contract address on chain B has the same address as a legitimate locker on chain A (e.g., the Team Finance locker at its canonical Ethereum address). Because EVM address spaces are not chain-bound, a deployer can deploy a lookalike contract at that address on chain B. The block explorer displays the address; a user who recognises the canonical Ethereum locker address may assume the deployment on chain B is the same contract. It is not — the bytecode at that address on chain B is a deployer-controlled lookalike with administrative override.
Named cases:
Snowdog DAO — Ethereum / Avalanche — November–December 2023 — ~$3M–$5M. The canonical named-incident anchor for the lock-on-A pool-on-B sub-pattern. The project marketed a Team Finance lock receipt on Ethereum while the tradable pool operated on Avalanche (Trader Joe). The Ethereum lock covered a token with no Avalanche bridge or pool relationship. The mismatch was surfaced only after the rug event when victims attempted to verify the lock claim and discovered the chain discrepancy.
Cross-chain lock-spoof cohort — 2022–2025. The broader cohort is documented within the TM-RugPull dataset (~1,028 multi-chain projects spanning 2016–2025), which explicitly spans multiple chains and contains sub-cohorts where the lock claim and pool location are on different chains. The SolRPDS dataset (~62,895 suspicious Solana liquidity pools spanning 2021–2024) provides the Solana-side counterpart for cases where a marketing claim references an Ethereum or BSC lock for a Solana pool.
T2.005 + T6.006: Token Metadata Spoofing and Counterfeit Token Impersonation
The token-metadata-spoofing pattern exploits the ERC-20 metadata primitives — name(), symbol(), decimals() — which are not standardised against a canonical registry at the wallet or block-explorer display layer. A token contract returning name() = "Tether USD", symbol() = "USDT", decimals() = 6 displays identically to the legitimate USDT at 0xdAC17F958D2ee523a2206206994597C13D831ec7 in virtually every wallet UI and block explorer, regardless of the token's actual transfer logic.
T2.005 (the metadata primitive) and T6.006 (the full-spectrum brand counterfeit) co-occur in most incidents but are structurally separable. A token that spoofs metadata without building a full off-chain brand-counterfeit operation (website, logo, social-media presence) is a pure T2.005 case relying solely on wallet/explorer display-level deception. A token that additionally deploys a clone website, copies the legitimate token's branding, and pursues CoinMarketCap/CoinGecko listing impersonation is a combined T2.005 + T6.006 case.
The BSC PancakeSwap token-impersonation wave of 2021 is the canonical chain-scale cohort: attackers deployed tokens with name()/symbol() matching top-volume PancakeSwap pairs (USDT, USDC, BUSD, ETH, BTCB), seeded thin liquidity against WBNB, and routed swaps through attacker-owned pools. Users searching for "USDT" in the PancakeSwap token selector saw multiple results, indistinguishable by metadata alone; selecting the impersonator token routed the swap through the attacker's pool, delivering a worthless token with the "USDT" label.
Operational sub-patterns:
Pure metadata spoof (T2.005 only). The token matches the legitimate asset's
name()/symbol()/decimals()but has no off-chain brand presence. It relies entirely on the wallet/explorer display of on-chain metadata to mislead users who check the token selector but not the contract address.Full brand counterfeit (T2.005 + T6.006). The token matches the legitimate asset's metadata AND the attacker deploys a clone website, copies the logo, creates social-media accounts mirroring the legitimate project's branding, and pursues listing on CoinMarketCap/CoinGecko with the impersonated identity. The user encounter with the counterfeit token can span multiple touchpoints (website, Twitter, CoinGecko, wallet) without any single touchpoint surfacing the address mismatch.
Decimals-mismatch variant. A naive impersonator returns the legitimate asset's
name()andsymbol()but getsdecimals()wrong (e.g., "USDC" withdecimals() = 18instead of6). This is the cheapest static check and catches a non-trivial fraction of unsophisticated impersonators.
The wallet/explorer UX gap is the load-bearing enabler for both T2.005 and T6.006. Wallet UIs and block explorers display the token's self-reported name() and symbol() as the primary identifier in the token selector, with the contract address typically displayed in a smaller font or hidden behind a "view on explorer" link. The user's trust decision is anchored to the human-readable name/symbol; the address verification is an optional step that no UI enforces. This is not a bug in any specific wallet — it is the industry-standard UX pattern, and the impersonation surface is a direct consequence of that pattern.
Timeline (UTC)
| When | Event | OAK ref |
|---|---|---|
| 2020–2021 | Token-impersonation wave on Uniswap V2/V3: fake USDT/USDC/ETH tokens with manipulated name/symbol/decimals fields | T2.005 + T6.006 (class emergence) |
| 2021 | BSC PancakeSwap token-impersonation wave: attacker-deployed tokens matching top-volume pair symbols, seeded thin liquidity, routed swaps through attacker-owned pools | T2.005 + T6.006 (chain-scale cohort) |
| 2022 | Cross-chain lock-spoof pattern characterised in multi-chain rug-pull retrospectives | T2.003 (class emergence) |
| 2023-11 to 2023-12 | Snowdog DAO: lock-on-Ethereum Team Finance / pool-on-Avalanche Trader Joe; ~$3M–$5M | T2.003 (canonical named case) |
| 2022–2025 | Cross-chain lock-spoof cohort documented at scale in TM-RugPull (~1,028 multi-chain projects) and SolRPDS (~62,895 suspicious Solana pools) datasets | T2.003 (cohort scale) |
| 2024–2025 | Token-metadata-spoofing pattern persists across all major DEXs; no wallet or explorer integrates canonical-address cross-referencing as a default UX feature | T2.005 + T6.006 (ongoing) |
Public references
[tmrugpull2026]— TM-RugPull dataset: ~1,028 multi-chain rug-pull projects spanning 2016–2025[solrpds]— SolRPDS dataset: ~62,895 suspicious Solana liquidity pools spanning 2021–2024[chainalysis2025rug]— Chainalysis annual crypto-crime reporting documenting lock-misrepresentation as a recurring rug-pull enabler[slowmist2024report]— SlowMist annual blockchain security report- Uniswap Token List, CoinGecko token list, 1inch Token List, Solana Token List — canonical token registries against which metadata cross-referencing should be performed
- See
techniques/T2.003-cross-chain-locked-liquidity-spoof.md,techniques/T2.005-token-metadata-spoofing.md, andtechniques/T6.006-counterfeit-token-impersonation.mdfor Technique definitions
Discussion
The T2.003 / T2.005 / T6.006 cluster shares a common structural signature: the claim that the user sees (lock receipt on chain A, "USDT" in the token selector, brand assets on a clone website) is technically true at its own layer and semantically false at the layer that matters for the user's economic decision. The cross-chain lock receipt exists — but not for the pool the user is trading. The token metadata says "USDT" — but the contract address is not the canonical USDT deployment. The website looks legitimate — but the contract it links to is the impersonator.
The defender's highest-leverage intervention is UI-layer canonical cross-referencing: wallets and block explorers that display the token's self-reported name/symbol alongside a registry-backed "verified"/"unverified" badge based on canonical-address lookup; DEX aggregators that flag cross-chain lock-receipt mismatches at the pool-listing layer; and locker-contract registries that are unified across chains rather than per-chain silos. Each of these interventions is a UX change, not a protocol change, and the surface they close is large relative to the implementation cost.