¿Funciona la 'verificación de pago simplificada'?

Estaba leyendo el documento original de bitcoin donde mencionan un esquema de verificación de pago simplificado en la sección 8. Me preguntaba si esto realmente funciona o no.

Un boceto rápido: el esquema requiere que solo almacene todos los encabezados de bloque (en lugar de los bloques completos). Cuando necesite verificar una transacción, simplemente necesita la raíz Merkle de la transacción y ver si esa raíz Merkle aparece o no en algún lugar de los encabezados de bloque almacenados. Si es así, usted sabe que la transacción fue verificada una vez.

Pero no podría usar esto para verificar nuevos pagos, ¿verdad? Supongamos que alguien paga y en la transacción usa 'ins' de alguna otra transacción. Con este esquema simplificado, pude verificar que la transacción realmente sucedió. Pero no puedo comprobar que no haya gastado ya el dinero, ¿verdad?

Entonces, ¿básicamente este esquema solo es útil para volver a verificar una transacción anterior por algún motivo? (por ejemplo, para confirmar que alguien ha participado en alguna transacción). Pero no sirve para pagar.

¿Es esa una interpretación correcta del esquema, o me estoy perdiendo algo?

Las transacciones no tienen una raíz de Merkle. Necesita la sucursal Merkle de la transacción.

Respuestas (1)

La verificación de pago simplificada no puede ayudar mucho con las transacciones de confirmación 0. Pero una vez que el pago tiene varias confirmaciones, este solo hecho (que el cliente SPV puede verificar) implica que la transacción es aceptada por la red, por lo que el pago es seguro.

SPV también se puede usar junto con un nodo de servidor que tiene la cadena de bloques y puede verificar contra el doble gasto. El cliente aún querrá los encabezados de bloque y la rama Merkle de la transacción para mantener el nodo del servidor honesto. Sin esto, el servidor puede informar falsamente que el cliente recibió el pago; con la verificación simplificada, el servidor tendría que coludirse con el remitente.