Bitcoin has a maximum of 1 MB of transaction data in each block.
- Why is this limit present?
- When was it added?
- Was it intended to be temporary?
Bitcoin has a maximum of 1 MB of transaction data in each block.
Why is this limit present?
There has to be clearly defined rules about which blocks are valid and which are not for the network to agree. Obviously no node will accept a block that is 10 million terabytes, it would be near impossible to download even if it were valid. So where do you set the limit? And what if one node sets their limit differently than other nodes on the network? If this were to happen, the network would no longer be in consensus about which blocks were valid when a block was broadcasted that met some nodes' size limits and did not meet others.
Setting a network limit on the maximum block size ensures that everyone is in agreement about which blocks are valid and which are not, so that consensus is achieved.
Suppose we remove the 1 MB cap entirely. A large pool says to itself, "I wish I had a larger percentage of the network hashrate so I could make more profit."
Then they realize that since there's no block size limit, they can make a block that is 4 GB large by filling it with nonsense. They and a few other pools have bandwidth large enough to download a block of this size in a reasonable time, but a smaller pool does not. The tiny pool is then stuck trying to download a block that is too large, and continuing to mine on their previous block until they finish downloading the new block. This means the small pool is now wasting their time mining blocks that are likely never to be accepted even if they were solved, since they wouldn't be in the 'longest' chain. Since their hash power is wasted, the original pool operator now has effectively forced smaller pools out of the network, and simultaneously increased their percentage of the network hashrate.
Essentially, larger blocks means fewer people that can download and verify the chain, which results fewer people willing to run full nodes and store all of the blockchain data.
If there were no block size limit, malicious persons could artificially bloat the block with nonsense and increase the server costs for everyone running a full node, in addition to making it infeasible for people with just home computers to even keep up with the network.
The goal is to find a block size limit with the right tradeoff between resource restrictions (so that someone on their home computer can still run a full node), and functional requirements (being able to process X number of transactions per second). Eventually, transactions will likely be done off-chain using micropayment channels, but no such solution currently exists.
When was it added?
This commit, from July 2010, shows the actual commit that added the MAX_BLOCK_SIZE
parameter. The commit doesn't actually even mention that the max block size was added, strangely enough. I suspect that it was done as part of a release that fixed a critical bug, so Satoshi could be sure that everyone would upgrade.
I think, it is worth to mention what Satoshi said about raising the block size...
It can be phased in, like:
if (blocknumber > 115000) maxblocksize = largerlimit
It can start being in versions way ahead, so by the time it reaches that block number and goes into effect, the older versions that don't have it are already obsolete.
When we're near the cutoff block number, I can put an alert to old versions to make sure they know they have to upgrade.
Source: https://bitcointalk.org/index.php?topic=1347.msg15366#msg15366