Todas las terminologías que encuentro parecen bastante confusas sobre qué explica qué y generalmente se saltan algunos pasos.
Ejemplo: Transacción 82d62d5f4e69ae8338c39b7ae2e1d33db59bdf62c869ded7344adc936bab8653
Encontrado en https://blockchain.info/tx/82d62d5f4e69ae8338c39b7ae2e1d33db59bdf62c869ded7344adc936bab8653
Muestra un "Script de entrada" de:
3045022100d52330113ccd033ccb1aaa3b759e9696c216e802922e5f1902cd5ada69c612e5022057880205319dccb05eebbe34323a852ee82653f09f81253ddccd08a810e9d42d01 03e5b9f0bb669b289efb8d2826487a24ef5f3985624c8bc3a3e34f6bd54e080b27
Entonces, ¿qué partes de eso son qué, y cómo puedo saber qué partes son qué en el "script de entrada" de esta transacción, así como en otras?
3045022100d52330113ccd033ccb1aaa3b759e9696c216e802922e5f1902cd5ada69c612e5022057880205319dccb05eebbe34323a852ee82653f09f81253ddccd08a810e9d
Es una firma ECDSA codificada por DER. Lo desglosaré:
30
indica que sigue una estructura compuesta (las firmas ECDSA se tratan como un compuesto de 2 enteros, r y s)
45
es la longitud total de la estructura compuesta (excluyendo los 2 bytes de cabecera, 30 45), 69.
02
el comienzo del contenido de la estructura compuesta, 02 indica un número entero (el valor r de la firma)
21
de 33 bytes
00d52330113ccd033ccb1aaa3b759e9696c216e802922e5f1902cd5ada69c612e5
el valor del entero codificado en 33 bytes big-endian. El primer byte es cero, ya que sin él, se interpretaría como un número negativo (consulte la notación de complemento a 2).
02
sigue otro entero (s)
20
de 32 bytes
57880205319dccb05eebbe34323a852ee82653f09f81253ddccd08a810e9d42d
los 32 bytes que codifican el valor s
01
este es un byte sighash agregado por Bitcoin, y técnicamente no es parte de la firma ECDSA. Como tal, no se cuenta como parte de la longitud 69 (byte 45) al principio. Indica qué campos de la transacción están firmados. 01 significa "todos".
la firma: 483045022100d52330113ccd033ccb1aaa3b759e9696c216e802922e5f1902cd5ada69c612e5022057880205319dccb05eebbe34323a852ee82653f09f81253dd0e18da421ccd09da421
y su descomposición:
##################################################################
### tcls_in_sig_script.sh: decode SIG_script OPCODES from a TX ###
##################################################################
48: OP_DATA_0x48: push hex 48 (decimal 72) bytes as data
30: OP_SEQUENCE_0x30: type tag indicating SEQUENCE, begin sigscript
45: OP_LENGTH_0x45: length of R + S
02: OP_INT_0x02: type tag indicating INTEGER
21: OP_LENGTH_0x21: this is SIG R
00D52330113CCD03:3CCB1AAA3B759E96
96C216E802922E5F:1902CD5ADA69C612
E5
02: OP_INT_0x02: type tag indicating INTEGER
20: OP_LENGTH_0x20: this is SIG S
57880205319DCCB0:5EEBBE34323A852E
E82653F09F81253D:DCCD08A810E9D42D
01: OP_SIGHASHALL: this terminates the ECDSA signature (ASN1-DER structure)
3045022100d52330113ccd033ccb1aaa3b759e9696c216e802922e5f1902cd5ada69c612e5022057880205319dccb05eebbe34323a852ee82653f09f81253ddccd08a810e9d
es una firma ECDSA con la clave del remitente.
03e5b9f0bb669b289efb8d2826487a24ef5f3985624c8bc3a3e34f6bd54e080b27
es la clave pública del remitente (cuyo hash se almacena en la dirección a la que se enviaron previamente las monedas).
Sin embargo, para interpretarlos, debe observar la salida que se gasta, que es:
OP_DUP OP_HASH160 6ffdc2e9e69434a7832208db5a6148c67563e8ae OP_EQUALVERIFY OP_CHECKSIG
Que es un script que toma como entrada una clave pública y una firma, verifica si el hash de la clave pública es 6ffdc2e9e69434a7832208db5a6148c67563e8ae
y luego verifica la firma contra esa clave pública.
En general, para saber qué es qué en un scriptSig, debe observar la salida que se gasta. La salida proporciona las condiciones bajo las cuales se puede gastar (en forma de secuencia de comandos), y la entrada solo contiene las "variables" pasadas a la rutina de verificación de la salida.
Mío
pieter wuille
Mío
colisionador de mallas
pieter wuille