QuadrigaCX’s Collapse Was an Inside Job

Contrary to popular belief, QuadrigaCX did have cold wallets. Alas, they’re empty.

When the QuadrigaCX cryptocurrency exchange sought protection from its creditors in early 2019, it made a claim that it was unable to achieve liquidity for ongoing operations, including customer withdrawals. For them to do so would require gaining access to their central reserves, they claim are “held in cold wallets required to satisfy customer cryptocurrency balances.” While losing cryptocurrency keys is not an uncommon occurrence for layfolk, it would be unfathomable for a company whose business is to secure cryptocurrency holdings for its customers!

So they say.

Adding insult to injury is that they could not even declare the public addresses of the cold wallets. It would give credibility to their claim that QuadrigaCX’s executives could not gain access following the untimely death of their CEO, if they could present that “the money is here, we just don’t know how to get it.” But these are public blockchains, fully auditable and verifiable by the public. There’s a way to find it.

So here we are, without any knowledge of where to find the missing money. But we do have a starting point. From numerous reports from Reddit users, QuadrigaCX’s primary hot wallet address, their “working capital,” so to speak, was “0xb6aac3b56ff818496b747ea57fcbe42a9aae6218”, which I will call “Hot Wallet #1”. I took this as a starting point for the investigation. Thanks to Taylor Monahan, I also learned of the additional addresses “0x027beefcbad782faf69fad12dee97ed894c68549” (Hot Wallet #2) and “0x0ee4e2d09aec35bdf08083b649033ac0a41aa75e” (Old Wallet). She also posted a full transaction dump from the Ethereum blockchain for the first address. I based my analysis on the first address as it should be the most up-to-date with cold wallet interactions.

My target: to find the missing nearly 430,000 ETH declared in Jennifer Robertson’s affidavit.

A Primer on Cold Wallets

A cryptocurrency cold wallet is defined to be a completely offline wallet, used only for signing transactions. It cannot itself send transactions to the crypto network. Being completely disconnected from the Internet, it cannot be remotely hacked. However, its receiving address is still available, so that currency can flow into that address freely, but cannot be taken out without explicit and rather cumbersome steps to do so.

This contrasts with a hot wallet, which is kept online to satisfy the regular cash-out requirements of an exchange. While an exchange may hold thousands of Bitcoin and possibly even millions of Ether, the hot wallet might hold 50–100 BTC and 1,000–5,000 ETH. While that is still a substantial amount in fiat terms, it is a fraction of the exchange’s total exposure. The basic formula, then, that the exchange should follow is that (hot wallet) + (cold wallet) = (total customer balances) + (net transaction and transfer fees).

A consequence of the inconvenience of using high security is that the cold wallet funds will not typically transmit directly to end recipients; rather, it replenishes the hot wallet exclusively and then allows the hot wallet to fulfill disbursements as normal. A second consequence of the hot wallet/cold wallet setup is that the cold wallet should receive no funds other than from the hot wallet.

If Only We Could Just See that Pile of ETH

When looking for a large stockpile of ETH, the obvious first course of action is to look for addresses that Hot Wallet #1 sent funds to, that also have a large residual balance.

Going through all addresses, the addresses with the highest five balances that have directly interacted with QuadrigaCX’s hot wallet are, along with their balance in Ether:

0x8453584a31246b9a7776bf181544d180e05a210c: 17129.82394 0x00d681a7b6584f978f63c81cfd847064ce19a080: 10000.3035 0xd9518342a44e7dfdcd363f28f1ad19e568e2eb85: 6502.524136 0x1f7d2e234004f0d763040dc17afa615530684ea9: 6138.040381 0x88a0a05437262a1b65f41a978cb16cb1f0bfcfe0 5656.390147

None of those addresses behave anything resembling a cold wallet. They transacted with too many outside wallets, they received funds from too many sources, and most importantly, they aren’t anything close to 430,000 Ether, even in aggregate.

Robbing Peter to Pay Paul

Having exhausted the possibilities for large nuggets of ETH, the next natural inclination is to look for addresses that Hot Wallet #1 frequently transacted with, specifically in times of shortfalls in the hot wallet. Who funds the hot wallet when it runs low?

This leads back to the Old Wallet address “0x0ee4e2d09aec35bdf08083b649033ac0a41aa75e”. For months following the initialization of Hot Wallet #1, the Old Wallet covered for shortfalls, as well as receive large amounts back when the Hot Wallet started to hold more than 10,000 ETH. It appears that QuadrigaCX delegated this address to become a “colder” wallet after starting up Hot Wallet #1.

One theme in this section is that many of these addresses that bail out Hot Wallet #1 also sent many funds through ShapeShift. In the case of the 0x0ee4 address, it made bursts of transactions to “0x5a9b6c756bf11b60e1ce81737648f9f87eeb58ea”, a ShapeShift deposit address. The amounts, ~20 ETH, corresponded to transaction maximums on ShapeShift at the time.

Address “0x7ea5e875a386b66d11a0ad1866ca7b5f2745f049” behaved in a similar fashion. Like with Old Wallet, it funded Hot Wallet #1, and burst sent ~20 ETH transactions through ShapeShift. Critically, it funded the Hot Wallet with 666 ETH on 2017–07–25, just enough to cover 666 ETH of withdrawals that day. It also received large funding later on when the Hot Wallet was brimming with over 20,000 ETH. I’ll call this Cold Wallet #2.

0x7ea5e875a386b66d11a0ad1866ca7b5f2745f049 precisely covering for a spate of withdrawals

Address “0xa9f43f5582f14e95c61967741c4292621e512bdf”, like the above, critically funded the Hot Wallet with 340 ETH to cover withdrawals, six minutes prior to a withdrawal processing batch. However, this address was funded through Kraken and Bittrex withdrawals, instead of from custodied client assets.

Another bailout of the QuadrigaCX cold wallet, this time from an outside exchange withdrawal

Address “0xfad8137b79cc8059fc4c9e7b3ad035ec612642b7” critically funded the Hot Wallet on 2017–08–18 with 82 ETH to cover an 80 ETH withdrawal four minutes later. This address is primarily funded inbound from Poloniex.

82 ETH in, 82 ETH out

Address “0x3b63eabfc0d219f4b416663d54ccd18d0f1983e1” critically funded the Hot Wallet on 2017–08–18 with 300 ETH to cover a 322 ETH withdrawal batch. This address is also outside exchange funded, from Poloniex and YoBit, among other unnamed addresses.

QuadrigaCX uses a lot of exchanges!

Address “0x5512852a317c63f71f2b81f95cf2bbee1c239a8e” critically funded the Hot Wallet twice on 2017–08–21 with ~150 and ~125 ETH, respectively, to cover withdrawals minutes later. This address is funded from multiple exchanges.

Very well timed deposits. Much coincidence!

Address “0x0b9defea64d1808bcdec76d532984dd24fb8bcff” was first initialized in September 2017 from the Hot Wallet and is the closest thing to a cold wallet I’ve seen in the transaction ledger for QuadrigaCX. It received, from the hot wallet, in aggregate 69750.02 ETH and sent back 51432.6300226 ETH, mostly when the hot wallet ran low. However, it too made burst transfers out to ShapeShift, this time in ~30 ETH increments. I will designate this Cold Wallet #3. It ran out of funds in April 2018.

Continuing along outside exchange addresses, “0xd17d4acd309b377ec022942a62c752cc82d979c8” critically and precisely covered withdrawals for QuadrigaCX over the next four minutes.

I think we are starting to see the pattern by now.

Address “0xb1d85314a5c6cdbfaa42a9fd955a88335dc41911” bailed out the Hot Wallet twice on 2017–11–04, and again on 2017–11–06. Funded by Binance and Poloniex.

There’s an address in orange. I’ll get to that one.

Address “0x4a21057d80cf2c208068de099ed829f7e3b5d3fb” bailed out the Hot Wallet on 2017–11–06. It’s funded from Bittrex. Also, address “0x0247bc4e03142079cfa2e3daf500722ed0f9a6b2” has repeatedly funded the Hot Wallet, such as in the circumstance below. It receives its funding from Poloniex and Kraken.

And there’s the orange address again. And again.

With respect to needing other exchanges to prop up the cold wallet, that’s plenty bad compared to using QuadrigaCX’s own cold wallet. The distressing part, and the core of the fractional reserve argument made in this article, is that QuadrigaCX’s hot and cold wallets all transacted directly with ShapeShift, suggesting that QuadrigaCX was using its clients’ Ether balances to cover shortfalls in its Bitcoin or Litecoin reserve. Among these addresses are:

0x10d6d7e5f04c27244951deb44333087d344b66a7
0x614cc3033ddbcdb0de90a08723772d6d90a816ee
0x708523a9e5d288606a5691fca4a4e76cb22e3f56
0x75fd454c8118d9598ee588e6ff52b1bb6d08aa74
0x8eafc0e93a10cbc30aa7fce47b4b5cbedc53a41a
0xa9237c8117dca43e8179666e7928b37d8d5a8f96
0xdfef4a678535072c775f186b3fc0472ed8b2318e
0xf8d8a55e230d795996d46d3b70151cbe45e12dc2
0xfaff49c620cf34da4beea650e70cfdb44d4e5665

And Sometimes Peter Demands Payment

On November 4, 2017, we observe the first large-scale transfer of funds from ShapeShift into the Hot Wallet. At this point, Cold Wallet #2 and #3 have less than 1 ETH of funds, so QuadrigaCX had to find funding quickly elsewhere. Just as QuadrigaCX used its clients’ Ether to pay for Bitcoin and Litecoin withdrawals, so too must the exchange replenish Ether for withdrawals from the others.

When all you’ve got left is funny Internet money, run to your local Cash4BTC and get top dollar!

Why Use ShapeShift if You are the Exchange?

There is no reason for a full-reserve exchange to use ShapeShift in the manner QuadrigaCX demonstrates. There would always be sufficient funds in the hot and cold wallets to cover all client funds, by definition in the basic formula above. So this is the smoking gun of the fractional reserve operation that QuadrigaCX actually was. But unlike the banks in 2009, QuadrigaCX will not get bailed out.

Besides, why would QuadrigaCX use ShapeShift for exchange when, by its very nature, it could easily turn ETH into BTC, LTC, or fiat cash by being a customer of itself. Or, if they were unsatisfied with their own market’s liquidity, directly transfer ETH funds to any other major exchange, like Kraken or Coinbase, with proper paperwork and KYC. The major draw of using ShapeShift, at least then, was their speed and total lack of KYC. That said, it’s not like ShapeShift is invulnerable to cross-chain analysis, so I might try to correlate timestamped transactions from ShapeShift to Bitcoin and Litecoin in my next writeup.

For the other addresses listed above that were funded by the other exchanges, while I am not law enforcement and therefore cannot compel a response, for the sake of the crypto market overall, please shed some light on how the account owner for those addresses used your platform.

A Faint Hope

Some addresses that are indicative of QuadrigaCX control still have assets! For example, address “0xa07e6d6cda957ef25f73ee784a784909a9afe10d” that funded the Hot Wallet #1 on 2017–11–12, though itself doesn’t have assets, is almost completely funded by two other addresses, “0x3d3ee894144933894a231f3d1608453f46d876cf” with ~650 ETH that received funds from QuadrigaCX as late as November 2018. And there’s “0x2b7882ddb9a242609588fbe9ba1fb6b455e88c6c” with 16,000 ETH that heavily funded the 0x3d3 address above, as well as the 0xa07 address.

It’s no 430,000 ETH, but it’s a start. Maybe.

Repeating the Mantra of Crypto

“Not your keys, not your coins.” You won’t get your coins taken in an inside job like QuadrigaCX if you hold your coins on your own wallet, with your own private keys and your own twelve-word mnemonic. Yes, it’s annoying to store your words safely, and possibly confusing to explain to loved ones on how to recover your coins if it came to that, but as this saga shows, relying on an exchange as a custodian is fraught with its own risks. Especially with transaction fees to transfer coins to and from exchanges being as low as they are, it should be a no-brainer to deploy coins to an exchange only when you, well, need to exchange them.

As for the exchanges operators themselves, I believe they would do their customers a great favour and gain immense trust to prove their full reserve, by:

· Publishing the public addresses of their wallets, hot and cold, on their own website

· For Bitcoin-like UTXO networks, regularly sweep assets into the hot wallet

· Regularly transfer assets from the hot wallet to the cold wallet. Possibly something as simple as a daily transfer, to target the hot wallet for 200% to 500% of the 30-day net withdrawal moving average

· Never transfer from the cold wallet to any wallet other than another wallet of the exchange, either hot or cold

QuadrigaCX was only a small player in the global cryptocurrency exchange landscape, nothing compared to MtGox then or the many exchanges that QuadrigaCX itself used, but even with this small implosion, QuadrigaCX’s former customers have lost $190 million in crypto and fiat deposits.

But those deposits were not lost, they were stolen from within.