George Pîrlea
Ethereum smart contract usage in 7 graphs
When Ethereum launched in July 2015, it was the first blockchain platform to support executing general smart contracts. Now, almost 5 years later, Ethereum is the most popular smart contract network and a hub for DeFi (decentralized finance) applications. But, in quantitative terms, what has changed in between? What is Ethereum being used for now? What was it used for 4 years ago?
In this post, I analyse Ethereum transaction data to show how network usage evolved over time and give a snapshot of what drives usage today.
This blog post comes with an associated Jupyter notebook. If you want to see how the figures here are generated (or reproduce them), do check it out. And please contact me if you find any errors.
(Our dataset includes Ethereum blocks up to 9.25 million, i.e. it is accurate to January 10th, 2020.)
Bird’s eye view
Let us start by looking at the information in Ethereum block headers. From its inception until now, Ethereum has produced 9,250,000 blocks. These blocks include a total of 616,860,313 transactions and measure just over 110 GB in size. (A synced Ethereum node uses roughly double the blockchain size in storage space, so your node will use roughly 220 GB of disk space.)
We can get a sense of Ethereum usage by looking at the number of transactions it processes in every block. Current blocks include, on average, 100 transactions, down from a peak of over 200 transactions per block in 2018.
Nonetheless, you should be careful when making inferences about Ethereum’s popularity based on this graph. The two periods are not directly comparable: recent blocks contain transactions with higher gas costs (and thus fewer transactions can fit in a block). In other words, since Ethereum’s transaction processing capacity is limited, throughput is not an accurate measure of popularity.
What about Ethereum’s latency? How quickly are blocks produced? The target is that an Ethereum block is produced roughly every 14 seconds, but this is affected by the ice-age (“difficulty bomb”) mechanism, which needs to be periodically reset via a hard-fork.
Putting these two figures together, the mean transaction throughput hovers around 7-8 transactions per second (TPS), down from the the 2018 peaks.
The “maximum” throughput shown in figure 3 is computed by taking the maximum number of transactions in a block over a window of 100,000 blocks and dividing it by the mean inter-block time for that window. Take it with a grain of salt.
Are the blocks full? No, since Ethereum does not have a fixed maximum block size like other chains. Rather, the block size in Ethereum is limited indirectly, by the amount of gas (processing fuel) a block can consume. This amount, called the gas limit, is not fixed, but can be changed by the miners.
A gas limit increase from 8 million to 10 million gas is being negotiated on the network at the moment (January 2020). The gas limit value in figure 4 is not averaged over a window – observe that there are constants jumps from block to block as the new limit gets negotiated by the miners’ nodes. (The gas limit proposal logic in the Parity client is different from the logic in the Geth client).
Transaction break-down
We want to know how many Ethereum transactions involve smart contracts (not all do) and get some insight into what exactly these transactions are doing. In technical terms, we want to analyse the transaction traces. We can generate traces by syncing parity with the --tracing=on option. This does not require syncing a full archive node, but it still took me roughly 14 days on my Core i7 laptop with an nVME SSD. The bottleneck will be your disk access speed. Disk usage is 300 GB.
Since there are over 616 million transactions, however, processing all of the traces would take a very long time. As such, in this section we will process a sample of transactions. More concretely, we selected a random sample of 16,611 blocks, containing 1,099,138 transactions.
This may seem like too small a number (0.17% of blocks and transactions), but it gives our measurements a 1% margin of error at a 99% confidence level. This is good enough for us, and 588 times faster than processing every transaction trace.
Insights
There are 4 main types of transactions users can create in Ethereum:
- user-to-user transfers
- transactions which invoke a single contract
- transactions which create or kill contracts
- transactions which invoke multiple contracts (or a single contract multiple times) or perform a mix of actions
If you are familiar with Ethereum, you might know that a transaction can do only one thing, e.g. send ETH to one user or invoke a particular method on a contract. The last type of transaction arises when the contract being called makes other calls of its own (these are sometimes called internal transactions). The transaction traces from Parity allow us to explore what these internal transactions are doing.
The differences between transaction types become important when we think about scaling, but I will leave that to another post. So what’s the breakdown and how did it change over time? The graphs below show measurements over “buckets” of 100,000 blocks at a time.
There is a lot of information in this plot. Some highlights:
- the percentage of user-to-user ETH transfers is on a solid downward trend
- there is an inverse correlation between single calls and transfers
- the proportion of multi-call transactions has stayed roughly constant between 10 and 20%
Contract creations and destructions (not part of a multi-action transaction) are a small percentage of transaction volume.
ERC20 token transfers
The ICO boom of 2017 is clearly visible starting at block 3.8 million. The rise of single calls reflects token auctions and token transfer transactions. But it would be better to have some clear data on this. What percentage of single calls are ERC20 token transfers?
76.2% of single call transactions in our sample are ERC20 token transfers. This suggests that most of Ethereum’s transaction volume simply moves assets around, without using more complex smart contract logic.
It will be interesting to see whether the rise of DeFi applications will lead to a larger share of multi-call transactions.
Gas usage
If we look at how much gas transactions use (roughly, how expensive they are to process), we get a very different picture.
Some observations:
- multi-call transactions (~17% of transactions) account for ~50% of gas costs
- ETH transfers and ERC20 token transfers (~73% of transactions) account for ~35% of gas costs
- high gas usage for contract deployments early in Ethereum’s history and pre-ICO boom
Perhaps multi-call transactions are headed for a Pareto distribution scenario: 20% of Ethereum transactions will account for 80% of gas costs.
Ethereum usage now
In this final section, we look at the last 50,000 Ethereum blocks, which include 4,549,014 transactions. Some headline statistics:
- 30.7% transfers, 51.6% single calls, 17.6% multi-calls
- 81.9% of single calls are ERC20 direct token transfers
- 7.1% of multi-call transactions are “single call” transactions to a contract with a proxy in front
- of those, 80.2% are ERC20 transfers
- 33.5% + 7.1% = 40.6% of multi-call transactions pass through at least one proxy contract
These 4,548,014 transactions touch, but not necessarily modify the state of, 1,109,155 distinct addresses (this includes addresses touched only during internal transitions). The 10 most commonly-touched addresses are:
| Contract address | Times touched | Explanation |
|---|---|---|
| 0xdac17f958d2ee523a2206206994597c13d831ec7 | 519,046 | Tether USD (USDT) |
| 0xcadb96858fe496bb6309622f9023ba2defb5d540 | 120,626 | SBToken (SBC) |
| 0xea674fdde714fd979de3edf0f56aa9716b898ec8 | 106,708 | Ethermine |
| 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 | 68,103 | Wrapped Ether (WETH) |
| 0x06a6a7af298129e3a2ab396c9c06f91d3c54aba8 | 63,620 | 0xUniverse (PLANET) |
| 0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5 | 50,327 | Nanopool |
| 0x2157a7894439191e520825fe9399ab8655e0f708 | 49,489 | Uniswap V1 (UNI-V1) |
| 0x6b175474e89094c44da98b954eedeac495271d0f | 47,758 | Dai Stablecoin (DAI) |
| 0x080bf510fcbf18b91105470639e9561022937712 | 46,234 | 0x |
| 0xf509accd096a82ef2562d316669d0aa4b60f3796 | 43,179 | ??? |
Remember, these counts also include addresses touched only during internal transactions. Nonetheless, they mostly chime with what we would expect: ERC 20 tokens, DeFi applications, and mining pools account for a large chunk of usage.
SBToken has appeared very recently (December 2019) – it is unclear what it is used for, but a lot of internal transactions touch it.
Instead of conclusions
There is a lot of information on public blockchains. And in the case of smart contract chains like Ethereum, most of it is “hidden away” in internal transaction traces. In this post, we dug out a bit of that, but we only scratched the surface. There is a lot more underneath.
© 2025 George Pîrlea ― last updated on 2025-08-14 at 02:17 UTC