BUIP051: add CompactBlocks support
Proposer: freetrader
Submitted: 2017-04-13
Status: draft


In the interest of supporting better fast block propagation between BU
and other implementation which only support CompactBlocks (CB)[1] but
not XthinBlocks (XTB), it is proposed to add BIP152 support to the BU


Currently, bridging between XTB and CB peers is possible by connecting
via a BitcoinXT node. There are few of these (46 according to
nodecounter.com). Supporting CB in BU would strengthen the connections
between the BU peers and the rest of the network, without having to rely
on intermediates.

Also, few other (non-Core) implementation currently support XTB. It is
more likely that some support CB. Being able to exchange big blocks with
them might be necessary in the near/medium term, and since some of them
are quite different from Satoshi clients, providing reference XTB
implementation for them will not be so easy for BU developers. It makes
more sense to support their existing fast propagation protocol.

Implementation considerations

The implementation should, for safety reasons, prefer to use the more
tested XTB with peers that support this service, and fall back to using
CompactBlocks with those that do not support XTB.

User preference switches are recommended to

  1. allow disabling CB support in the client entirely (such a kill
    switch should be supplied anyway for security purposes, should a
    flaw be found in the CB implementation, similar to
    `-use-thinblocks` for XTB)
  2. allow the user to prefer CB to XTB with peers that support both


[1]This has already been implemented in Bitcoin XT, so hopefully
together with the BIP152 specification it should be quite easy to port
this feature to BU.

[2]This porting work could be encouraged by making this a funded BUIP.
The author has no advice for the effort and funding level required, but
is open to suggestions, esp. from the XT developers who have already
implemented this.

Additional information

[1] https://github.com/bitcoin/bips/blob/master/bip-0152.mediawiki