Verificar que una transacción está en la cadena de bloques

Permítanme comenzar diciendo que estoy aprendiendo sobre blockchain y los aspectos técnicos.

Según tengo entendido, cada transacción tiene un hash criptográfico, los hash se emparejan y se procesan hasta que se genera un solo hash de raíz. Los mineros procesan todo el bloque que contiene el hash raíz, el hash anterior, la marca de tiempo, etc. Si el hash alcanza la dificultad objetivo, el bloque se agrega a la cadena. El hash criptográfico hace que sea inviable obtener la entrada de la salida hash.

P. Si, por ejemplo, quisiera volver al bloque X y ver qué transacciones contiene, ¿cómo es eso posible si todos los hash son criptográficos y es inviable encontrar la entrada de la salida del hash?

Gracias por adelantado.

Respuestas (2)

Solo para ser claros: no es todo el bloque lo que se está procesando, como dijiste, los bloques se encuentran al codificar solo el encabezado del bloque de un bloque candidato. Sin embargo, el encabezado del bloque incluye la raíz de Merkle del árbol de transacciones que, a su vez, se compromete con el conjunto exacto de transacciones del bloque.

Tiene razón, una función hash criptográfica es una función unidireccional y el contenido del bloque no se puede recuperar del hash. Para conocer el contenido del bloque, utiliza el hash del bloque como un identificador único y solicita el bloque completo de un nodo de archivo, es decir, un nodo completo que almacena la cadena de bloques de Bitcoin completa.

A su vez, si solo tiene el txidpara ir desde, puede solicitar la transacción completa desde cualquier nodo que tenga conocimiento de ella. Sin embargo, la transacción sin procesar no incluye la información en qué bloque se incluyó. AFAIU, para conseguir eso harías una getDatapetición del MSG_MERKLEBLOCKtipo. Esto no solo le dará la transacción completa, sino también socios de hash para formar la rama de Merkle hasta el hash del bloque y el encabezado del bloque, lo que le permitirá validar completamente la inclusión de la transacción en la cadena de bloques.

Los mineros procesan todo el bloque que contiene el hash raíz, el hash anterior, la marca de tiempo, etc. Si el hash alcanza la dificultad objetivo, el bloque se agrega a la cadena.

No del todo, solo se codifica el encabezado del bloque para la prueba de trabajo. El encabezado del bloque se compone de: el número de versión, el hash de los bloques anteriores, la raíz de merkle, una marca de tiempo, el objetivo (dificultad) y el nonce utilizado para encontrar el bloque válido.

Sin embargo, el encabezado del bloque es solo una parte del bloque, cada bloque también contiene los datos de todas las transacciones incluidas en él. Así que para responder a tu pregunta:

Quería volver al bloque X y ver qué transacciones contiene, ¿cómo es eso posible [...]?

¡Bastante simple, simplemente volvería a ese bloque y miraría los datos de transacción en él!

Si se pregunta por qué/cómo se usa una raíz de merkle, esta pregunta tiene una excelente respuesta. El wiki de bitcoin también tiene información relevante :

[Las transacciones] se procesan solo indirectamente a través de la raíz de Merkle. Debido a que las transacciones no se codifican directamente, codificar un bloque con 1 transacción requiere exactamente la misma cantidad de esfuerzo que codificar un bloque con 10,000 transacciones.