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.

Mean transactions per block. There is a large spike to 220 transactions per block at block 4.2 million, followed by a decrease to between 100 and 140 transactions per block until block 9.25 million.
Figure 1: Mean transactions per block. Note the huge spike in the autumn of 2017.

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.

Mean inter-block time in seconds. Values hover around the 14 second mark, but with ocassional spikes up to 28 seconds, 20 seconds, and 17 seconds respectively.
Figure 2: Mean inter-block time in seconds. Y-axis starts at 14 seconds. The spikes are produced by the ice-age mechanism, which is defused by a hard-fork to reduce inter-block times to the normal range.

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.

Mean and maximum transactions per second (TPS). Mean TPS around block 5 million at 14 transactions per second, then fluctuates between 5 and 7 transaction per second.
Figure 3: Mean and maximum transactions per second (TPS).

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).

Mean gas usage per block vs the block gas limit. Around block 3.8 million, gas used jumps from 10% of the gas limit and remains at around 90% of the gas limit after that.
Figure 4: Mean gas usage per block vs the block gas limit.

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.

Transaction breakdown per type in the sample of 1,099,138 transactions. Transactions are assigned to buckets of 100,000 blocks and the percentage distribution for each bucket is plotted. There is a persistent, sharp decline in the percentage of direct ETH transfers, correlated with an increase in single call transactions.
Figure 5: Transaction breakdown per type in the sample of 1,099,138 transactions. Transactions are assigned to buckets of 100,000 blocks and the percentage distribution for each bucket is plotted. The ICO mania that started in May 2017 (block 3.8 million) is clearly visible in the rise of single calls (token auctions and transfers).

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?

Transaction breakdown per type in the sample of 1,099,138 transactions. Single calls are split into ERC20 transfers and non-ERC20. ERC-20 transfers outnumber other single calls.
Figure 6: Transaction breakdown per type in the sample of 1,099,138 transactions. Single calls are split into ERC20 transfers and non-ERC20. The colours are changed compared to the previous figure.

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.

Gas cost as percentage of total per type of transaction in the sample of 1,099,138 transactions. After block 5.5 million, multi-call transactions become dominant in terms of gas used.
Figure 7: Gas cost as percentage of total per type of transaction in the sample of 1,099,138 transactions. Bucket size is increased to 250k. The gas cost of operations has changed over time via hard-fork, so different periods are not directly comparable.

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.