¿Cómo aparecería esta transacción de bitcoin sin procesar si fuera una transacción de segwit sin procesar?
https://blockchain.info/tx/ff8766ec873ff55cc0ac17dee7b379a4efa2a5c83dabdd9a30287c7761ad55d5
Este TX Raw es:
0100000003b0c03779c38ddabc044947b164adbcffde8e0ddb3678494f4e8b83f13b37629d010000006b483045022100f3c0f555cd39198caf77f6756256801fc57bcabe4892601b9def52259698f40a0220230262841bff151eb617f7d4cdda6bf06d6fa791230c152e47f68bcdd0e6f64a01210204b3506d8903ca601c97a4abab6548e91004c535a5a45e21299a494b146859caffffffff060eeae54b70d12caddcc15f8897ebc2b6c3011c9a600aba74d49b969991cab3000000006b4830450221009dbeb64ddd4646e1118503c87feaa95c531b5178c6e543be782f6ecb05e8fbe602203945570f8dc56c145617f0283fa4032e0b7895a9cf2a81c7b65665b8ac608cb00121026602a5dc59c30f485b2c457ac8e2f617e27b10a1d2ae76f3231f9b01dff08964ffffffff7f715ba408db0289118f9b8578e54e721f1aee10d09844510793b8b20c87903e010000006b48304502210095e300886ec4df78e39d6d0cf5e5e531ded8f42f00e5730c371d8951867dad5b02203c55f9403f6c2aac444213161a93a86661e7367d4007be74ffb3981387cc1c790121023f0aadfeb71a4964c5087fec8b052c8236051dae838d4747543330c6b266ce6effffffff02d5781100000000001976a914342ab422c9e3ef285efe9882ae54269ed9713dd688ac20a10700000000001976a91488d924f51033b74a895863a5fb57fd545529df7d88ac00000000
(Sí, entiendo que el hash sería diferente y, por lo tanto, el valor S sería diferente. Me preocupa más cómo se estructura la transacción).
wow, buena pregunta, eso no es muy fácil. Especialmente porque hay diferentes Segwit tx imaginables (P2WPKH nativo, P2SH-P2WPKH, P2WSH nativo, P2SH-P2WSH o uno con dirección Bech32). Luego está el punto de adaptar todos los parámetros de longitud (para firmas y guiones). Lo intentaré con un P2WPKH estándar. Entonces, primero decodificaría su tx provisto, obtengo esto:
VERSION
01000000
TX_IN COUNT [var_int]: hex=03, decimal=3
TX_IN[0] OutPoint hash 9D62373BF1838B4E4F497836DB0D8EDEFFBCAD64B1474904BCDA8DC37937C0B0
TX_IN[0] OutPoint index hex=01000000, reversed=00000001, decimal=1
TX_IN[0] Script Length hex=6B, decimal=107
TX_IN[0] Script Sig
483045022100F3C0F555CD39198CAF77F6756256801FC57BCABE4892601B9DEF52259698F40A0220230262841BFF151
EB617F7D4CDDA6BF06D6FA791230C152E47F68BCDD0E6F64A01210204B3506D8903CA601C97A4ABAB6548E91004C535A5
A45E21299A494B146859CA
TX_IN[0] Sequence (uint32_t) FFFFFFFF
TX_IN[1] OutPoint hash B3CA9199969BD474BA0A609A1C01C3B6C2EB97885FC1DCAD2CD1704BE5EA0E06
TX_IN[1] OutPoint index hex=00000000, reversed=00000000, decimal=0
TX_IN[1] Script Length hex=6B, decimal=107
TX_IN[1] Script Sig
4830450221009DBEB64DDD4646E1118503C87FEAA95C531B5178C6E543BE782F6ECB05E8FBE602203945570F8DC56C145617F0283FA4032E0B7895A9CF2A81C7B65665B8AC608CB00121026602A5DC59C30F485B2C457AC8E2F617E27B10A1D2AE76F3231F9B01DFF08964
TX_IN[1] Sequence FFFFFFFF
TX_IN[2] OutPoint hash 3E90870CB2B89307514498D010EE1A1F724EE578859B8F118902DB08A45B717F
TX_IN[2] OutPoint index hex=01000000, reversed=00000001, decimal=1
TX_IN[2] Script Length hex=6B, decimal=107
TX_IN[2] Script Sig
48304502210095E300886EC4DF78E39D6D0CF5E5E531DED8F42F00E5730C371D8951867DAD5B02203C55F9403F6C2AAC444213161A93A86661E7367D4007BE74FFB3981387CC1C790121023F0AADFEB71A4964C5087FEC8B052C8236051DAE838D4747543330C6B266CE6E
TX_IN[2] Sequence FFFFFFFF
TX_OUT COUNT, hex=02, decimal=2
TX_OUT[0] Value hex=D578110000000000, dec=1145045, bitcoin=0.01145045
TX_OUT[0] PK_Script Length hex=19, dec=25
TX_OUT[0] pk_script 76A914342AB422C9E3EF285EFE9882AE54269ED9713DD688AC
TX_OUT[1] Value hex=20A1070000000000, dec=500000, bitcoin=0.00500000
TX_OUT[1] PK_Script Length hex=19, dec=25
TX_OUT[1] pk_script 76A91488D924F51033B74A895863A5FB57FD545529DF7D88AC
LOCK_TIME 00000000
Ahora hago un P2WPKH tx con eso. En general, la transacción segwit se compone de esta manera:
[nVersión][marcador][bandera][txins][txouts][testigo][nLockTime]
VERSION
01000000
SEGWIT (BIP141): this is a segwit tx, marker=00
(BIP141): flag=01
TX_IN COUNT [var_int]: hex=03, decimal=3
TX_IN[0] 9D62373BF1838B4E4F497836DB0D8EDEFFBCAD64B1474904BCDA8DC37937C0B0
TX_IN[0] hex=01000000, reversed=00000001, decimal=1
TX_IN[0] Script Length hex=00, decimal=0
TX_IN[0] Sequence (uint32_t) FFFFFFFF
TX_IN[1] B3CA9199969BD474BA0A609A1C01C3B6C2EB97885FC1DCAD2CD1704BE5EA0E06
TX_IN[1] hex=00000000, reversed=00000000, decimal=0
TX_IN[1] Script Length hex=00, decimal=0
TX_IN[1] Sequence (uint32_t) FFFFFFFF
TX_IN[2] 3E90870CB2B89307514498D010EE1A1F724EE578859B8F118902DB08A45B717F
TX_IN[2] hex=01000000, reversed=00000001, decimal=1
TX_IN[2] Script Length hex=00, decimal=0
TX_IN[2] Sequence (uint32_t) FFFFFFFF
TX_OUT COUNT, hex=02, decimal=2
TX_OUT[0] Value hex=D578110000000000, dec=1145045, bitcoin=0.01145045
TX_OUT[0] PK_Script Length hex=19, dec=25
TX_OUT[0] pk_script 76A914342AB422C9E3EF285EFE9882AE54269ED9713DD688AC
TX_OUT[1]
TX_OUT[1] Value hex=20A1070000000000, dec=500000, bitcoin=0.00500000
TX_OUT[1] PK_Script Length hex=19, dec=25
TX_OUT[1] pk_script 76A91488D924F51033B74A895863A5FB57FD545529DF7D88AC
WITNESS TXIN[0] stack elements: hex=02, decimal=2
WITNESS[0] data length (var_int), hex=48, decimal=72, data(uchar[]):
3045022100F3C0F555CD39198CAF77F6756256801FC57BCABE4892601B9DEF52259698F4
0A0220230262841BFF151EB617F7D4CDDA6BF06D6FA791230C152E47F68BCDD0E6F64A01
WITNESS[1] data length (var_int), hex=21, decimal=33, data(uchar[]):
0204B3506D8903CA601C97A4ABAB6548E91004C535A5A45E21299A494B146859CA
WITNESS TXIN[1] stack elements: hex=02, decimal=2
WITNESS[0] data length (var_int), hex=48, decimal=72, data(uchar[]):
30450221009DBEB64DDD4646E1118503C87FEAA95C531B5178C6E543BE782F6ECB05E8FB
E602203945570F8DC56C145617F0283FA4032E0B7895A9CF2A81C7B65665B8AC608CB001
WITNESS[1] data length (var_int), hex=21, decimal=33, data(uchar[]):
026602A5DC59C30F485B2C457AC8E2F617E27B10A1D2AE76F3231F9B01DFF08964
WITNESS TXIN[2] stack elements: hex=02, decimal=2
WITNESS[0] data length (var_int), hex=48, decimal=72, data(uchar[]):
304502210095E300886EC4DF78E39D6D0CF5E5E531DED8F42F00E5730C371D8951867DAD
5B02203C55F9403F6C2AAC444213161A93A86661E7367D4007BE74FFB3981387CC1C7901
WITNESS[1] data length (var_int), hex=21, decimal=33, data(uchar[]):
023F0AADFEB71A4964C5087FEC8B052C8236051DAE838D4747543330C6B266CE6E
LOCK_TIME
00000000
Así que asumo que el patrón segwit se puede reconocer claramente, vea que la longitud de la firma se da como "0", y al final aparece por entrada los datos del testigo. Se puede encontrar más información en los BIP correspondientes y, por supuesto, en la wiki .
y el hexadecimal serializado sería este:
01000000 0001 03b0c03779c38ddabc044947b164adbcffde8e0ddb3678494f4e8b83f13b37629d0100000000ffffffff060eeae54b70d12caddcc15f8897ebc2b6c3011c9a600aba74d49b969991cab30000000000ffffffff7f715ba408db0289118f9b8578e54e721f1aee10d09844510793b8b20c87903e0100000000ffffffff02d5781100000000001976a914342ab422c9e3ef285efe9882ae54269ed9713dd688ac20a10700000000001976a91488d924f51033b74a895863a5fb57fd545529df7d88ac 02483045022100f3c0f555cd39198caf77f6756256801fc57bcabe4892601b9def52259698f40a0220230262841bff151eb617f7d4cdda6bf06d6fa791230c152e47f68bcdd0e6f64a01210204b3506d8903ca601c97a4abab6548e91004c535a5a45e21299a494b146859ca024830450221009dbeb64ddd4646e1118503c87feaa95c531b5178c6e543be782f6ecb05e8fbe602203945570f8dc56c145617f0283fa4032e0b7895a9cf2a81c7b65665b8ac608cb00121026602a5dc59c30f485b2c457ac8e2f617e27b10a1d2ae76f3231f9b01dff089640248304502210095e300886ec4df78e39d6d0cf5e5e531ded8f42f00e5730c371d8951867dad5b02203c55f9403f6c2aac444213161a93a86661e7367d4007be74ffb3981387cc1c790121023f0aadfeb71a4964c5087fec8b052c8236051dae838d4747543330c6b266ce6e00000000