Hint: it’s NOT pretty…
Let’s imagine Bitcoin has accomplished the unthinkable — its become the one true currency used for peer-to-peer payments around the world.
In this Bitcoin Valhalla, let’s imagine that all non-cash payments are conducted with Bitcoin. Instead of credit cards, people whip out their favourite Bitcoin hardware or mobile wallets in coffee shops and hair salons across the world. Just how many of these non-cash payments would there be in this perfect world?
Today, non-cash payments account for approximately 522 billion transactions per year worldwide, and that number seems to be increasing in quadratic fashion, meaning it’ll be a lot bigger by the time we get to Bitcoin Valhalla. There’s no predicting when exactly we’ll get there, so let’s imagine that Bitcoin has taken over as the dominant currency today.
Now of course, Bitcoin has to make sure its system can accommodate the enormous number of transactions here without bottlenecking. So let’s dive into the source code and flick the scalability switch that appeared to be there all along — let’s increase the size of the block enough to account for our 522 billion transactions.
Just How Big Should Our Block Be?
Let’s do some napkin math to see just how big our new block is.
522 billion transactions a year translates to 1.4 billion transactions a day.
This is equivalent to 9,722,220 transactions every 10 minutes, which coincides with how often blocks are published to the Bitcoin blockchain.
Assuming transaction sizes stay around the same size, at 250 bytes, this means that every block would hold about 2.4 gigabytes of data.
This transaction volume would generate about 350 gigabytes on the blockchain every day, or 127 terabytes every year.
For those who don’t know, the blockchain ledger is upheld and propagated by nodes, which are user machines that hold a copy of the current valid Bitcoin blockchain ledger. These nodes all work together to uphold the decentralized blockchain that we’ve come to love. Nodes receive new transactions from users’ wallets, have miners validate them, then receive mined blocks from miners to add to its ledger. The nodes then also immediately propagate these validated blocks out to other nodes across the Bitcoin network.
Today, nodes validate and propagate 1 megabyte blocks to other nodes across the world. According to this analysis about the effects of block validation on memory usage, the process of validating a single block on a node (i.e. serializing and hashing it) consumes about 1.25 gigabytes of memory and takes approximately thirty seconds. The analysis also claims that block validation times scale quadratically, and an eight megabyte block would take approximately 150 minutes to validate. However, given only two datapoints, and for simplicity’s sake, let’s assume validation time and memory consumption scale only linearly.
Extrapolating to fit our newfound monster blocks, we’re looking at a validation time of over 51,000 minutes per block, or approximately 35.4 days! It would take over a month for a node running current-day consumer-grade hardware to validate any block that it receives. On top of that, memory consumption per block validation runs in the range of 3 terabytes. The only machine that seems to come even close to that level of memory (outside of server racks) is the unreleased HP Z8 that will cost well over $10,000 at launch.
This machine would also need to store the 127 terabytes of data generated every year. With the cost of storage hovering at 1.9 cents per gigabyte, this machine’s operator would need to spend approximately $2,413 per year on storage costs to keep up with the blockchain’s growth!
In comparison, the blockchain today produces about 50GB of data, which amounts to around $0.95 in costs per year.
Right away, this entire thing is starting to look absolutely ridiculous, but bear with me for a little while longer.
Bandwidth for our Blocks
So our nodes also need the ability to both download these blocks from nodes, and then transmit them to other nodes. Let’s have a look at the current distribution of nodes across the world.
It should be noted that according to the Bitcoin Wiki, there are up to 15 times as many nodes (150,000+) that are not shown in distribution charts such as the one above, mainly due to port configurations, but again, let’s keep things simple and assume the given distribution is an accurate one. Let’s assume our node has to download a block every 10 minutes, and uploads the minimum 144 blocks per day recommended by Bitcoin Node guidelines. This comes out to over 691 GB of bandwidth everyday, or 20.73 terabytes per month.
Let’s look at bandwidth costs in the United States, where the largest distribution of nodes reside. Since no consumer grade network could feasibly provide that level of bandwidth, I had to resort to a handy CDN aggregator to see what our connectivity options were.
We’re assuming that fiber networks are prevalent enough for speed to not be an issue. The absolute lowest price a single node operator in the United States could pay to propagate Bitcoin blocks would be $600/month. That’s the cost to just one operator!