BIP 37

BIP-37 enhances the protocol with Bloom filters on blocks and transactions per peer. It greatly improves the performance of SPV clients. They can download the data that matches the data they want - typically public key hashes - and thus reduce the amount of data transferred. With this checkin, Bitcoin F# supports BIP 37. It was tested with a SPV wallet.

Various changes

  • Block headers have are linked by next hash in addition to previous hash. It improves the performance of getheaders queries.
  • Block headers have a flag indicating whether they belong to the main chain or not.
  • If a node sends headers that are more than 10 000 blocks ago, the headers are ignored. Some node somehow reply with the genesis block to a recent getheaders message.
  • Rename GetBlock to DownloadBlock to differenciate from the getBlock message.
  • Send notfound message for inventory that is not found.
  • Replace RX Subjects with .NET Events when the subjects are external to the component. Events are less coupled that Subjects and they allow calling Dispose on the component.