¿Cómo crear un cliente SPV?

¿Cuáles son los pasos que sigue un cliente SPV para sincronizar?

  • Conectar con un compañero
  • Establecer filtro de floración para direcciones de billetera
  • Descargue todos los encabezados de bloque desde el último punto de control
  • Solicite cada bloque nuevamente con los filtros establecidos
  • Actualice el saldo de la billetera en función de los bloques devueltos

Obviamente, los pasos anteriores son incorrectos, ya que no tiene sentido descargar primero todos los encabezados de bloque para determinar la cadena correcta y luego volver a solicitar todos los bloques para calcular el saldo de la billetera.

Pero, ¿cuál es el procedimiento correcto?

Respuestas (2)

Esto es lo que hago:

  1. Conectar con un compañero
  2. Establecer filtro de floración
  3. Enviar mensaje 'getblocks'
  4. Envíe el mensaje 'getdata' con MSG_FILTERED_BLOCK configurado para cualquier bloque nuevo

Tenga en cuenta que 'getblocks' devuelve una lista de hashes de cadena de bloques desde el punto de inicio especificado, no los bloques en sí. Luego, 'getdata' devuelve mensajes 'merkleblock' en lugar de bloques completos. El par sigue el mensaje 'merkleblock' con cualquier transacción que coincida con el filtro bloom como mensajes 'tx' separados.

Más detalles están en BIP0037

Si desea un ejemplo, puede encontrar mi billetera Java en GitHub

Un par de ejemplos pueden ayudarte:

https://code.google.com/p/bitcoinj/

Mi proyecto https://github.com/richardkiss/pycoinnet no está completo (en particular, a partir de este escrito, no hay una implementación de filtro de floración), pero eventualmente puede hacer lo que necesita.