como generar parte de scriptSig en transacciones de bitcoin

Estudié muchos enlaces sobre bitcoin trxs y sobre la generación de scriptSig. Finalmente no pude entender cómo hacer esta parte.

por ejemplo leí estos enlaces:

¿Cuál es la relación entre scriptSig y scriptPubKey?

https://bitcoin.org/en/developer-guide#transactions

¿Cómo se crea un scriptsig para un nuevo tx sin formato?

¿Cómo redimir un Tx básico?

¿Cómo crear la parte <sig> <PubK> en "scriptSig"?

http://www.righto.com/2014/02/bitcoins-hard-way-using-raw-bitcoin.html

https://en.bitcoin.it/wiki/Protocol_documentation#tx

https://en.bitcoin.it/wiki/Transacción

Descubrí que debo firmar una cosa, pero ¿qué es esa cosa?

exactamente y paso a paso ¿Qué debo armar para luego firmarlo?

especialmente si tuviera más de 1 entrada, ¿cómo hacer sigscript?

Tengo una biblioteca que hace la operación de firma por mí. sin embargo, no sé qué estructura debo usar para el mensaje que se va a firmar, especialmente cuando hay múltiples salidas.

Respuestas (1)

Los datos a firmar se denominan Hash Preimage . Luego firmas el doble SHA256 de hash preimage, que tiene una longitud de 256 bits. Antes del hashing, los datos deben formarse como se muestra en esta respuesta . Si está firmando una transacción SegWit, el contenido de la preimagen cambia, como se define en BIP 143 .

Entonces puedes usar las fórmulas aquí , Eq. 2:

(x1, y1) = k × G(x, y) mod p
r = x1 mod n

kes un número aleatorio, Ges el generador, pes el módulo primo, etc.

Entonces,

s = (k^-1 (h(m) + d * r)) mod n

des la clave privada, h(m)es el resultado doble SHA256. Ahora, puede usar r, spara crear la firma codificada en DER.

Leí esto , pero esta solución era solo para una transacción con una salida. si mis salidas se convierten en 2 o 3 ahora, ¿cómo debo hacer scriptsig?
Aquí hay un ejemplo con múltiples salidas. Aquí está la especificación para salidas en BIP143 , desplácese hacia abajo hasta hashOutputs.
Leí este enlace ¡Pero no se explica en absoluto cómo se creó la sección de firma del script!
Después de formar los datos en los ejemplos, los duplica y usa las ecuaciones anteriores. ¿Quieres aprender a hacer eso usando libsecp256k1?
No. Tengo una biblioteca que hace la operación de firma por mí. Solo quiero saber exactamente qué partes de la transacción necesito armar y qué orden debo usar antes de firmar la operación con más de una entrada y una salida.