The Address That Wouldn't Die: CoinDCX, $16 Million, and the Archaeology of Trust
On October 22, Sumit Gupta typed twelve words that would outlive him longer than any of his company's press releases: "CoinDCX wallets are not breached, pls don't spread rumours." Three days later, his exchange disclosed that 15.99 million USDT had walked out of infrastructure it had already declared dead. The number itself is unremarkable for an exchange of CoinDCX's size — mid-tier, survivable, absorbed by the balance sheet. What is remarkable is that the money left through a door the company had locked, painted over, and then quietly left receiving deposits.
I have spent the better part of a decade auditing the seam between what exchanges say and what their wallets do. And the CoinDCX incident is the cleanest specimen I have seen in years of a specific and underreported pathology: the address that is dead in the documentation and alive in the code. Chaos is just data waiting for a story. This one has been waiting since July 2025.
Context: How a Dead Address Keeps Eating
To understand what happened, you have to understand a piece of plumbing almost no retail user has ever seen: the sweeping service.
When you deposit crypto into a centralized exchange, you are rarely sending funds to the exchange's main hot wallet. You are sending them to an address generated on your behalf — a spoke on a hub. Periodically, a background service sweeps those spokes into the hub, consolidating custody. This is routine, invisible, and load-bearing. When sweeping works, the exchange holds one large pool it can monitor. When sweeping fails, the exchange holds thousands of small stranded pockets, each one a target, each one a liability nobody is watching.
CoinDCX's admission, per the disclosures, describes two failures compounding. First, a previously unknown vulnerability in deprecated operational wallet infrastructure — old addresses that had once been publicly displayed to users as deposit destinations, then retired. Second, a sweeping service that had "failed for some time," meaning deposits sent to those retired addresses piled up and sat there, uncollected and unmonitored. On October 21, the exchange detected anomalies, isolated active wallets first, then confirmed the old infrastructure was affected. By October 25, the loss was public.
Layer that against the prior incident. The same address cluster, per the reporting, was generated in January 2025 and was compromised in a July 2025 hack. Fifteen months. Two breaches. One lineage.
That single sentence should be doing more work in this story than the dollar figure. A repeated compromise across the same address family is not an accident. It is a process.
Core: The Three Failures That Actually Matter
Failure One: "Deprecated" Is a Label, Not a State Change
Here is the operational truth that nobody puts in a press release. Taking an address offline in a database does not take it offline in the blockchain. The chain has no concept of your deprecation notice. If the private key still exists, if the contract still accepts transfers, if the front-end still resolves the old routing logic, then the address is not dead — it is dormant.
This is the gap I flag in every custody review I conduct. I call it pseudo-decommissioning: the exchange marks an address retired, removes it from the current deposit page, and considers the matter closed. But the key material was never rotated, the contract was never revoked, and no user-facing mechanism ever told the tens of thousands of people who had saved that address in a notes app, a screenshot, or a recurring withdrawal template that it was now a black hole.
A user who deposited to that address in 2024 and does the same thing in 2026 does not experience a deprecation. They experience a deposit. And their money lands in a wallet the exchange believes it no longer operates.
That is the precise mechanism of this loss. Not a sophisticated cryptographic break. A user doing exactly what they were taught to do, into an address the exchange had stopped watching.
Failure Two: The Monitoring Blind Spot Was Structural
Sweeping services fail. That is normal. Networks congest, gas spikes, nonce management breaks, indexers desynchronize. What is not normal is a sweeping failure going unnoticed "for some time."
Think about what that implies. If sweeping is failing, then the ratio of deposited funds to swept funds is drifting. Any competent reconciliation system watches that ratio. A drop in sweep success rate, a growing balance on any address classified as operational, a spoke that has not sent to the hub in N days — these are trivial alerts to build. Their absence means the exchange had no real-time state view of its own address estate. It had a PoR page. It did not have a pulse.
This is where my forensic skepticism sharpens. When an exchange says "we have published all our addresses," it is making a claim about a photograph. A PoR page is a snapshot of a moment. It does not tell you that a deprecated address is silently accumulating deposits, because that address may not even be on the list. It does not tell you that sweeping has degraded, because sweeping is a flow, and PoR is a stock. Publishing your addresses is not the same as operating them.
Failure Three: The Verification Vector Was Wrong
Gupta's defense, per his public statements, was that he checked all current centralized addresses and user addresses and found no transfers to the old address. He also pointed to the PoR page as evidence that all addresses were publicly accounted for.
I want to be fair to him here, because I think the error is more interesting than malice. His check covered the vector he could see: the exchange moving money. What he missed was the vector that produced the loss: users moving money in. No retail user cross-references a deprecation notice before pasting an address they saved eighteen months ago. The verification was thorough along the axis he examined and blind along the axis that mattered.
This is the anatomy of a wrong denial. Not a lie — a scoped truth, delivered without the scope attached.
The Key Rotation Question Nobody Has Answered
The detail I keep returning to is the fifteen-month gap. July 2025: address cluster compromised. October 2026: same cluster, funds stolen again.
If the keys had been rotated after July 2025, the October theft would have required a new compromise vector. If the keys were not rotated, then the second theft required nothing new at all — the attacker simply retained access to a wallet the exchange had labeled deprecated and stopped monitoring. The latter is more parsimonious. It is also more damning, because it means the July 2025 incident produced a response but not a remediation.
In my audit work I use a simple test: after an incident, ask for the key rotation log, not the incident report. Incident reports are written for regulators. Rotation logs are written by the hands that turn the keys. The presence of the first and the absence of the second is the most reliable predictor of recurrence I know.
The Behavioral Layer: Why Users Keep Feeding Dead Addresses
There is a temptation to file this under "user error" and move on. I want to resist that, because it mistakes a design failure for a discipline failure.
The users who fed the deprecated address were not careless. They were consistent. Consistency is what we train users to value in crypto — save your address, reuse your workflows, avoid transcribing new strings under pressure, because transcription is where people lose money. Every security best practice we teach reinforces address reuse. Then an exchange retires an address without a corresponding signal in the user's world, and the discipline we taught becomes the vulnerability we exploit against them.
This is the emotional cost of infrastructure debt, and it is precisely what I argued during the DeFi Summer research years ago when I simulated impermanent loss and discovered that algorithmic efficiency frequently masks human anxiety rather than resolving it. The same pattern appears here. A sweeping service is an algorithmic promise that someone is watching. When that promise fails silently, the human on the other end has no way to know. The system's opacity is not a bug on the user's side. It is a liability on the operator's side, transferred to the least informed party.
The victims here are not sophisticated attackers versus a sophisticated exchange. They are ordinary depositors versus a monitoring gap that was invisible to everyone except the person who should have been looking.
Contrarian: The "Unknown Vulnerability" Framing Is Doing Quiet Work
The disclosure describes a "previously unknown vulnerability" in deprecated infrastructure. Read that phrase again and notice what it accomplishes.
A previously unknown vulnerability is an unknowable — it implies the exchange could not reasonably have defended against it. It is an act of God, not an act of omission. But the preceding failures — un-rotated keys, a sweeping service that failed unmonitored for weeks, deprecated addresses still accepting deposits, no user-side deprecation signal — are not unknown vulnerabilities. They are known operational debts, deliberately deferred.
The framing choice matters because it relocates the story from governance to misfortune. I have watched this move repeatedly in institutional crypto contexts, and I flag it every time I sit across from a pension fund risk committee: when a counterparty describes a loss using the language of discovery rather than the language of maintenance, ask which specific control failed and who owned it. The honest answer is usually a process, not a bug.
There is a second contrarian point that cuts against the comfortable industry narrative. The reflexive reaction will be "not your keys, not your coins" — self-custody as the answer. But self-custody does not solve the problem this incident exposes. The problem is not where the keys live. The problem is that an entire category of institutional infrastructure declares things dead that remain alive, and no external party has the visibility to check. A self-custody user who saved an old address from a bridge contract faces a variant of the same trap. The pathology is address lifecycle opacity, and it is not cured by moving custody.
What actually cured it, in this case, was a third party with a public ledger. Arkham's on-chain tagging surfaced the flows and, per the timeline, that public visibility is what forced the official acknowledgment. The admission did not come from an internal control firing. It came from an external lens being pointed at the chain. That is the uncomfortable lesson: the exchange's own monitoring did not catch this. Someone else's did.
The Weighing: $16M Is the Small Number Here
The financial damage is contained. CoinDCX stated that customer balances are fully reconciled and the company is absorbing the loss. That is the correct response, and it is the reason I do not expect a run. In a bear market, where every participant is already running a mental solvency check on every counterparty, a clean "we ate it, users are whole" statement is the single most stabilizing sentence available. Liquidity flows where meaning is clear. The meaning here is clear enough.
The durable damage is elsewhere. It is in the 72-hour gap between a denial and an admission. That gap is now permanent public record, and every future CoinDCX security communication will be read through it. The trust premium an exchange earns is not a function of how rarely it is attacked. It is a function of whether its statements survive contact with the chain. In the void, we find the architecture of trust — and this week the void answered with a timestamp.
Scale matters too. Fifteen months, two incidents, one address family. That is a pattern with a name, and the name is not bad luck. It is a control environment that responds to events without reconstructing them. The July 2025 incident should have triggered a full estate inventory: every address ever published, every key ever generated, every contract ever deployed, with an explicit rotation and revocation ledger. The absence of that ledger is why the second theft was possible. It is also why I would want an independent audit of the entire historical address inventory before believing the $16 million figure is the whole of the exposure. Disclosed losses and actual losses diverge most often in organizations that have lost track of their own perimeter.
Takeaway: The Next Battlefield Is Address Provenance
We are about to spend two years arguing about real-time reserve proofs, and the argument will be mostly beside the point. A real-time PoR would not have prevented this. The stolen funds were, in a narrow accounting sense, sitting where they were supposed to be. The failure was underneath the reserve question: whether the operator knows which of its addresses are alive right now, which are receiving, which are sweeping, and which have stopped.
The next serious infrastructure standard is not reserve attestation. It is address provenance and lifecycle attestation — a public, verifiable claim that every address an exchange has ever shown a user is in one of exactly three states: live and monitored, retired and blocked, or destroyed and revoked. Not marked. Not labeled. Mechanically incapable of receiving.

We build bridges in the silence after the noise. The noise this week is a $16 million number and a CEO's twelve words. The silence underneath is fifteen months of a dead address that kept eating, and an operator that only found out because someone else was watching. Narrative is not what we say, but what remains. What remains here is a simple, unanswered question every exchange should now be forced to answer on the record: how many of your addresses are dead in the documentation and alive in the code?