USDC blacklist cost users an extra $3.6 million – per month
Checking against the internal record of blacklisted addresses cost USDC users millions of dollars each month. This makes the stablecoin USDC around 40% more expensive to use than the decentralized stablecoin DAI.
Stablecoin USDC is getting increasingly popular among crypto users and ditto institutions, so much so that USDC, the second-largest stablecoin by market cap, is on a steady streak narrowing the distance to market leader, Tether’s USDT. Just this week, USDC broke the $50 billion mark chasing USDT’s $70 billion in total market cap.
Deployed in mid-2018 and issued by the American company Centre, in turn, owned by exchange Coinbase and Circle, USDC began its life exclusively on the Ethereum blockchain and has since expanded onto six other blockchains. The model by which USDC (and USDT) operates is by users depositing U.S. dollars to Circle’s bank account, receiving USDC tokens in return.
A model favored by DeFi users
This model is the most favored by DeFi users since USDC has maintained its peg well and it is easily convertible to dollars via Coinbase and Circle. Easy, that is, as long as the user, for some reason, doesn’t end up on USDC’s infamous blacklist of banned Ethereum (or other blockchains) addresses.
Though out of the scope of this text, this blacklist is a must given the regulatory circumstances, especially in the U.S. For various reasons including anti-money laundering and terrorist funding, the Centre must be able to stop accounts from transacting in USDC tokens, and they need to protect unknowing users from interacting with banned addresses.
Earlier this month Tether froze three Ethereum addresses containing $150 million in USDT – a stark reminder that the services of Centre, Tether and their kins are very much centralized services, albeit most people would probably agree that it’s important to stop malicious activities.
In theory, the blacklist is simple enough. Every time an account is about to make a transaction involving USDC, the token smart contract on the blockchain checks a list of addresses to see if the sender or receiver is on the list. If so, the transaction is blocked. This in effect freezes the balance of the listed account.
40% more expensive to transfer USDC than DAI
As pointed out in a blog post by Alex Kroeger, an engineer at the 0x project and data scientist at Coinbase, this constant list checking is the main culprit behind why it’s approximately 40% more expensive to transfer USDC compared to DAI, a decentralized stablecoin maintained by MakerDAO, while both tokens implement the same ERC20 token standard.
According to Kroeger, each check of the blacklist costs around 2100 gas or around 58 cents based on gas price of 100 gwei and $2,770 per ETH. To make a simple transfer, this list is checked twice, and interacting with other contracts, decentralized exchanges for example, requires three checks of the blacklist, adding up to about 6300 gas, or $1.74.
Alex Kroeger estimates that in December 2021 alone, these blacklist checks added about $3.6 million in gas fees for USDC users. Given that the USDC smart contract spends well over $19 million per month, the list checking slurps almost 20% of the overall gas fees that the smart contract consumes.
Is the blacklist even effective?
Adding to this, while the list checking does block addresses from transacting, effectively freezing accounts, it does not stop entities behind frozen accounts from future usage of USDC.
As Alex Kroeger explains, an entity could derive a new Ethereum address in a wallet and continue using USDC, or create a proxy contract wallet from the blocked address, for instance a Gnosis Safe contract, and interact with USDC via that contract. The USDC blacklist contains normal addresses, not the contract.
“The point is the blacklist is not a useful tool for stopping the entity behind an address from interacting with USDC. It’s a measure that is more theater than substance,” Kroeger writes, and proposes a solution of his own.
How to freeze accounts without a blacklist
“In my proposed USDC v3, I remove the blacklist checks from all transfer and approval functions. This would save the gas spent on these checks. In its place, I introduce a new function called freezeBalance. This function allows an admin (in this case, an address that is already given the role of blacklister) to freeze an account’s funds.”
“Under the hood, this sets the target account’s balance to zero, removes that amount from the total supply, and updates a separate account mapping (frozenBalances) to reflect the funds that are frozen. frozenBalances makes accounting for these actions easier as well as allows the admin to unfreeze balances (calling unfreezeBalance) if the initial freeze is later deemed to have been done in error.”
Kroeger’s ultimate hope is that his proposed version of USDC gets adopted to save users money as well as to make a very modest dent in Ethereum’s congestion problem by reducing USDC’s footprint in Ethereum blocks.