¿Cómo se formatea/firma una transacción?

Cada transacción toma salidas no gastadas como entradas y crea nuevas salidas. El creador de la transacción usa su clave privada para firmar la transacción y los nodos validan esa transacción usando la clave pública del creador.

Pero, ¿cómo exactamente se forman las transacciones? He visto esto en la wiki de bitcoin:

Input:
Previous tx: f5d8ee39a430901c91a5917b9f2dc19d6d1a0e9cea205b009ca73dd04470b9a6
Index: 0
scriptSig: 304502206e21798a42fae0e854281abd38bacd1aeed3ee3738d9e1446618c4571d10
90db022100e2ac980643b0b82c0e88ffdfec6b64e3e6ba35e7ba5fdd7d5d6cc8d25c6b241501

Output:
Value: 5000000000
scriptPubKey: OP_DUP OP_HASH160 404371705fa9bd789a2fcd52d2c580b65d35549d
OP_EQUALVERIFY OP_CHECKSIG

Si usamos esta transacción como ejemplo, ¿cómo tomamos los datos de esto y los formateamos en una transacción RAW firmada que podría enviar directamente a la red sin necesidad de una billetera?

Además, después de crear la transacción RAW firmada, ¿Sha256 solo la codifica para crear su ID de hash o la creación de la ID consiste en otros pasos?

Por último, ¿qué es scriptSig? No entiendo bien los guiones en general, así que si alguien pudiera darme una breve explicación de eso también, estaría agradecido.

¡Gracias de antemano!

Fihdi

Respuestas (2)

Si usamos esta transacción como ejemplo, ¿cómo tomamos los datos de esto y los formateamos en una transacción RAW firmada que podría enviar directamente a la red sin necesidad de una billetera?

El tx referenciado ya está gastado. Por lo tanto, no se puede reutilizar. Además, no puede reformatearlo en un tx firmado RAW. Habría 2 pasos requeridos. Primero vuelva a formatear en un tx "RAW SIN FIRMAR", y luego esto ejecutaría otro conjunto de comandos para firmarlo. Solo así se podría enviar a la red. En el ejemplo, faltan algunos datos, los agregaré rápidamente. Queda claro con los dos enlaces a continuación:

version       01000000
Input(s):     1
Previous tx:  f5d8ee39a430901c91a5917b9f2dc19d6d1a0e9cea205b009ca73dd04470b9a6
Index:        0
script length 48
scriptSig:    304502206e21798a42fae0e854281abd38bacd1aeed3ee3738d9e1446618c4571d1090db022100e2ac980643b0b82c0e88ffdfec6b64e3e6ba35e7ba5fdd7d5d6cc8d25c6b241501
Sequence      00000000
Output:       1
Value:        5000000000
script length 19
scriptPubKey: OP_DUP OP_HASH160 404371705fa9bd789a2fcd52d2c580b65d35549d OP_EQUALVERIFY OP_CHECKSIG
Locktime:     FFFFFFFF

ahora ha elegido un coinbase tx como referencia, lo que agrega un poco más de dificultad, pero ignorando esto, el siguiente paso sería la serialización. En lugar de repetir, aquí hay enlaces al trabajo de amaclin o el trabajo de runek .

Además, después de crear la transacción RAW firmada, ¿Sha256 solo la codifica para crear su ID de hash o la creación de la ID consiste en otros pasos?

No. No es tan fácil :-) Vea el enlace de arriba, y lo que también me dio una muy buena pista fue el blog de Ken Shirriff " Bitcoins the hard way ". Hay muchas representaciones de datos diferentes involucradas, incluido el hexadecimal invertido y más, lo que agrega capas de complejidad.

Por último, ¿qué es scriptSig? No entiendo los guiones en general.

Básicamente se asegura de que se verifique la condición para gastar los fondos de la transacción. Esto se ha preguntado varias veces en bitcoin.SE, por lo que proporciono otro enlace (vea mi respuesta más abajo): ¿ Por qué Bitcoin usa un lenguaje de script?

Y como se dice en este enlace, el libro de Andreas responde muy bien a todas estas preguntas. Realmente muy recomendable.

Sin embargo, estoy bastante seguro de que el enlace proporcionado por amaclin es una copia y pegado de la respuesta anterior de runek.

Puede firmar los datos hash de la transacción presionando el botón "Firmar" accediendo a los detalles de la transacción con herramientas como Electrum. Entonces no olvides decir transmisión en vivo.