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).
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.
There are 4 main types of transactions users can create in Ethereum:
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:
Contract creations and destructions (not part of a multi-action transaction) are a small percentage of transaction volume.
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.
If we look at how much gas transactions use (roughly, how expensive they are to process), we get a very different picture.
Perhaps multi-call transactions are headed for a Pareto distribution scenario: 20% of Ethereum transactions will account for 80% of gas costs.
In this final section, we look at the last 50,000 Ethereum blocks, which include 4,549,014 transactions. Some headline statistics:
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)|
|0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2||68,103||Wrapped Ether (WETH)|
|0x2157a7894439191e520825fe9399ab8655e0f708||49,489||Uniswap V1 (UNI-V1)|
|0x6b175474e89094c44da98b954eedeac495271d0f||47,758||Dai Stablecoin (DAI)|
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.
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.
© 2020 George Pîrlea ― last updated on 2020-01-21 at 14:06 UTC