Complexity of a Stablecoin “Run”

This blog was posted on our Medium page by Takens Theorem.

A few weeks ago, three crypto-serving banks faced major liquidity crises amidst a bank run. These banks were shuttered, and some rather scandalous hypotheses swirl around these events. Something else interesting happened on chain, too: This fiasco impacted the peg of both USDC and DAI. Because USDC was significantly banked at the now-defunct Silicon Valley Bank, and DAI collateralized substantially with USDC, both experienced their own little “run.” As Coin Metrics reports in a great survey of this run that happened around March 11th, 2023, users seemed to move their USDC and DAI into USDT and BUSD. (They may have perceived them as safer given the potential impact on USDC’s Circle, or have been seeking arbitrage, etc.)

Figure from Coin Metrics State of the Network #198

As you can see in the plot from Coin Metrics, this was a temporary effect. Unlike other notorious “stable”coins of recent history, both USDC and DAI returned to peg after a couple of days.

The term “run” conjures a mental image of individual customers rushing to the bank to withdraw their cash. The term implies a singular desire to escape a particular asset or custodial situation. While this simple description captures an underlying motivation, it is actually enacted in many different ways. A “run” manifests in ways that can be complex: The simple desire among holders actually yields distinctive patterns of decisions and actions.

Indeed, with Etherscan data and USDC alone, you can see this complexity on chain. In this brief post, I summarize some underlying on-chain patterns between March 9th and March 12th. The message here is simple: The visualization and analysis suggests runs have complex on-chain dynamics. They involve a mix of on-chain activity, shifts in value-sent distributions, and more.

Below I illustrate this in two ways. (1) First with direct transfers of USDC across various wallets. And second, (2) with individual token swaps between USDC and other assets.

(1) Direct USDC Sends

To explore patterns underneath this run, I extracted transaction data from Etherscan, starting with direct ERC-20 transfers of USDC. These were transactions that included only a single transfer event. Between March 9th and March 12th, I extracted about 200,000 of these.

I built a “stackplot” of these 200,000 transactions. To understand what a stackplot is, consider this key I shared in an introductory article to this visualization:

Rows are addresses; lines are transfers; colors are exchanges/highlighted addresses
Rows are addresses; lines are transfers; colors are exchanges/highlighted addresses

When we do this for all addresses across the 200,000 transactions, you get the following full stackplot:

Stackplot of over 200,000 direct USDC transactions
Stackplot of over 200,000 direct USDC transactions

Here, each “stacked” row is an address, each column (line) is a transfer. As addresses enter the data, and transact on USDC’s contract, rows rise in number quickly between 3/9 and 3/12. You can see a “glow” in the middle of the stackplot, indicating a collective, momentary “run,” USDC being sent across wallets. I highlighted some exchange addresses (Binance 14, Coinbase 10) with color. There seems to be a rise in exchange wallet activity visible even in this granular visualization.

You can also see very large transactions. The largest, in the top right quadrant (in white) is a $500,000,000 transaction between two Binance wallets. As Coin Metrics reported, many larger transactions took place during this time, and there were unusually more $1,000,000 or greater USDC transfers. This distribution seems visible in the stackplot above, with higher and large density along the steep “sigmoid” rise of the wallet rows and their transfers.

We can examine how these transactions cluster in blocks. On the x-axis we plot time (in block height) and y-axis the number of unique USDC senders and receivers within that block. By plotting each block this way, we can examine this local distribution of on-chain activity. Departures from this distribution represent an important pattern: They could be exchange consolidations taking place in one or a few blocks at a given time.

The “run” on USDC (direct sends); distribution of wallets in blocks shows consolidated activity
The “run” on USDC (direct sends); distribution of wallets in blocks shows consolidated activity

Near the end of this date interval, curiously, HitBTC seems to show some consolidation in wallets that were once funded by their deposit wallet. Bittrex sends a large number of USDC transactions to separate wallets far exceeding the statistical trend among unique receivers.

We can visualize these trends with network diagrams, illustrated below. Lines are ERC-20 transfers and dots are wallets. USDC flows into a wallet that seems to be associated with HitBTC here. Over a range of about 40 blocks,* *just 8 minutes, there are hundreds of these consolidations (as suggested to me by someone: this could also be recovery of sybil wallets).

Direct USDC transfers from blocks 16815288 to 16815328; 0xbfcd8 = HitBTC affiliated?

(2) USDC Swaps

Let’s consider transactions that involve two ERC-20 transfers, one of which is USDC. These usually involve a swap (from or to USDC). In that date range, I extracted about 80,000 of these (amounting to 160,000 transfers, two per transaction). Interestingly, the distribution of senders and receivers by block seems more orderly in DEX swaps, which may indicate a more collective phenomenon of individual wallets transacting to move USDC around.

However you can detect significant shifts in the distribution of USDC swaps. As Coin Metrics also reported, users seemed to swap into USDT or (W)ETH, and below you can see the rapid rise of USDT swaps near the run.

One way to summarize the swap patterns is to calculate an entropy score over the distribution of unique tokens in 100-block windows. Entropy is generally interpreted as “disorder,” but here higher entropy reflects a more complex mix of tokens in a period of time. Conversely, if entropy drops, it means that DEX “behavior” with USDC is getting simpler, focusing on a smaller number of tokens. Indeed entropy drops by about 25% or more at the start of the run. To put it in very playful terms: Runs alter the thermodynamic structure of block space.

Finally, USDT and WETH showed different patterns too. On March 11th, the distribution of swaps involving these tokens were distinct, with USDT having the higher average swap value, but WETH having a handful of extremely large swaps (owing to an MEV bot).

Summary

I focused on USDC, and peeled back hundreds of thousands of transactions to take a quick glimpse into the composition of a run.

The view of a “run” as being a collective clamor among individual wallets is partly right. There seems to be lots of that.

But there is also significant and easily identifiable heterogeneity of activity: (i) individual users send into exchanges, (ii) whales become more active, (iii) blocks exhibit statistical trends of coordinated consolidation, (iv) CEX and DEX behavior are distinct, and (v) swap distributions shift. In a helpful thread about these events, Delphi Digital referred to this as an “on-chain frenzy.” It had impacts on issuance too: Kyle Waters of Coin Metrics reported thousands of burnt ETH around this time, taking the cumulative burn to over 3 million ETH since The Merge!

This post dipped a bit more into this underlying complexity to share some other on-chain details. Understanding these details may be helpful for responding to future runs of this sort.

I’m a creator and writer and such and you can follow me on Twitter. I was not paid for this post. I sometimes own the assets I mention.

Subscribe to Etherscan
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.