SwapChan

Where crypto money gets stuck (and how to get it back)

Swap-chan
SwapChan is here to help you find your money, senpai! Paste a wallet and I'll look in every corner I know: old dividend contracts, vaults, LP fees, unstakes, wrapped ETH, Safes, Solana stake. Then I hand you the exact transaction to get it back, and a swap to USDC.
Find my money →

1. It finds your lost money

A real wallet we tested had 1.27 ETH of PoWH3D dividends sitting in a 2018 contract, plus 0.0168 ETH in a Fomo3D vault. Replaying our checks at the block before each withdrawal finds those amounts to the wei and builds the same withdraw() call the owner actually sent. Those replays are now regression tests.

Every finding ends in a link

  1. Step 1, get it back: a permanent swapchan.com/recover page. It decodes the call, you connect your wallet and sign it yourself. We only build calls that pay you (withdraw, exit, redeem to self, collect to self, claimWithdrawal) and never send value.
  2. Step 2, swap it: a prefilled SwapChan swap to USDC, with a short link.
  3. Swap all of it: one batch link for everything found.

Trustless by design

SwapChan never signs transactions, never holds your keys or funds, and can't store or spend money. It only builds unsigned transactions. Your own wallet signs every step, and you can read the decoded call before you do.

2. Your agent does it for you

Add the SwapChan MCP server and your agent gets the find_money tool. Then just say:

“Here's my wallet, find me money.”

It returns ranked findings with the recover step, the swap step and the swap-all link. You still sign everything in your own wallet.

Agent-first: information, not just buttons

SwapChan is built to make agents smart about chain state. Every finding comes back as a structured, verifiable recovery package your agent can reason over, re-check and act on alone:

  • contract: chain, address, explorer and verified-source link
  • detection: each read call, args, block number and raw return value
  • interface: ABI fragments for the reads and the recovery function
  • value: estimated USD plus the pricing source
  • recoveryTx: exact unsigned to / data / value, checked to pay only you
  • swapUrl + short link, and a swap-all batch link
"recovery": {
  "contract": { "chainId": 1, "address": "0xB3775fB83F7D12A36E0475aBdD1FCA35c091efBe",
                "verifiedSource": "https://etherscan.io/address/0xB377…efBe#code" },
  "detection": [{ "call": "dividendsOf(address)", "block": "26095609",
                  "raw": "1272687502039539941" }],
  "interface": { "reads": ["function dividendsOf(address) view returns (uint256)"],
                 "recovery": "function withdraw()" },
  "value": { "estUsd": 4200, "pricingSource": "DefiLlama coins API" },
  "recoveryTx": { "to": "0xB377…efBe", "data": "0x3ccfd60b", "value": "0",
                  "unsigned": true, "verified": true }
}

Full agent loop: find_money → signing_guide / verify_tx → human signs → broadcast_tx. Lost the key? Key recovery hub.

Set this up for my agent

3. It's completely free, and here's why

No signup, no fee for checking, no cut of what you recover. It's free because recoveries usually end in a swap, and if you swap on SwapChan we earn our normal small swap fee. The free finder is how people meet SwapChan. You can also take the recovery tx and swap anywhere you like.

The map: every place we know money gets stuck

CategoryChainsExamplesHow we detect it (read-only)Coverage
Legacy dividend contractsEthereumPoWH3D (P3D), Fomo3D, EtherDeltadividendsOf / getPlayerVaults / balanceOf on the contractCovered
Vault & yield sharesEVMERC-4626 vaults, Yearn v1/v2share balance Ă— convertToAssets + redeem/withdraw tx + evidenceCovered
Uncollected LP feesEVMUniswap v3 positionspositions() tokensOwed + static collect()Covered
Accrued lending rewardsEVMCompound COMP, Venus XVScompAccrued / venusAccruedCovered
Lending depositsEVMAave, Compound, Venus, JustLendaToken / cToken / jToken balancesCovered
Unwrapped wrapped nativeEVM + TronWETH, WBNB, WPOL, WAVAX, WTRXbalanceOf + withdraw evidenceCovered
Finalized unstake requestsEthereumLido withdrawal NFTsgetWithdrawalRequests + getWithdrawalStatus + evidenceCovered
Forgotten multisigsEVMSafeSafe tx service owners → safes, native balanceCovered
Merkle airdrops & rewardsEVMMerkl + UNI/ENS/1INCH/OP/ARB distributorsMerkl API + distributor portals / claim trees when publishedCovered
Old LP tokensEVMUniswap v2, Sushi pairsLP balance Ă— reserves + removeLiquidity tx (approve router first)Covered
Rent in empty token accountsSolanaSPL token accountsgetTokenAccountsByOwner, zero balanceCovered
Deactivated stake accountsSolanaNative stakegetProgramAccounts + StakeProgram.Withdraw svm-instructionsCovered
Solana program archaeologySolanaHistory programs + SPL balancessignatures → program ids; token accounts by ownerNew
Tron stake / votes / resourcesTronStake 1.0+2.0, voting rewards, delegated BW/energygetaccount + WithdrawBalance / WithdrawExpireUnfreezeCovered
Tron DeFi + archaeologyTronJustLend, WTRX, JST, USDJ, sTRX/stUSDT, SUN, 2019–21 dividend dappsTronGrid views + recoveryHints + promote-candidates logNew
L2 withdrawals not finalizedOptimism, Arbitrum, BaseOP/Base MessagePasser, ArbSysDetect prior withdraw txs; prove/finalize still manual on official bridgesNew
Bridge exitsPolygon PoS, Multichain, CelerPoS portal, Anyswap, cBridgeHistory detect + explain (Multichain often unrecoverable)New
Gauges, escrow, streamsEVMCurve/Convex, Synthetix, Sablier, Pendle, GMX, Rocket Pool rETHknown-contract registry handlers + evidenceNew
Governance airdropsEVMENS, UNI, 1INCH, OP, ARBDistributor live check + claim tx when merkle tree publishedNew
BitcoinBTCxpub / bc1 / legacy addressesblockchain.info multiaddr + mempool.space UTXO (read-only)New
Unknown contract archaeologyEvery supported chainAny history contract with earned/claimable/balanceProbe recovery selectors, Sourcify ABI, confidence + promote-to-registry logNew

“Not yet” means we say so in results instead of pretending. Mixers are out of scope.