On Mon, Apr 30, 2012 at 6:40 PM, Rebroad (sourceforge) <rebroad+sourceforge.net@gmail.com> wrote:

My proposal is that in addition to the size (which is advertised in
the header), the hash is also advertised in the header (of a block).
This would help nodes to determine whether they wanted to reject the
download. (e.g. if it already had a block matching that hash). This of
course wouldn't prevent a rogue node from sending an incorrect hash,
but this would aid in saving bandwidth amongst behaving nodes.

I suppose it would make sense for clients to be able to reject blocks that they already have, if that's not currently possible.

The other part of the proposal is to allow nodes to request upload and
download blocks that have already been partially downloaded.

This could be done by modifying the existing methods of upload,
download, or by adding a new method, perhaps even using HTTP/HTTPS or
something similar. This would also help nodes to obtain the blockchain
who have restrictive ISPs, especially if they are being served on port
80 or 443. This could perhaps also allow web caches to keep caches of
the blockchain, thereby making it also more available also.

You don't need a BIP if you want to somehow fetch the (initial) block chain outside the bitcoin protocol. You could download it from some http server or even pass it along on an USB stick. Then with a simple client change you can import it: https://github.com/bitcoin/bitcoin/pull/883 .

Currently, without this functionality, nodes with restrictive (or
slow) internet have some options, such as going via a tor proxy, but
due to the latency, the problem with multiple receptions of the same
block still occur.

If you're behind such a slow internet connection, and concerned about every bit of bandwidth, it is better to run a lightweight node. For example, Electrum.

Even if you could reduce the wasted bandwidth a bit by puzzling around with partial blocks, the download will still be substantial (and that's going to get worse before it gets better).

Wladimir