I have a network with high bandwidth but also high latency. Is this script suitable? I took a look at the code and it looks like the client asks the server for the checksum of every block one by one and then decides whether a copy is needed or not. But I may have misunderstood! In the high latency case it's a huge deal if it "asks for one checksum, waits for the reply, decides what to do" vs "asks for all of them, decides what to do when it recieves them".
Nice work in any case, and thanks for keeping the good idea of the original alive and better.