Este enlace menciona que
"[ getdata ] se puede usar para recuperar transacciones, pero solo si están en el grupo de memoria o en el conjunto de relés; no se permite el acceso arbitrario a las transacciones en la cadena..."
Pero, ¿no puede un nodo SPV hacer lo siguiente para tener acceso arbitrario a una transacción T (supongo que el nodo SPV conoce el bloque hash H del bloque B que contiene T):
¿Este mecanismo en realidad no da acceso arbitrario a las transacciones?
Eso se basa en la indexación mínima requerida para ejecutar un nodo completo.
Un mensaje getdata a los pares solo puede solicitar recursos TX en mempool (válido, sin confirmar). No todas las transacciones confirmadas de índice de nodos completos. UTXO y mempool tx están necesariamente indexados para la validación y la creación de plantillas de bloque/propagación de tx, respectivamente.
La transacción confirmada se proporciona como parte de la solicitud getdata con hashes de bloque. Los bloques están indexados por todos los nodos completos. (Dado que los nuevos encabezados de bloque deben hacer referencia a los encabezados anteriores, incluso si se extienden por ramas, en lugar de extenderse por cadenas fuertes)
Corrección (ver comentario a continuación):
james c