Sincronización de billetera BIP32 con filtros Bloom

Estoy trabajando en mi biblioteca SPV y todavía me cuesta descifrar cómo abordar la combinación de filtros BIP32 + Bloom. Así es como sincronizo actualmente una billetera HD existente (después de una actualización rápida):

  1. Genere una cantidad de direcciones anticipadas vigiladas (por ejemplo, 10).
  2. Cargue un filtro Bloom con todas las direcciones utilizadas más la búsqueda anticipada (N usada + 10 búsqueda anticipada).
  3. Descargar bloques filtrados con getdata.
  4. Marque las direcciones vigiladas como utilizadas si se encuentran en cualquier transacción de bloque.
  5. Asegúrese de que la última dirección observada no se haya utilizado en una transacción.
  6. Si es así, genere nuevas direcciones anticipadas, vuelva a cargar el filtro Bloom y descargue el último bloque nuevamente para volver a emparejarlo. Al usar una nueva dirección de recepción para cada transacción, es posible que hayamos perdido otras transacciones en el mismo bloque.
  7. De lo contrario, vuelve a 4 y descarga nuevos bloques.

Ahora bien, esto suena peculiar y demasiado complicado para mí. Varias discusiones en la web hablan sobre "escanear claves" cuando se trata de sincronización de billetera y realmente no entiendo si asumen un nodo completo o un nodo SPV liviano, porque no tengo idea de cómo "escanear claves" sin un global Base de datos de la UTXO. Además, el límite de la brecha solo parece tener sentido para un nodo completo.

Estoy atascado, gracias.

Respuestas (1)

La razón por la que genera previamente algunas claves de reenvío es para evitar la situación que describe, si solo miró hacia adelante, corre el riesgo de perder una transacción en el bloque actual (el orden de las transacciones en el bloque no está relacionado con el orden de sus claves) .

El término "límite de brecha" se refiere a un parámetro de clientes SPV que no son de Bloomfilter y que consultan un índice basado en direcciones en un par remoto. El límite de la brecha es la parada final del estado actual de la billetera, cuando la billetera escaneada ve 10 resultados de direcciones vacías seguidas, deciden que esa es probablemente la última dirección utilizada en la billetera y dejan de generar más. Si no hubiera un límite de brecha, buscarían las direcciones no utilizadas hasta el final de los tiempos (o 2**128, lo que ocurriera primero).