{"number":106,"title":"Dynamically Controlled Bitcoin Block Size Max Cap","authors":["Upal Chakraborty"],"status":"Closed","type":"Specification","layer":"Consensus (hard fork)","created":"2015-08-24","requires":[],"replaces":[],"replacedBy":[],"discussion":[],"abstract":"This BIP proposes replacing the fixed one megabyte maximum block size with a dynamically controlled maximum block size that may increase or decrease with difficulty change depending on various network factors. I have two proposals regarding this... i. Depending only on previous block size calculation. ii. Depending on previous block size calculation and previous Tx fee collected by miners.","eli5":"Proposed letting the maximum block size rise or fall at each difficulty adjustment based on how full recent blocks were, with a variant that also considered miners' fee income. The idea was to adapt capacity to demand automatically; it was part of the block size debate.","categories":["network"],"filename":"bip-0106.mediawiki","githubUrl":"https://github.com/bitcoin/bips/blob/master/bip-0106.mediawiki","format":"mediawiki","readingMinutes":3,"inbound":1,"revisions":11,"impact":37,"core":false,"references":[],"lastModified":"2025-10-08","html":"<h2 id=\"abstract\">Abstract</h2>\n<p>This BIP proposes replacing the fixed one megabyte maximum block size with a dynamically controlled maximum block size that may increase or decrease with difficulty change depending on various network factors. I have two proposals regarding this...</p>\n<p>i. Depending only on previous block size calculation.</p>\n<p>ii. Depending on previous block size calculation and previous Tx fee collected by miners.</p>\n<h2 id=\"motivation\">Motivation</h2>\n<p>With increased adoption, transaction volume on bitcoin network is bound to grow. If the one megabyte max cap is not changed to a flexible one which changes itself with changing network demand, then adoption will hamper and bitcoin's growth may choke up. Following graph shows the change in average block size since inception...</p>\n<p><a href=\"https://blockchain.info/charts/avg-block-size?timespan=all&showDataPoints=false&daysAverageString=1&show_header=true&scale=0&address=\">https://blockchain.info/charts/avg-block-size?timespan=all&showDataPoints=false&daysAverageString=1&show_header=true&scale=0&address=</a></p>\n<h2 id=\"specification\">Specification</h2>\n<h3 id=\"proposal-1-depending-only-on-previous-block-size-calculation\">Proposal 1 : Depending only on previous block size calculation</h3>\n<p>If more than 50% of block's size, found in the first 2000 of the last difficulty period, is more than 90% MaxBlockSize       Double MaxBlockSize   Else if more than 90% of block's size, found in the first 2000 of the last difficulty period, is less than 50% MaxBlockSize       Half MaxBlockSize   Else       Keep the same MaxBlockSize</p>\n<h3 id=\"proposal-2-depending-on-previous-block-size-calculation-and-previous-tx-fee-coll\">Proposal 2 : Depending on previous block size calculation and previous Tx fee collected by miners</h3>\n<p>TotalBlockSizeInLastButOneDifficulty = Sum of all Block size of first 2008 blocks in last 2 difficulty period   TotalBlockSizeInLastDifficulty = Sum of all Block size of second 2008 blocks in last 2 difficulty period (This actually includes 8 blocks from last but one difficulty)</p>\n<p>TotalTxFeeInLastButOneDifficulty = Sum of all Tx fees of first 2008 blocks in last 2 difficulty period   TotalTxFeeInLastDifficulty = Sum of all Tx fees of second 2008 blocks in last 2 difficulty period (This actually includes 8 blocks from last but one difficulty)</p>\n<p>If ( ( (Sum of first 4016 block size in last 2 difficulty period)/4016 > 50% MaxBlockSize) AND (TotalTxFeeInLastDifficulty > TotalTxFeeInLastButOneDifficulty) AND (TotalBlockSizeInLastDifficulty > TotalBlockSizeInLastButOneDifficulty) )       MaxBlockSize = TotalBlockSizeInLastDifficulty * MaxBlockSize / TotalBlockSizeInLastButOneDifficulty   Else If ( ( (Sum of first 4016 block size in last 2 difficulty period)/4016 < 50% MaxBlockSize) AND (TotalTxFeeInLastDifficulty < TotalTxFeeInLastButOneDifficulty) AND (TotalBlockSizeInLastDifficulty < TotalBlockSizeInLastButOneDifficulty) )       MaxBlockSize = TotalBlockSizeInLastDifficulty * MaxBlockSize / TotalBlockSizeInLastButOneDifficulty   Else       Keep the same MaxBlockSize</p>\n<h2 id=\"rationale\">Rationale</h2>\n<p>These two proposals have been derived after discussion on <a href=\"https://bitcointalk.org/index.php?topic=1154536.0\">BitcoinTalk</a> and <a href=\"http://lists.linuxfoundation.org/pipermail/bitcoin-dev/2015-August/010285.html\">bitcoin-dev mailing list</a>. The original idea and its evolution in the light of various arguments can be found <a href=\"http://upalc.com/maxblocksize.php\">here</a>.</p>\n<h3 id=\"proposal-1-depending-only-on-previous-block-size-calculation-1\">Proposal 1 : Depending only on previous block size calculation</h3>\n<p>This solution is derived directly from the indication of the problem. If transaction volume increases, then we will naturally see bigger blocks. On the contrary, if there are not enough transaction volume, but maximum block size is high, then only few blocks may sweep the mempool. Hence, if block size is itself taken into consideration, then maximum block size can most rationally be derived. Moreover, this solution not only increases, but also decreases the maximum block size, just like difficulty.</p>\n<h3 id=\"proposal-2-depending-on-previous-block-size-calculation-and-previous-tx-fee-coll-1\">Proposal 2 : Depending on previous block size calculation and previous Tx fee collected by miners</h3>\n<p>This solution takes care of stable mining subsidy. It will not increase maximum block size, if Tx fee collection is not increasing and thereby creating a Tx fee pressure on the market. On the other hand, though the block size max cap is dynamically controlled, it is very difficult to game by any party because the increase or decrease of block size max cap will take place in the same ratio of average block size increase or decrease.</p>\n<h2 id=\"compatibility\">Compatibility</h2>\n<p>This is a hard-forking change to the Bitcoin protocol; anybody running code that fully validates blocks must upgrade before the activation time or they will risk rejecting a chain containing larger-than-one-megabyte blocks.</p>\n<h2 id=\"other-solutions-considered\">Other solutions considered</h2>\n<p><a href=\"http://gtf.org/garzik/bitcoin/BIP100-blocksizechangeproposal.pdf\">Making Decentralized Economic Policy</a> - by Jeff Garzik</p>\n<p><a href=\"https://bitcointalk.org/index.php?topic=1078521.0\">Elastic block cap with rollover penalties</a> - by Meni Rosenfeld</p>\n<p><a href=\"https://github.com/bitcoin/bips/blob/master/bip-0101.mediawiki\">Increase maximum block size</a> - by Gavin Andresen</p>\n<p><a href=\"https://gist.github.com/sipa/c65665fc360ca7a176a6\">Block size following technological growth</a> - by Pieter Wuille</p>\n<p><a href=\"https://lightning.network/lightning-network-paper.pdf\">The Bitcoin Lightning Network: Scalable Off-Chain Instant Payments</a> - by Joseph Poon & Thaddeus Dryja</p>\n<h2 id=\"deployment\">Deployment</h2>\n<p>If consensus is achieved, deployment can be made at a future block number at which difficulty will change.</p>","toc":[{"id":"abstract","title":"Abstract","level":2},{"id":"motivation","title":"Motivation","level":2},{"id":"specification","title":"Specification","level":2},{"id":"proposal-1-depending-only-on-previous-block-size-calculation","title":"Proposal 1 : Depending only on previous block size calculation","level":3},{"id":"proposal-2-depending-on-previous-block-size-calculation-and-previous-tx-fee-coll","title":"Proposal 2 : Depending on previous block size calculation and previous Tx fee collected by miners","level":3},{"id":"rationale","title":"Rationale","level":2},{"id":"proposal-1-depending-only-on-previous-block-size-calculation-1","title":"Proposal 1 : Depending only on previous block size calculation","level":3},{"id":"proposal-2-depending-on-previous-block-size-calculation-and-previous-tx-fee-coll-1","title":"Proposal 2 : Depending on previous block size calculation and previous Tx fee collected by miners","level":3},{"id":"compatibility","title":"Compatibility","level":2},{"id":"other-solutions-considered","title":"Other solutions considered","level":2},{"id":"deployment","title":"Deployment","level":2}],"history":{"totalCommits":11,"firstCommit":"2015-09-06T01:22:34+05:30","lastUpdated":"2025-10-08T14:59:36-07:00","events":[{"sha":"24e96e870fffaa257b465ce1f0370c14aac588e8","date":"2025-10-08T14:59:36-07:00","author":"Murch","message":"process: Created ↦ Assigned","url":"https://github.com/bitcoin/bips/commit/24e96e870fffaa257b465ce1f0370c14aac588e8","kind":"edit"},{"sha":"5207ef92a52d0b8902895b0dbb40823a4d698ec9","date":"2025-04-11T20:08:17-07:00","author":"Murch","message":"process: Author ↦ Authors","url":"https://github.com/bitcoin/bips/commit/5207ef92a52d0b8902895b0dbb40823a4d698ec9","kind":"edit"},{"sha":"59730dec4fb641a41589aa1b91d3c452f13e0e36","date":"2025-04-11T20:05:13-07:00","author":"Murch","message":"process: Remove Comments-URI and -Summary","url":"https://github.com/bitcoin/bips/commit/59730dec4fb641a41589aa1b91d3c452f13e0e36","kind":"edit"},{"sha":"a233bde4af52c6a11269e2e6dd9707abce441ffe","date":"2025-04-11T18:19:21-07:00","author":"Murch","message":"process: Standards Track ↦ Specification","url":"https://github.com/bitcoin/bips/commit/a233bde4af52c6a11269e2e6dd9707abce441ffe","kind":"edit"},{"sha":"66defbdc03ad64ccddfd373e1c59af9a41ab990f","date":"2025-04-11T18:11:55-07:00","author":"Murch","message":"process: Deferred/Obsolete/Rejected/Replaced/Withdrawn ↦ Closed","url":"https://github.com/bitcoin/bips/commit/66defbdc03ad64ccddfd373e1c59af9a41ab990f","kind":"status"},{"sha":"9a56d3544eac1f949a747c251810f7a440d63fb9","date":"2024-07-25T18:35:39+03:00","author":"Orfeas Stefanos Thyfronitis Litos","message":"Remove trailing whitespace from all BIPs","url":"https://github.com/bitcoin/bips/commit/9a56d3544eac1f949a747c251810f7a440d63fb9","kind":"edit"},{"sha":"2d293b73077762eaa966c89728dd9d57b6fb5da0","date":"2020-04-30T09:37:22-05:00","author":"Janus","message":"Reject expired block size BIPs","url":"https://github.com/bitcoin/bips/commit/2d293b73077762eaa966c89728dd9d57b6fb5da0","kind":"edit"},{"sha":"6295c1a095a1fa33f38d334227fa4222d8e0a523","date":"2017-08-24T23:50:20+12:00","author":"MeshCollider","message":"Fixing spelling in multiple BIPs","url":"https://github.com/bitcoin/bips/commit/6295c1a095a1fa33f38d334227fa4222d8e0a523","kind":"edit"},{"sha":"959fecc15bdad070afa63455468b1dba54655fa6","date":"2016-11-30T09:47:31+00:00","author":"Luke Dashjr","message":"Promote BIP 2 Draft->Active, and implement it","url":"https://github.com/bitcoin/bips/commit/959fecc15bdad070afa63455468b1dba54655fa6","kind":"status"},{"sha":"72f18918a8ae655212ea2700b30f0dc4d758b843","date":"2016-11-30T09:45:33+00:00","author":"Luke Dashjr","message":"Promote BIP 123 Draft->Active, and implement it","url":"https://github.com/bitcoin/bips/commit/72f18918a8ae655212ea2700b30f0dc4d758b843","kind":"status"},{"sha":"1e6e07809d6756091025dab472b9392f054c4244","date":"2015-09-06T01:22:34+05:30","author":"UpalChakraborty","message":"Update and rename BIP-1xx.mediawiki to bip-0106.mediawiki","url":"https://github.com/bitcoin/bips/commit/1e6e07809d6756091025dab472b9392f054c4244","kind":"rename"}]}}