At the heart of Bitcoin is the blockchain, a global, shared record of every Bitcoin transaction that has ever occurred. It gets its name from the fact that every 10 minutes, on average, the peer-to-peer Bitcoin network adds a new "block" containing records of recent transactions.
The blockchain is shared among the numerous computers that participate in the transaction-clearing process known as "mining." To avoid overloading those computers, Bitcoin software currently limits each block to one megabyte in size. The result: right now, the Bitcoin network is only capable of processing around 7 transactions per second. For comparison, the Visa network is designed to handle peak volumes of 10,000 transactions per second.
So far, that hasn't been a problem because Bitcoin users are only generating around 1 transaction per second. But if the Bitcoin economy continues to grow, it's only a matter of time before that limit becomes a problem.
Can the Bitcoin network be tweaked to handle the much higher transaction volumes that could occur in the future? To answer that question, I talked to prominent Bitcoin developer Mike Hearn. He helped me understand the current limits on Bitcoin performance and how Bitcoin's development team plans to overcome them.
Timothy B. Lee: Can you briefly describe the current limits on how many transactions the Bitcoin network can accommodate?
Mike Hearn: There are two different kinds of Bitcoin client: Full nodes and "light nodes" we call simplified payment verification (SPV) nodes. Light nodes don't care how big the blocks are. And full nodes have a hard physical limit [of one megabyte per block.]
So one megabyte every 10 minutes, dividing by the average size of transactions [gives us] the current limit [of] about 7 per second.
How close are we to that limit right now?
If you look at a chart of the number of transactions per day, we're peaking at 70,000 transactions per day. We're not even at one per second [e.g. 86,400 transactions per day] yet. It's grown. It's grown pretty nice and fast. If you plot the overall graph from the system. It has this nice little exponential slope. We're quite a way from hitting these limits. It's a little bit fuzzy as well, for various reasons. We're not in any danger of running out of capacity right now.
What's going to be required to get beyond 7 transactions per second?
We just need to take away the limit and get people to upgrade their nodes. The reason it hasn't been done yet is that we're still trying to figure out whether there should be a new limit or no limit at all. [If there's no limit,] how do we ensure someone doesn't mine an artificially bloated block that's just there to annoy people?
Gavin [Andresen, Bitcoin's lead developer] is working on some of the work that's needed for this to be done. He's working on reforming the fee system. The design we're heading toward is that there won't be any limit, but by default miners will refuse to process blocks that are ridiculously big.
Can you explain how Bitcoin fees work and why the system has them?
You can attach a fee [e.g. a payment to the miner processing the transaction] to any transaction in Bitcoin. Originally when Bitcoin was new, all transactions were free, and over time the rules were adjusted so you can still send free transactions but they're slower. Fees act as a kind of a throttle for preventing flooding the network with bogus transactions. If every transaction was always free, you'd get people bouncing coins back and forth all the time.
The main issue we have at the moment is the way that fees are set and negotiated across the network is very basic. They're not really negotiated. The minimum fee size was picked by Gavin less than a year ago. It was picked at a time when the Bitcoin price was much lower than today. Because the numbers are fixed in the software, they're not specified in terms of dollars, they're specified in terms of Bitcoins. So Bitcoin transactions have become more expensive for no good reason. Gavin is working on changes to how that works.
Nodes will watch the transactions that get broadcast on the system, and then they'll watch how long transactions take. So they'll say "if you want to get processed in 3 blocks, you should pay this much." The idea is that miners set the fees they are willing to charge, and nodes observe the operation of the market and estimate observed behavior. My hope, if other things have been done correctly, is that fees will fall significantly.
When I started using Bitcoin in 2011, it took around a day for my Bitcoin software to download all Bitcoin transactions from Bitcoin's origins in 2009 until 2011. By 2013, every time I started the client after a few days of inactivity it would take hours just to catch up to a few days of activity. Isn't this problem going to get worse and worse as the network gets busier?
End users are not running this software [e.g. software that downloads the whole blockchain] any more. One of the things we've been doing is transitioning users away from Bitcoin-Qt, the software you have [which downloads the entire blockchain], toward applications like Multibit. Multibit will synchronize with the blockchain in a few seconds. [Getting that to work] has been a massive pile of work. If you have a computer which is running all the time, connected to the Internet, you can help out the system by running [the full Bitcoin] software, but if you just want to use it, then you use this sort of lighter-weight software.
There are different degrees of lightness, In 2011, the choice was Bitcoin-Qt or a Web wallet. Since then, we've developed something described by [Bitcoin creator] Satoshi [Nakamoto] in his original paper. It uses a slightly weaker trust model than Bitcoin-Qt. In SPV mode, with clients like Multibit and Hive, it still scans the blockchain, and what it assumes is whatever blockchain has the majority of miners on it [is correct]. Instead of verifying the entire contents, it just trusts that the majority of miners are honest. It's still peer to peer. There's no central server that tells you what to do or what your balance is or whatever. As long as the majority is honest, it works.
Basically, [an SPV node] has a list of blocks which are known to be a part of the best chain as of a few months ago, and then downloads just a small part of the block. It downloads the block header, and then downloads transactions that are relevant. It connects to a random peer [on the Bitcoin network]. The SPV client doesn't do a direct query. Instead, it uploads what's called a noisy Bloom filter, a garbled view of what the wallet [e.g. the SPV client] needs. The node sends back some subset of the blockchain. The SPV client does some mathematical proof-checking to make sure the node isn't forging all this stuff.
So if ordinary users start using SPV clients instead of full-blown Bitcoin clients, what will that do to the structure of the Bitcoin network?
We don't have great metrics, to be honest. There are thousands and thousands of nodes today. But what's happening is that over time the structure of the network is changing. The composition of nodes has been moving away from temporary nodes running at home to long-term nodes running in data centers.
It's very cheap to rent servers these days. Virtualization has made it very cheap. So it's completely feasible for an individual who has a job to run their own server and run a Bitcoin node on it. The full node does give you better security. If you're running an online shop for example, it makes sense to run a full node. It's really cheap. Your computer is running anyway.