Blockchain Reaction
Testing USDC and USDT suitability on different blockchains for consumer payments
The surge in interest in stablecoins over the past year includes an implicit assumption that they are suitable for consumer and person-to-person payments at scale, in terms of the end-to-end payment experience and the economics for retailers.
I decided to check this assumption by testing the UX, speed and cost of stablecoin payments.
USDT and USDC Stablecoins
USDT (Tether) and USDC (Circle) are the dominant stablecoins, both denominated in USD, with, respectively $186bn and $74bn of tokens in circulation.
USDT and USDC are issued through smart contracts on blockchains. USDT is issued on at least 115 different blockchains, with the Tron blockchain holding the most USDT tokens, worth $89bn.
USDC is issued on even more blockchains - 137, with Ethereum holding the most USDC tokens, worth $49bn. There are around 31 blockchains holding $10m or more USDT tokens and 41 blockchains holding $10m or more USDC tokens.
Table 1 shows the top 10 blockchains for each stablecoin1.
Table 1 – USDT and USDC issuance by blockchain (top 10)
Each blockchain has its own consensus mechanism, validators, governance, block times, network fees and methods, congestion mechanisms, gas tokens, finality rules etc and each blockchain is optimised for different uses (speed, cost, privacy, security etc).
There are also different types of blockchain – layer 1 (e.g. Ethereum), layer 2 rollups (e.g. Arbitrum), sidechains (e.g. Polygon), subnets (e.g. Avalanche) and probably other types and variations. USDT and USDC are issued on all these different blockchain types.
USDT and USDC Test Set Up
My tests took a sample of blockchains for USDT and USDC, chosen from Table 1, where used by both - Arbitrum, Ethereum, Polygon, and Solana. I also added Tron, given its dominance with USDT (about $28m of USDC is issued on Tron, placing it number 30 on the list of blockchains issuing USDC – although I conducted Tron tests only for USDT).
I chose self-custody wallets for the tests as they give greater control than custodial wallets and eliminate intermediaries. With a self-custody wallet, you can be certain payments are made and settled on a blockchain2, unlike custodial wallets where the third-party providing the wallet could be placing transactions on their own ledger outside of a blockchain.
I set up one wallet for sending and one for receiving. I funded the sending wallet with USDT and USDC from a digital asset exchange where I bought the funds. Network, or gas fees for stablecoin payments are paid separately using the blockchain’s native token rather than using the stablecoin3. Therefore, I also had to buy a small amount of each network token and fund the sending wallet with them – specifically, for the tests: ARB (Arbitrum), ETH (Ethereum), POL (Polygon), SOL (Solana) and TRX (Tron), about $40 worth of these tokens in total.
When buying stablecoins on an exchange, typically you just buy USDT, USDC etc without stipulating a blockchain (a digital asset exchange account is a form of custodial wallet – see footnote 2). However, when you withdraw the stablecoins, you need to state the network/blockchain where you wish to hold the funds and provide a correct wallet address4 for that network (if you provide a wallet incompatible for the chosen network, you are likely to lose your funds5).
Withdrawing tokens from a digital asset exchange also incurs fees. In total, I bought about $400 of USDT and USDC, which cost a further $10.63 to withdraw to the sending wallet blockchain addresses, or 2.5% - the lowest was $0.63 withdrawing USDC from the exchange account to the Ethereum network and the highest was $2 withdrawing USDC and USDT to the Arbitrum network. On top of this were fees for withdrawing the native blockchain tokens to the sending wallet addresses to pay for the network gas fees for the payments in the test – ranging from 0.01% for SOL tokens on Solana to 6.8% for TRX tokens on Tron.
The Tests
I started the tests by sending $40 payments for each stablecoin on the different blockchains to the receiving wallet, nine payments in total. I chose $40, as this is roughly the average value of a typical card payment.
Using the relevant blockchain explorers, I measured the elapsed time from pressing “payment send” to the time of transaction confirmation6 in a block. I measured the fee from the difference in the wallet’s native token balance on the relevant blockchain before and after the transaction, converting it into dollars at the current token value (from Coinmarketcap.com).
I repeated the tests by sending $40 payments from the receiving wallet back to the original sending wallet and then back again for a third test, 27 payments in total across three tests.
Figure 1 shows the average and range of confirmation times for the 27 payments. On average the sample payments took 3.4 seconds to confirm, the fastest being a USDT payment on Arbitrum at 0.14s and the slowest a USDC payment on Polygon at 19.4s.
Figure 1 – USDT and USDC stablecoin confirmation times averaged over three tests on different blockchains
Figure 2 shows the average network fee for 24 of the 27 payments. The fees on USDT payments on Tron ranged from 5.3% of a $40 payment to 11.8% and averaged 7.7%. These are orders of magnitude higher7 than the other tests and I have left them out of Figure 2 to make it easier to compare the fees on the other blockchains.
Figure 2 – USDT and USDC stablecoin fees on different blockchains (excludes USDT on Tron) averaged over three payments each
The 24 sample payments excluding on Tron averaged 0.036% of a $40 payment, the cheapest being 0.001% for both a USDT and a USDC payment on Solana and the most expensive being 0.43% for another USDT payment on Solana.
Conclusion
These tests were just a few sample payments across a small number of blockchains. They are simply indicative of what can be achieved in terms of fees and confirmation times for stablecoin payments. A more thorough test would require tens of thousands of payments at different times of the day and week and across a much greater sample of blockchains to derive a distribution of results indicative of stablecoin payments at scale.
However, they do suggest that stablecoins are feasible from a fees and response time perspective for everyday consumer and retail payments, particularly using blockchains like Solana and Arbitrum – with the proviso that consumer funds are held as stablecoins rather than converted back regularly into fiat currency, to avoid incurring excessive digital asset exchange fees.
My other observations from the testing are:
1. The UX of wallets needs to be much better to be viable for everyday use. Both USDC and USDT normally trade slightly above or below $1, so setting up a $40 payment displays a different stablecoin amount e.g. 40.07 USDT which is confusing, especially since the difference fluctuates.
2. Managing gas tokens to pay fees in addition to managing stablecoin balances adds considerable complexity. Custodial wallets can hide this complexity from the consumer but have their own disadvantages such as being undifferentiated from bank accounts and no, or limited programmability e.g. for agentic commerce.
3. Fees are paid by the sender which goes against the normal commerce model where the retailer pays fees; and against the person-to-person model which is normally free. Custody wallets can be configured to deduct fees unseen by the payer from the principal amount paid to the retailer but this could be problematic as the retailer is unlikely to have a relationship with the custody wallet provider to allow this.
4. Fees are unpredictable and can vary widely – for example, Solana is known for low fees but in just three USDT payments in my test they varied from 0.001% to 0.43% of a $40 payment. Such large and unpredictable swings make it difficult to develop commercial stablecoin propositions for retail and consumer payments at scale.
5. It is unclear from a user perspective why there are so many blockchains on which USDT and USDC are issued and transacted and why a user would choose one blockchain over another – in the small sample of blockchains I used in my tests, there is no obvious correlation between fees, confirmation times and share of issuance of the different blockchains (there is also the question of why a user would choose USDT over USDC and vice versa or any of the other 150+ USD stablecoins but that is a question for a separate article).
Overall, it is the blockchain used that determines the speed and cost of a stablecoin payment, rather than the stablecoin itself e.g. USDC payments on Ethereum are no different to USDT payments on Ethereum, other than the USD price.
Issuers need to maximise distribution to maximise stablecoin issuance, which presumably is why they make USDT and USDC available on so many blockchains. Market forces no doubt will decide the optimum mix and number of blockchains for issuers but it is too early to determine the full set of blockchains with the best long term prospects.
In summary, stablecoins look viable for consumer and retail payments but there are some considerable challenges to overcome - UX, consumer behaviour (adoption) and proposition economics.
Stablecoin data source, Defillama: https://defillama.com/stablecoins on 26 May 26
Note – self-custody wallets contain no funds, just the private key required to access and transact funds held on a blockchain. Funds are held always on the blockchain and never leave it, unless “burned” or bridged to another blockchain. Custody wallets differ in that the private key is held by a third party and the custody wallet can sit on top of the third party’s own ledger, which in turn accesses a blockchain only when it needs to – transactions between different customers of the third party can be netted off and/or settled with the third party’s own funds without touching a blockchain. Therefore, to test blockchain fees and confirmation times, a self-custody wallet is needed.
In addition to network (gas) fees paid in the network (blockchain) token, for progammable payments a smart contract could also be used to charge additional fees denominated in stablecoins, deducted from the principal amount sent.
Seed phrases (e.g. 12 or 24 words) are used to generate wallet addresses and private keys. When setting up a self-custody wallet, the same seed phrase is used typically to generate the wallet address and private key for each of the blockchains you wish to use, normally resulting in a completely different wallet address for each blockchain (except for blockchains using the same protocol such as Ethereum’s EVM which generate the same address).
If you send e.g. USDT on Ethereum to a USDC Ethereum address, the transaction will still be successful and the receiving Ethereum address will have a USDT balance in addition to any USDC balance that was there originally. However, if you send e.g. USDT on Ethereum to a USDT Tron address i.e. a different blockchain, the funds are likely to be lost.
Finality is different to confirmation in blockchains. For speed comparison, the elapsed time from initiation to first block confirmation is sufficient but the subsequent point at which the transaction is considered final i.e. irreversible, depends on the blockchain.
Gas fees generally are difficult to understand, in particular the fee mechanism for Tron e.g. try https://gasfeesnow.com/tron/. It seems that if a user has staked TRX (Tron), then their transaction fees are much lower on the Tron network than for users with no or insufficient staked TRX. Tron’s fee levels and mechanisms seem to be in a state of flux, with major changes made less than a year ago: https://finance.yahoo.com/news/tron-votes-slash-network-fees-205816765.html. Ethereum also has a reputation for very high and wildly changing fees during congestion periods, although in my tests the fees were relatively low. Such factors highlight the complexity of blockchain fees and the difficulty in handling them in everyday low value payment propositions.





Fantastic post!!
Thanks for this Jeremy, it provides very useful data. In fact, I'll add it into a presentation I'm doing next week (with proper attribution of course!).