Какие шаги предпринимает клиент SPV для синхронизации?
Очевидно, что вышеперечисленные шаги неверны, так как нет смысла сначала загружать все блокхеды для определения правильной цепочки, а затем повторно запрашивать все блоки для расчета баланса кошелька.
Но какова правильная процедура?
Это то, что я делаю:
Обратите внимание, что getblocks возвращает список хэшей цепочки блоков из указанной начальной точки, а не сами блоки. Затем «getdata» возвращает сообщения «merkleblock» вместо полных блоков. Пир следует за сообщением «merkleblock» с любыми транзакциями, которые соответствуют фильтру Блума, как отдельные сообщения «tx».
Более подробная информация содержится в BIP0037.
Если вам нужен пример, мой кошелек Java можно найти на GitHub.
Пара примеров может помочь вам:
https://code.google.com/p/bitcoinj/
Мой проект https://github.com/richardkiss/pycoinnet не завершен (в частности, на момент написания этой статьи нет реализации фильтра Блума), но, возможно, со временем сделает то, что вам нужно.