Home › Browse › BIP 105

BIP 105: Consensus based block size retargeting algorithm

In plain English: Proposed a mechanism for changing the maximum block size based on votes or consensus among network participants rather than a fixed number. It aimed to let the limit adapt over time without repeated contentious upgrades, but required a hard fork.

Status
Closed
Type
Specification
Layer
Consensus (hard fork)
Authors
BtcDrak
Assigned
Last changed
Topics
Capacity, Consensus
Source
bip-0105.mediawiki on GitHub · Markdown

Abstract

A method of altering the maximum allowed block size of the Bitcoin protocol using a consensus based approach.

Motivation

There is a belief that Bitcoin cannot easily respond to raising the blocksize limit if popularity was to suddenly increase due to a mass adoption curve, because co-ordinating a hard fork takes considerable time, and being unable to respond in a timely manner would irreparably harm the credibility of bitcoin.

Additionally, predetermined block size increases are problematic because they attempt to predict the future, and if too large could have unintended consequences like damaging the possibility for a fee market to develop as block subsidy decreases substantially over the next 9 years; introducing or exacerbating mining attack vectors; or somehow affect the network in unknown or unpredicted ways. Since fixed changes are hard to deploy, the damage could be extensive.

Dynamic block size adjustments also suffer from the potential to be gamed by the larger hash power.

Free voting as suggested by BIP100 allows miners to sell their votes out of band at no risk, and enable the sponsor the ability to manipulate the blocksize. It also provides a cost free method or the larger pools to vote in ways to manipulate the blocksize such to disadvantage or attack smaller pools.

Rationale

By introducing a cost to increase the block size ensures the mining community will collude to increase it only when there is a clear necessity, and reduce it when it is unnecessary. Larger miners cannot force their wishes so easily because not only will they have to pay extra a difficulty target, then can be downvoted at no cost by the objecting hash power.

Using difficulty as a penalty is better than a fixed cost in bitcoins because it is less predictable.

In order to prevent miners having complete control over blocksize, an upper limit is required at protocol level. This feature ensures full nodes retain control over consensus, remembering full nodes are the mechanism to keep miners honest.

Specification

The initial block size limit shall be 1MB.

Each time a miner creates a block, they may vote to increase or decrease the blocksize by a maximum of 10% of the current block size limit. These votes will be used to recalculate the new block size limit every 2016 blocks.

Votes are cast using the block's coinbase transaction scriptSig.

As per BIP34, the coinbase transaction scriptSig starts with a push of the block height. The next push is a little-endian number representing the preferred block size in bytes. For example, 0x4c(OP_PUSHDATA1) 0x03(size of constant) 0x80 0x84 0x1e(2MB) or 0x4c(OP_PUSHDATA1) 0x04(size of constant) 0x80 0x96 0x98 0x00(10MB).

If a miner votes for an increase, the block hash must meet a difficulty target which is proportionally larger than the standard difficulty target based on the percentage increase they voted for.

Votes proposing decreasing the block size limit do not need to meet a higher difficulty target.

Miners can vote for no change by voting for the current block size.

For blocks to be valid the blockhash must meet the required difficulty target for the vote otherwise the block is invalid and will be rejected.

Every 2016 blocks, the block size limit will be recalculated by the median of all votes in the last 2016 blocks. This will redefine the block size limit for the next 2016 blocks.

Blocks that are larger than the calculated base block size limit are invalid and will be rejected.

The base block size limit may not reduce below 1MB or increase above 8MB (the exact number for the upper limit requires further discussion).

Acknowledgements

This proposal is based on ideas and concepts derived from the writings of Meni Rosenfeld and Gregory Maxwell.

References

BIP34

This work is placed in the public domain.

Related proposals

  • BIP 30: Duplicate transactions: Deployed. Added a rule forbidding a block from including a transaction with the same ID as an earlier one whose outputs are not fully spent. Such duplicates can overwrite earlier coins and make them…
  • BIP 34: Block v2, Height in Coinbase: Deployed. Upgraded blocks to version 2 and required each block's coinbase transaction (the one paying the miner) to include the block's height. This makes every coinbase unique, preventing duplicate…
  • BIP 42: A finite monetary supply for Bitcoin: Deployed. A tongue-in-cheek proposal fixing a software quirk that would have made the block reward reappear and coin issuance restart a couple of centuries from now. It ensures the roughly 21 million coin…
  • BIP 50: March 2013 Chain Fork Post-Mortem: Deployed. A post-mortem of the March 2013 incident in which a database limit in older Bitcoin software caused the blockchain to split temporarily. It explains what went wrong, how miners and developers…
  • BIP 54: Consensus Cleanup: Complete. Bundles fixes for several long-standing protocol weaknesses: the timewarp attack (manipulating block timestamps to speed up coin issuance), blocks that take extremely long to validate, Merkle tree…
  • BIP 62: Dealing with malleability: Closed. Proposed a set of rules to stop third parties from altering a transaction's ID without changing what it does, a problem called malleability. It was withdrawn after Segregated Witness (SegWit) solved…