public inbox for bitcoindev@googlegroups.com
 help / color / mirror / Atom feed
From: Gavin Andresen <gavinandresen@gmail.com>
To: Matt Whitlock <bip@mattwhitlock.name>
Cc: Bitcoin Dev <bitcoin-development@lists.sourceforge.net>
Subject: Re: [Bitcoin-development] Proposed alternatives to the 20MB step function
Date: Thu, 28 May 2015 11:53:41 -0400	[thread overview]
Message-ID: <CABsx9T3-zxCAagAS0megd06xvG5n-3tUL9NUK9TT3vt7XNL9Tg@mail.gmail.com> (raw)
In-Reply-To: <16096345.A1MpJQQkRW@crushinator>

[-- Attachment #1: Type: text/plain, Size: 4468 bytes --]

On Fri, May 8, 2015 at 3:20 AM, Matt Whitlock <bip@mattwhitlock.name> wrote:

> Between all the flames on this list, several ideas were raised that did
> not get much attention. I hereby resubmit these ideas for consideration and
> discussion.
>
> - Perhaps the hard block size limit should be a function of the actual
> block sizes over some trailing sampling period. For example, take the
> median block size among the most recent 2016 blocks and multiply it by 1.5.
> This allows Bitcoin to scale up gradually and organically, rather than
> having human beings guessing at what is an appropriate limit.
>

A lot of people like this idea, or something like it. It is nice and
simple, which is really important for consensus-critical code.

With this rule in place, I believe there would be more "fee pressure"
(miners would be creating smaller blocks) today. I created a couple of
histograms of block sizes to infer what policy miners are ACTUALLY
following today with respect to block size:

Last 1,000 blocks:
  http://bitcoincore.org/~gavin/sizes_last1000.html

Notice a big spike at 750K -- the default size for Bitcoin Core.
This graph might be misleading, because transaction volume or fees might
not be high enough over the last few days to fill blocks to whatever limit
miners are willing to mine.

So I graphed a time when (according to statoshi.info) there WERE a lot of
transactions waiting to be confirmed:
   http://bitcoincore.org/~gavin/sizes_357511.html

That might also be misleading, because it is possible there were a lot of
transactions waiting to be confirmed because miners who choose to create
small blocks got lucky and found more blocks than normal.  In fact, it
looks like that is what happened: more smaller-than-normal blocks were
found, and the memory pool backed up.

So: what if we had a dynamic maximum size limit based on recent history?

The average block size is about 400K, so a 1.5x rule would make the max
block size 600K; miners would definitely be squeezing out transactions /
putting pressure to increase transaction fees. Even a 2x rule (implying
800K max blocks) would, today, be squeezing out transactions / putting
pressure to increase fees.

Using a median size instead of an average means the size can increase or
decrease more quickly. For example, imagine the rule is "median of last
2016 blocks" and 49% of miners are producing 0-size blocks and 51% are
producing max-size blocks. The median is max-size, so the 51% have total
control over making blocks bigger.  Swap the roles, and the median is
min-size.

Because of that, I think using an average is better-- it means the max size
will change (up or down) more slowly.

I also think 2016 blocks is too long, because transaction volumes change
quicker than that. An average over 144 blocks (last 24 hours) would be
better able to handle increased transaction volume around major holidays,
and would also be able to react more quickly if an economically irrational
attacker attempted to flood the network with fee-paying transactions.

So my straw-man proposal would be:  max size 2x average size over last 144
blocks, calculated at every block.

There are a couple of other changes I'd pair with that consensus change:

+ Make the default mining policy for Bitcoin Core neutral-- have its target
block size be the average size, so miners that don't care will "go along
with the people who do care."

+ Use something like Greg's formula for size instead of bytes-on-the-wire,
to discourage bloating the UTXO set.


---------

When I've proposed (privately, to the other core committers) some dynamic
algorithm the objection has been "but that gives miners complete control
over the max block size."

I think that worry is unjustified right now-- certainly, until we have
size-independent new block propagation there is an incentive for miners to
keep their blocks small, and we see miners creating small blocks even when
there are fee-paying transactions waiting to be confirmed.

I don't even think it will be a problem if/when we do have size-independent
new block propagation, because I think the combination of the random timing
of block-finding plus a dynamic limit as described above will create a
healthy system.

If I'm wrong, then it seems to me the miners will have a very strong
incentive to, collectively, impose whatever rules are necessary (maybe a
soft-fork to put a hard cap on block size) to make the system healthy again.


-- 
--
Gavin Andresen

[-- Attachment #2: Type: text/html, Size: 5686 bytes --]

  parent reply	other threads:[~2015-05-28 15:53 UTC|newest]

Thread overview: 69+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-08  7:20 [Bitcoin-development] Proposed alternatives to the 20MB step function Matt Whitlock
2015-05-08 10:15 ` Mike Hearn
2015-05-08 10:30 ` Clément Elbaz
2015-05-08 12:32   ` Joel Joonatan Kaartinen
2015-05-08 12:48     ` Matt Whitlock
2015-05-08 13:24       ` Matt Whitlock
2015-05-08 12:48     ` Gavin Andresen
2015-05-08 16:51     ` Peter Todd
2015-05-08 22:36       ` Joel Joonatan Kaartinen
2015-05-09 18:30         ` Peter Todd
2015-05-08 15:57 ` Alex Mizrahi
2015-05-08 16:55 ` Bryan Bishop
2015-05-08 20:33 ` Mark Friedenbach
2015-05-08 22:43   ` Aaron Voisine
2015-05-08 22:45     ` Mark Friedenbach
2015-05-08 23:15       ` Aaron Voisine
2015-05-08 23:58         ` Mark Friedenbach
2015-05-09  3:36   ` Gregory Maxwell
2015-05-09 11:58     ` Gavin Andresen
2015-05-09 13:49       ` Tier Nolan
2015-05-10 17:36     ` Owen Gunden
2015-05-10 18:10       ` Mark Friedenbach
2015-05-10 21:21     ` Gavin Andresen
2015-05-10 21:33       ` Gregory Maxwell
2015-05-10 21:56       ` Rob Golding
2015-05-13 10:43     ` Tier Nolan
2015-05-16  0:22       ` Rusty Russell
2015-05-16 11:09         ` Tier Nolan
2015-05-18  1:42           ` Rusty Russell
2015-05-19  8:59             ` Tier Nolan
2015-05-10 21:48   ` Thomas Voegtlin
2015-05-10 22:31     ` Mark Friedenbach
2015-05-10 23:11       ` Thomas Voegtlin
2015-05-28 15:53 ` Gavin Andresen [this message]
2015-05-28 17:05   ` Mike Hearn
2015-05-28 17:19     ` Gavin Andresen
2015-05-28 17:34       ` Mike Hearn
2015-05-28 18:23         ` Gavin Andresen
2015-05-29 11:26           ` Mike Hearn
2015-05-29 11:42             ` Tier Nolan
2015-05-29 11:57               ` Mike Hearn
2015-05-29 12:39                 ` Gavin Andresen
2015-05-29 14:00                   ` insecurity
2015-05-29 14:15                     ` Braun Brelin
2015-05-29 14:09                   ` Tier Nolan
2015-05-29 14:20                     ` Gavin Andresen
2015-05-29 14:22                       ` Mike Hearn
2015-05-29 14:21                     ` Mike Hearn
2015-05-29 14:22                     ` Tier Nolan
2015-05-29 16:39                       ` [Bitcoin-development] Proposed alternatives to the 20MB stepfunction Raystonn .
2015-05-29 18:28                         ` Tier Nolan
2015-05-29 17:53                   ` [Bitcoin-development] Proposed alternatives to the 20MB step function Admin Istrator
2015-05-30  9:03                     ` Aaron Voisine
2015-06-01 11:30                       ` Ricardo Filipe
2015-06-01 11:46                         ` Marcel Jamin
2015-05-29 18:47                   ` Bryan Cheng
2015-05-30  1:36                     ` Cameron Garnham
2015-05-28 17:39       ` [Bitcoin-development] Proposed alternatives to the 20MB stepfunction Raystonn .
2015-05-28 17:59         ` Pieter Wuille
2015-05-28 18:21           ` Gavin Andresen
2015-05-28 17:50       ` [Bitcoin-development] Proposed alternatives to the 20MB step function Peter Todd
2015-05-28 17:14   ` Thomas Voegtlin
2015-05-28 17:34   ` Pieter Wuille
2015-05-29 17:45   ` Aaron Voisine
2015-05-08 14:57 Steven Pine
2015-05-09  0:13 Raystonn
     [not found] <CAAjy6kDdB8uODpPcmS8h4eap8fke7Y2y773NHJZja8tB5mPk4Q@mail.gmail.com>
2015-05-28 16:30 ` Steven Pine
     [not found]   ` <CABsx9T03aNRC5DRbR06nNtsiBdJAcQsGAHvbCOe3pnuRpdvq5w@mail.gmail.com>
2015-05-28 18:25     ` Steven Pine
2015-05-28 18:31       ` Gavin Andresen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CABsx9T3-zxCAagAS0megd06xvG5n-3tUL9NUK9TT3vt7XNL9Tg@mail.gmail.com \
    --to=gavinandresen@gmail.com \
    --cc=bip@mattwhitlock.name \
    --cc=bitcoin-development@lists.sourceforge.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox