¿Cómo aprenden las billeteras SPV (verificación de pago simple) sobre las transacciones entrantes?

Intento entender una implementación de SPV.

Leí las páginas wiki sobre especificación de protocolos y seguridad de clientes ligeros , así como el capítulo 8 del libro blanco .

Lo que no entiendo:
supongamos que el usuario Atiene una dirección de Bitcoin X.
El usuario Apuede hacer getheadersy cargar todos los encabezados de bloque y luego tener todos los hashes y marcas de tiempo de bloque.

Entonces: ¿cómo encuentra un cliente SPV posibles transacciones en la dirección de Bitcoin del usuario Xsin cargar todos los bloques (y todas las transacciones)?

Respuestas (5)

Tiene razón en que SPV, como se describe en el documento de Bitcoin, no explica cómo descubrir los pagos por sí mismo, sin descargar bloques completos. Mi suposición es que Satoshi planeó desarrollar esto más tarde, o que asumió que solo le informarían sobre los pagos a usted mismo (pago a IP, como existía junto al pago a pubkeyhash como se usa ahora).

Sin embargo, las implementaciones prácticas de los nodos SPV actuales utilizan una extensión de protocolo llamada filtros de floración, que se describe en BIP 37 . Utilizan getheaderspara obtener información de bloques antes de la marca de tiempo de nacimiento de su billetera y solicitan bloques filtrados después. Para hacerlo, envían un filtro de floración que describe las direcciones y transacciones que les interesan al par. Luego, el par solo incluye las transacciones relevantes en los bloques que envía, junto con sus rutas de Merkle para demostrar que estas transacciones eran de hecho parte de dicho bloque.

Si ayuda https://gist.github.com/TOMOAKI12345/7e0aa1c6b8ace4a70ca6

El código fuente de Breadwallet es realmente una buena fuente para aprender sobre el protocolo de red de la billetera SPV.

La fuente de Breadwallet ya no está disponible.

Acabo de encontrar algo en el código fuente de bitcoinj:

/**
 * The "getheaders" command is structurally identical to "getblocks", but has different meaning. On receiving this
 * message a Bitcoin node returns matching blocks up to the limit, but without the bodies. It is useful as an
 * optimization: when your wallet does not contain any keys created before a particular time, you don't have to download
 * the bodies for those blocks because you know there are no relevant transactions.
 */

Además de las respuestas anteriores, puede consultar este diagrama si le ayuda desde este enlace .

ingrese la descripción de la imagen aquí

Creo que SPV solo está destinado a verificar transacciones, no a calcular un saldo o una lista de todas las transacciones a una dirección determinada.

Pero, ¿cómo comprueba Multibit (un cliente ligero SPV) si hay pagos entrantes tan rápido?
@Jonas, Multibit usa filtros de floración, por eso puede verificar los pagos entrantes tan rápido.
Voté negativo. Verificar la transacción es exactamente lo que SPV no hace: solo verifica la cadena de bloques, no las transacciones en ella.
Los clientes de SPV pueden calcular saldos y pueden listar transacciones a ciertas direcciones solicitando bloques filtrados. Los clientes de SPV también verifican la validez de la transacción verificando las firmas; lo que SPV no verifica es la inclusión de salidas en el utxo, por lo que es posible el doble gasto.
Los clientes de @dionyziz SPV no pueden verificar las firmas, ya que no tienen las entradas de UTXO para saber contra qué verificar.