¿Qué información está contenida en una transacción?

De acuerdo con la información que encontré aquí: https://en.bitcoin.it/wiki/Transaction contiene una transacción de bitcoin,

PARA CADA ENTRADA:

  • El Hash de la transacción entrante
  • GuiónSig

PARA CADA SALIDA:

  • Valor
  • ScriptPubKey

Ahora mi pregunta es: ¿qué tipo de información está implícitamente contenida en ScriptSig? Sé que desde ScriptPubKey se puede calcular la dirección de destino, pero no veo si se puede recuperar otra información de ScriptSig.

Además, si solo se almacena el hash de la transacción entrante, ¿cómo busca un nodo la transacción entrante en la cadena de bloques cuando necesita validar la nueva transacción? ¿Y cómo sabe en qué bloque está incluida esa transacción? Si no sabe en qué bloque está esa transacción, ¿tiene que hojear toda la cadena de bloques solo para encontrarla?

Su último párrafo es una pregunta separada y debe ir en una publicación separada. Pero ya se ha abordado, por ejemplo, en bitcoin.stackexchange.com/questions/13731/… (ver también comentarios para responder). Un nodo completo ya ha indexado todas las transacciones en la cadena de bloques por su hash (txid), por lo que puede encontrar cualquier transacción determinada sin volver a escanear toda la cadena.
gracias @NateEldredge. ¿Hay alguna especificación sobre cómo se realiza esta indexación?
Es un detalle de implementación del software cliente del nodo. Para Bitcoin Core, puede ver en.bitcoin.it/wiki/…
Entonces, ¿eso significa que cuando un nodo completo indexa la cadena de bloques, también calcula el hash de cada transacción?
Si eso es correcto.

Respuestas (1)

¿Qué datos hay en scriptSig?

scriptSigen un escenario típico de p2pkh , que es la gran mayoría de las transacciones de bitcoin, solo contiene la clave pública del scriptPubKeyhash, así como la firma. Esto significa que no hay más metadatos que la clave pública y la firma para autorizar el pago.

Para transacciones que no son p2pkh, como por ejemplo transacciones p2sh , se incluyen más datos en el archivo scriptSig. Por ejemplo, en p2sh multisig , se revelarán las múltiples claves públicas capaces de autorizar el multisig. En secuencias de comandos aún más complicadas, scriptSigpueden revelar información importante, según lo que scriptPubKeysolicite la secuencia de comandos. Por ejemplo, hay transacciones de copos de nieve que requieren scriptSigser soluciones a ciertos rompecabezas . Sin embargo, estas transacciones son muy raras.

Cómo se validan las transacciones

Existen múltiples modelos de seguridad en la validación de una transacción. La validación de transacciones es una noción diferente de la confirmación de transacciones de la que está hablando. La validación de transacciones pregunta si una transacción es válida; por ejemplo, si tiene el formato correcto, sigue la Ley de Kirchhoff (es decir, la suma de las salidas es menor que la suma de las entradas) y las salidas que gasta no se gastaron dos veces. La validación de una transacción requiere acceso a la UTXO actual .

La confirmación de la transacción , por otro lado, valida que una transacción ha sido ocultada bajo una cierta cantidad de prueba de trabajo, por ejemplo, k = 6 bloques. Verificar el estado de confirmación de una transacción no requiere atravesar todos los datos en la cadena de bloques. Solo requiere mirar los encabezados de blockchain. En el modelo de seguridad SPV , el estado de confirmación de la transacción se verifica simplemente verificando que se haya incluido en un bloque y enterrado bajo una cierta cantidad de prueba de trabajo. Esto se hace rápidamente sin mirar todos los datos de la cadena de bloques (pero solo todos los encabezados de la cadena de bloques) proporcionando una prueba de inclusión que consta de los hermanos de la ruta del árbol de Merkle .

ok, entiendo cómo funciona el árbol merkle. pero, ¿cómo un nodo, que quiere verificar si una determinada entrada para una transacción aún no se ha gastado, sabe en qué bloque estaba esa transacción si la única información proporcionada es el hash de la transacción?