On Wed, May 6, 2015 at 11:12 PM, Matt Corallo <bitcoin-list@bluematt.me> wrote:
Personally, I'm rather strongly against any commitment to a block size
increase in the near future.

Miners can already soft-fork to reduce the maximum block size.  If 51% of miners agree to a 250kB block size, then that is the maximum block size.

The question being discussed is what is the maximum block size merchants and users will accept.  This puts a reasonable limit on the maximum size miners can increase the block size to.

In effect, the block size is set by the minimum of the miner's and the merchants/user's size.min(miner, merchants/users).
 
This allows the well-funded Bitcoin ecosystem to continue building
systems which rely on transactions moving quickly into blocks while
pretending these systems scale. Thus, instead of working on technologies
which bring Bitcoin's trustlessness to systems which scale beyond a
blockchain's necessarily slow and (compared to updating numbers in a
database) expensive settlement, the ecosystem as a whole continues to
focus on building centralized platforms and advocate for changes to
Bitcoin which allow them to maintain the status quo[1].

Would you accept a rule that the maximum size is 20MB (doubling every 2 years), but that miners have an efficient method for choosing a lower size?

If miners could specify the maximum block size in their block headers, then they could coordinate to adjust the block size.  If 75% vote to lower the size, then it is lowered and vice versa for raiding.

Every 2016 blocks, the votes are counter.  If the 504th lowest of the 2016 blocks is higher than the previous size, then the size is set to that size.  Similarly, if the 504th highest is lower than the previous size, it becomes the new size.

There could be 2 default trajectories.  The reference client might always vote to double the size every 4 years.

To handle large blocks (>32MB) requires a change to the p2p protocol message size limits, or a way to split blocks over multiple messages.

It would be nice to add new features to any hard-fork.

I favour adding an auxiliary header.  The Merkle root in the header could be replaced with hash(merkle_root | hash(aux_header)).  This is a fairly simple change, but helps with things like commitments.  One of the fields in the auxiliary header could be an extra nonce field.  This would mean fast regeneration of the merkle root for ASIC miners.  This is a pretty simple change.