A dormant BNB position, still in its original 2017 ERC-20 form on Ethereum, sitting on a discontinued hardware wallet. No exchange account. A position large enough to be the market that had to absorb it. This is a guide to exiting thin liquidity without paying for the privilege, and to the uncomfortable discovery that most of the prices on screen were never real.
"The keys are lost." They were not. The device was located and unlocked. But the signing account was not where any modern wallet looked for it: it lived on an older derivation scheme, invisible to the default account list. Anyone who stopped at "my wallet doesn't show it" would have concluded the funds were gone.
"Worst case, we deposit to an exchange." No account existed. Opening one meant identity verification, days of waiting, and a custodial relationship the client did not want, all to chase a deposit path nobody could confirm would even accept this particular legacy token. Exchanges dropped support for assets like this years ago.
Losing the exchange fallback mattered more than finding the keys. It meant the entire position had to exit through on-chain liquidity, and the real work became understanding exactly how much of that existed, then structuring the exit so the client was not trading against themselves.
BNB launched in July 2017 as an ERC-20 token on Ethereum. Binance Chain went live in 2019, the project migrated holders to native BNB, and support for converting the original token eventually wound down. The ERC-20 original still exists and still transfers, but it is a legacy artifact. When we enumerated the venues that could theoretically absorb it and read their reserves directly from the chain on Etherscan, the picture was stark: pool after pool drained to zero, and essentially all remaining liquidity concentrated in a single pool, where the client's position represented a very large fraction of everything available to buy it.
This is the finding we most want readers to take away. The first venue we evaluated, a well-known cross-chain platform, quoted attractive, precise, confident prices. Its interface displayed them beautifully. The confirm button glowed, lit and clickable.
None of those orders could actually be built. When we invoked the endpoint that constructs the real transaction, the machinery behind the confirm button, it failed with a server error. Every time. On the direct route and on the workaround the platform's own error message suggested. The prices were decorative. A plan sized around them would have been fiction from the first line.
The same platform, separately, priced a dollar-pegged stablecoin at roughly a twenty-three percent premium to its peg, which made a genuinely poor route render on screen as a windfall. A holder reading that screen alone would have taken it, and paid heavily for the click.
By this point in the engagement we had seen wrong balances, wrong prices, phantom pending transactions, and stale error banners contradicting live quotes, each from a different layer of the stack. Somewhere around the fourth contradiction, this stops being surprising and becomes the operating assumption. The interfaces disagree with each other. The chain never disagrees with itself.
The value your wallet displays for a legacy asset is a reference price. The value you can realize depends entirely on how much anyone will pay for the size you hold, and for older tokens those two numbers can diverge by double-digit percentages before you have clicked anything. That gap is measurable. We read the pools directly, test what actually executes, and come back with a real number: what your position is worth to the market that exists, not the market your wallet remembers. Sometimes the honest answer is that the exit is not worth making, and we will tell you that too. Either way you decide with facts instead of a screen price nobody will honor.
With an executable venue identified, a decentralized exchange whose orders built cleanly and priced better than the platform that could not build them at all, the exit followed a discipline worth writing down.
A small test went first. It cost a rounding error and proved the full path end to end before real size moved. Every approval was bounded to exactly the amount being traded, never unlimited, so each permission expired to zero on use and nothing was left standing. Every order was re-quoted immediately before signing, because prices moved materially inside minutes and any number older than that was already stale.
Then the tranching, which produced the two lessons the textbooks skip. Early clips barely moved the price and the pool recovered between them, which tempted us toward larger sizes. Later clips walked the price down persistently, and spacing them out stopped helping. A check of the underlying asset's spot price confirmed it had not moved at all: the decline was entirely our own footprint. The premium we were selling was being permanently compressed by our own activity.
That framing, the premium is an asset that decays as you sell it, is what turned the tranching from ritual into strategy. Once the marginal saving from continued patience fell below the cost of continued exposure, we stopped optimizing and cleared the remainder in a block. Knowing when to stop tranching matters as much as knowing when to start. And on the second leg of the conversion, where the cost was a flat proportional fee with no depth constraint at all, we did not tranche: splitting that leg would have multiplied operational risk for zero benefit. Tranche when depth is the constraint. Not by default.
A pricing quirk deserves its own paragraph. Legacy ERC-20 BNB traded at a persistent premium to native BNB, the opposite of what intuition expects from an abandoned token. Thin two-sided markets price off whoever last needed to trade, not off consensus. The premium was real, capturable, and fragile. Because of it, the client finished the conversion holding more native BNB on BNB Chain than the ERC-20 BNB they started with on Ethereum.
The same lesson generalizes beyond BNB. In a parallel engagement we priced an exit for a position in Augur's REP v1, another token superseded years ago, this time by an in-place migration to REP v2 rather than a new chain. The executable quote that came back from CoW Swap sat roughly thirty percent below the reference price wallets still displayed for the token. Neither number was a lie. One was a memory, and one was a market, and only one of them would ever settle.
Token breakdown: 840,067,913 cache read · 29,112,429 cache write · 2,223,932 output. Models: Claude Opus 5 (1,427 turns) and Claude Fable 5 (376 turns) drove the work, with GPT-5.6 Sol consulted across three structured rounds during the Zcash engagement. All four case studies in this series ran inside the same window and share these totals. Full technical detail for this engagement is held in our internal report series.
Any platform can display a price. The only proof a trade will execute is successfully constructing the transaction. Test that before you plan around a number.
Read the pools directly. If your position is a large share of the only venue that will absorb it, that fact drives every decision that follows.
Splitting orders helps when you are eating a shallow pool. Against a flat proportional fee it only multiplies risk. Know which regime you are in.
Patience has a price and diminishing returns. When the remaining saving no longer justifies another round, take the block and be done.
Approve the exact amount. It expires on use. No standing unlimited permission should exist on an account holding real value.
Balances, quotes, price feeds, and pending indicators were each wrong at some point. The chain was never wrong. When they disagree, believe the chain.
The difference between a careful exit and a careless one on a position like this is not luck. It is measured liquidity, tested execution paths, bounded approvals, and the discipline to re-verify at every step against the only source that cannot lie to you. That work does not require you to hand anyone your keys, and it starts with a conversation, not a commitment. If you are sitting on a legacy position you suspect is worth something, find out what it is actually worth and what it would actually cost to realize it. Thirty minutes with us and you will know both numbers.
The assets, chains, and tools in this study are named as they were used. Client identifiers, addresses, transaction hashes, amounts, and the venues that failed our tests are withheld. Previous in the series: Case Study No. 01 · The device the manufacturer forgot. Next: Case Study No. 03 · The wallet that predated the chain.