Bitcoin Block Size Debate & Scalability Issues
For a few years there has been a large divide in the bitcoin community over disagreements in how the cryptocurrency should scale as adoption increases and more transactions are being made. The original vision of bitcoin was a currency that could be transferred worldwide instantly and at almost no cost. For a while this worked well, but as the currency grew in popularity transactions started to take longer to be confirmed on the network. Users have had to pay large transactions fees in order to make fast payments. For obvious reasons this has been stifling growth of bitcoin. Merchants have been unwilling to accept a currency that can’t be transferred instantly, and users don’t want to pay large fees in order to spend their own money.
This may seem like an inherent weakness of bitcoin, and so far it certainly has affected adoption. However, it doesn’t have to be this way and indeed there have been multiple proposals for fixing this problem. I’ll attempt to explain in simple terms here how bitcoin reached this point and what’t being done about it.
This a complex situation with years of history and fighting within the community. There’s a lot of information out there, so this is only meant to be an introduction to the problem and some of the proposed solutions, briefly explaining things like the bitcoin blocksize debate, Bitcoin Unlimited, SegWit and Bitcoin Cash.
What is the Block Size Debate?
To summarise how bitcoin works, it has a public blockchain, which is a record of all previous transactions that is open for anyone to see, and cannot be modified. As the name ‘blockchain’ suggests, bitcoin’s ledger is chain of blocks, where a block refers to a chunk of transactions that is chained onto the existing blocks by a miner. Cryptography is used to ensure miners put computing power into securing the blockchain, and when a miner finds a block they are rewarded with bitcoin. The amount of transactions in each new block depends on the amount of transactions picked up by the miner in the time it took to mine it — on average a new block is mined every 10 minutes, so in theory a block could contain all the transactions broadcast to the network in the 10 minutes since the previous block.
All of this is a very elegant system, and you can read more about it in the bitcoin whitepaper. However, there was a small problem with it. The blockchain has to be downloaded and maintained by all full nodes on the network, in order to ascertain the validity of transactions and prevent them from being modified. This means every block has to be downloaded, which for new nodes can mean huge data transfer and storage space requirements.
Spam on the Network
If every transaction in a block is a natural transaction created to transfer bitcoin from one address to another, then this isn’t really a problem – having a decentralised immutable ledger of all transactions is one of the main features of bitcoin. However, what if blocks were filled with spam? In the 10 minutes it takes to mine a new block, anyone could broadcast any amount of transactions to be picked up by a miner and included in the next block. This means anyone could attack the network by sending thousands of tiny transactions in every block at a small cost to the attacker. All these transactions would have to be downloaded by every full nodes on the network, causing congestion and putting people off from running nodes.
The 1MB Blocksize Cap
This issue was recognised back in 2010 and a temporary fix was made to prevent, or at least mitigate this kind of attack. A 1MB cap was put on the size of each newly mined block, meaning that any block greater than 1MB in size would be rejected on the network. This worked well, and led to an economy where the transactions with the highest fees would be prioritised by miners, who receive the fees as a reward for their work. As the usage of bitcoin at the time was still low, this worked very well for a while. Spammers wanting to fill blocks with thousands of small transactions would have to pay enough in fees to ensure those transactions were included in the block, which made this type of attack unfeasible.
Everything was well for a few years until around the end of 2015. With the increase in popularity and adoption of bitcoin, the blocks started to fill up. Blocks were reaching close to 1MB in size and transactions often had to wait to be included in the next block. With time this only got worse, as a backlog of transactions built up, particularly during peak times. You would no longer be guaranteed to have your transaction confirmed quickly in the next block, but instead it could be in 2 or 3 blocks, or even further away. If you did have an urgent transaction, you could pay a larger fee, thus incentivising miners to include your transaction over other transactions. However, this soon led to users having to bid higher and higher to have their transactions included quickly.
Using bitcoin as a currency in, for example, high street stores, started to become less and less feasible. Adoption of bitcoin slowed, merchants ceased to be as interested in taking bitcoin payments, people had to be more careful with their transactions and in some cases started to use other cryptocurrencies that didn’t (yet) have this problem.
The 1MB cap on the block size was supposed to be temporary, but this fact was often overlooked as everything was working fine for so long. Many people didn’t care, as bitcoin was still great as a store of value, and people continued to profit from speculating. However, no matter how you look at it, the 1MB size was arbitrary and there was no way bitcoin could scale for long with that hardcoded cap. There were many discussions on how to create a future-proof solution to replace the limit, but none of these were implemented until it was too late. There have been two main solutions proposed: increase the block size limit from 1MB to a higher value, or build secondary networks on top of bitcoin and handle most transactions off-chain.
Increasing the Block Size
This is the simpler solution – just increase the 1MB limit. On the surface, this is easy, as it would be a small change to make in the codebase and it wouldn’t require any change in how bitcoin fundamentally works. However, it does leave some questions. A small increase could work temporarily, but how long until we need to increase it again? Who would decide what the limit is and when it should be increased in the future?
Many were against increasing the size at all, arguing that it would become difficult for most people to store the blockchain if it increased in size too fast. However, considering Moore’s Law and the much lower price of storage, bandwidth and computing power now compared to 2010, it’s clear we can at least handle a substantial increase in block size now and potentially again every year or two going forwards.
A few implementations of the Bitcoin client have been released, including the following:
- Bitcoin XT – This proposed doubling the block size limit every two years – rather drastic perhaps, but could be considered necessary if adoption was to happen quickly.
- Bitcoin Classic – Less aggressive than Bitcoin XT, this fork promoted a single increase in the limit from 1MB to 2MB.
- Bitcoin Unlimited – This is a much more flexible approach, and gained a lot more support even after XT and Classic didn’t get enough momentum to actually reach a change in the network. It advocates an approach that allows nodes on the network to configure the sizes of blocks they’re willing to process. Depending on the setting of other nodes, this would allow a progressive and gradual increase in the blocksize as required.
Proponents of the increase in block size are often referred to as ‘big-blockers’, and tend to support the idea of bitcoin being used as a worldwide currency that’s accessible for everyone. From the perspective of big-blockers this solution is seen as keeping bitcoin decentralised, but others argue that it’s causing more centralisation, as people who can’t afford to store the entire blockchain are prevented from running a full bitcoin node. Maintaining a full node, however, is not required in order to be able to safely use bitcoin, as long as enough independent people around the world still are able to run nodes.
The other idea for scaling bitcoin involves using layer-2 off-chain solutions like Lightning Network. The idea behind this is that it’s possible to scale the network without increasing the block size limit at all. Instead, separate networks would exist outside of the bitcoin blockchain to handle the majority of transactions. Use of these networks would mean that each transaction is not stored on the blockchain, but instead in a payment channel on the external network. Many transactions could happen in this channel between users, and every now and then the amounts owned by each user would be settled on the bitcoin network.
This solution would allow any amount transactions to be made between a subset of users without having to record each one on the blockchain. However it depends on SegWit being introduced to bitcoin, which is a proposed update to how transactions are signed. SegWit also increases the block size limit a small amount, and is touted by many as the best option for scaling bitcoin, by introducing a small block size increase, then allowing off-chain solutions like Lightning Network to be introduced.
There is definitely a potential for something like Lightning Network to be useful, but it’s a big deviation from the way bitcoin currently works. Many people who advocate this do not want block size increases, which would force people to use off-chain solutions, as on-chain transactions would cease to be viable for anyone who can’t afford the fees. Another issue is that the off-chain network has to be run by someone. Either everyone running bitcoin nodes would also have to start running Lightning Network nodes to support payment channels, or large expensive gateways would exist to process off-chain transactions. There’s a risk here that big companies would be the ones owning these networks, thus essentially controlling the flow of bitcoin.
Why Are We Here?
With all of these solutions being proposed, why do we still have the 1MB block size limit and slow expensive transactions? The simple explanation is that the bitcoin community has not been able to agree on how to proceed. Bitcoin (for good reason) is not ‘owned’ or controlled by any central person or group of people. This is a great thing, and is what makes bitcoin so strong. However it also means there is not necessarily an easy way to determine how bitcoin should be improved. There are provisions in place for allowing changes to the protocol, and mostly this depends on miners and runners of bitcoin nodes reaching consensus. Indeed, this has happened many times in the past, but due to politics, interference from people who are afraid of bitcoin growing, greed and sometimes the egos of people with loud voices, no consensus has been reached in this case.
In order for a big change to be made to how bitcoin works, miners and nodes have to signal agreement with the proposed change. In theory anyone could create a fork of bitcoin and attempt to run their own version of the network. However, it wouldn’t get very far without the support or miners and users. Thus it’s only in the interest of all parties to stick with the version of bitcoin that has the most support from everyone else. When the community is divided, there’s a risk that the entire currency could be split into two separate currencies, each with less strength and value before. If one fork has an overwhelming majority, most people would jump ship to the other fork, which would be the de facto ‘real’ bitcoin – no one would want to be on the losing side, or they could risk losing a lot of money.
In order to avoid a risky fork, most proposals for changes to the protocol require a very high consensus before any changes will be enforced. If most of the network is behind a solution, the rest of the users will have no choice but to join. The problem here is that a strong enough consensus hasn’t been reached, no matter how many times it’s been attempted with different solutions on the table. However, all that seems about to change!
August 1st 2017
In May 2017 a group of big players in the bitcoin community got together and came up with an agreement on another attempt to solve the scaling problem. In essence, this proposal, called SegWit2X, suggested an activation of SegWit followed by a separate increase of the blocksize to 2MB 6 months later if 80% of miners were to signal support. Alongside this, another proposal, BIP148, was suggesting a fork to enforce SegWit, due to be activated on August 1st 2017. Miraculously, it didn’t take long for miners to signal support for SegWit after SegWit2X was enabled, and it looks like Segwit2X is going to go ahead. While this isn’t the solution everyone wanted, some action is finally being taken and hopefully bitcoin can start to move forwards again.
Recently, possibly as a consequence of the fact that SegWit is surely going to make its way into bitcoin, another option has appeared in the form of Bitcoin Cash (BCC). This is a fork of bitcoin, and it’ll also activate on August 1st. It increases the block size limit from 1MB to 8MB, allowing for a huge jump in transaction volume on the network. It’s gained considerable support, and in a pretty short amount of time. Bitcoin Cash will not implement SegWit, and thus will be a more traditional version of bitcoin.
Bitcoin Cash is quite big news, as it means there is to be a split in bitcoin, and two separate currencies will arise. Anyone who owns any amount of bitcoin will also own the same amount of Bitcoin Cash as of August 1st. It is unknown whether BCC has enough support from miners to remain viable for long, so it will be interesting to see what happens. Either one of the two forks could have a much higher amount of support, in which case the other will likely fizzle out as people switch to the bigger chain — or both could coexist in a similar way to ETH and ETH Classic.
Now the main thing to do is wait for August 1st and see what happens following that date. If you own any bitcoin on an exchange or online wallet, it’s worth checking it will support both forks. If you’re unsure, it’s a good idea to transfer any bitcoin to a wallet you own the private keys to. That way you can be assured you’ll own your bitcoin on both forks. After the fork happens, bitcoin spent on one chain won’t affect bitcoin spent on the other as future transactions will be entirely separate. Asides from that, just keep an eye on the news, expect some volatility, and see what happens!