Estoy tratando de averiguar cómo derivar el campo de direcciones de un tx serializado. Tomemos por ejemplo esta transacción en la red de prueba
46993a02c0f271e8106159581fd2329d46818b9888b5123290c5d1da1718b8b9
El formato serializado para este tx es
0100000002b90e7eb0e0cb1c9127bb5c48f78c753462e26128b4a1f7fd60777a039751d87101000000fdfe0000483045022100c2602e5f6bb2a0df006f734493a404f491abade27f2c1a9d0c7c7fd249de00b20220111b273b653dc2d0ec890e10d89d7e7a095fd88e27e588f5a60ba5d80ad3c8bb01483045022100cc574b83104238d94e8c6abda28d33ce2377c324263bfa62ce6f240fa60356fb0220117970c87c00169630f5f368bf90f0f11ea156a7befdab0299ee4f3577a229ed014c695221031d1f0c5147b30190cc837b180c2e2a09733f4fd5d146809091950a80383e92682103bb7f1955df8f9b52bfaa908a0e968ad019ef5e8b832ae405e6d882aeda10ec5321028ea4acd57ae1abd53260b32d252472691ea4402d9ac9d4d0fb8fb4636544a4d453aeffffffffb90e7eb0e0cb1c9127bb5c48f78c753462e26128b4a1f7fd60777a039751d87100000000fdfd0000483045022100b922b6495ce11ab5b8959e0fb97a40bc98011d32b81ece252f2d3bfaf3c34ccf0220194951276272a21c7c0e001d26e68ca9a532927c0c703902ac96a4933824b0e101473044022100dd7bbfba7d765843580d158bf9ef92ba34798d82a42e0098b8acd229cfd6afc3021f55d516e1913bbce390e6fd251d4da483a05e7cb8e510a02f9c6e2d92e574da014c69522103e9b16e8ef73855ffa479d7c1b655f99d6834003c6608210b575a0c6bc6c062632103f12e2f8a3357ba47e8ea91b5ce2325dbc9346e4d2bf8db5d30f9422201bc320e210392a98eb30cb3840e47b3b081f43508da37e499272ede8c95f27b9afca813257953aeffffffff0280a903000000000017a9145868dadcf00a6fff4cc54752e6e75b046d24aad6878ab1a8000000000017a914d81e64eb5a16486b3b5b9dc14eda3412e40ca8638700000000
el formato json es este:
{
"hex" : "0100000002b90e7eb0e0cb1c9127bb5c48f78c753462e26128b4a1f7fd60777a039751d87101000000fdfe0000483045022100c2602e5f6bb2a0df006f734493a404f491abade27f2c1a9d0c7c7fd249de00b20220111b273b653dc2d0ec890e10d89d7e7a095fd88e27e588f5a60ba5d80ad3c8bb01483045022100cc574b83104238d94e8c6abda28d33ce2377c324263bfa62ce6f240fa60356fb0220117970c87c00169630f5f368bf90f0f11ea156a7befdab0299ee4f3577a229ed014c695221031d1f0c5147b30190cc837b180c2e2a09733f4fd5d146809091950a80383e92682103bb7f1955df8f9b52bfaa908a0e968ad019ef5e8b832ae405e6d882aeda10ec5321028ea4acd57ae1abd53260b32d252472691ea4402d9ac9d4d0fb8fb4636544a4d453aeffffffffb90e7eb0e0cb1c9127bb5c48f78c753462e26128b4a1f7fd60777a039751d87100000000fdfd0000483045022100b922b6495ce11ab5b8959e0fb97a40bc98011d32b81ece252f2d3bfaf3c34ccf0220194951276272a21c7c0e001d26e68ca9a532927c0c703902ac96a4933824b0e101473044022100dd7bbfba7d765843580d158bf9ef92ba34798d82a42e0098b8acd229cfd6afc3021f55d516e1913bbce390e6fd251d4da483a05e7cb8e510a02f9c6e2d92e574da014c69522103e9b16e8ef73855ffa479d7c1b655f99d6834003c6608210b575a0c6bc6c062632103f12e2f8a3357ba47e8ea91b5ce2325dbc9346e4d2bf8db5d30f9422201bc320e210392a98eb30cb3840e47b3b081f43508da37e499272ede8c95f27b9afca813257953aeffffffff0280a903000000000017a9145868dadcf00a6fff4cc54752e6e75b046d24aad6878ab1a8000000000017a914d81e64eb5a16486b3b5b9dc14eda3412e40ca8638700000000",
"txid" : "46993a02c0f271e8106159581fd2329d46818b9888b5123290c5d1da1718b8b9",
"version" : 1,
"locktime" : 0,
"vin" : [
{
"txid" : "71d85197037a7760fdf7a1b42861e26234758cf7485cbb27911ccbe0b07e0eb9",
"vout" : 1,
"scriptSig" : {
"asm" : "0 3045022100c2602e5f6bb2a0df006f734493a404f491abade27f2c1a9d0c7c7fd249de00b20220111b273b653dc2d0ec890e10d89d7e7a095fd88e27e588f5a60ba5d80ad3c8bb01 3045022100cc574b83104238d94e8c6abda28d33ce2377c324263bfa62ce6f240fa60356fb0220117970c87c00169630f5f368bf90f0f11ea156a7befdab0299ee4f3577a229ed01 5221031d1f0c5147b30190cc837b180c2e2a09733f4fd5d146809091950a80383e92682103bb7f1955df8f9b52bfaa908a0e968ad019ef5e8b832ae405e6d882aeda10ec5321028ea4acd57ae1abd53260b32d252472691ea4402d9ac9d4d0fb8fb4636544a4d453ae",
"hex" : "00483045022100c2602e5f6bb2a0df006f734493a404f491abade27f2c1a9d0c7c7fd249de00b20220111b273b653dc2d0ec890e10d89d7e7a095fd88e27e588f5a60ba5d80ad3c8bb01483045022100cc574b83104238d94e8c6abda28d33ce2377c324263bfa62ce6f240fa60356fb0220117970c87c00169630f5f368bf90f0f11ea156a7befdab0299ee4f3577a229ed014c695221031d1f0c5147b30190cc837b180c2e2a09733f4fd5d146809091950a80383e92682103bb7f1955df8f9b52bfaa908a0e968ad019ef5e8b832ae405e6d882aeda10ec5321028ea4acd57ae1abd53260b32d252472691ea4402d9ac9d4d0fb8fb4636544a4d453ae"
},
"sequence" : 4294967295
},
{
"txid" : "71d85197037a7760fdf7a1b42861e26234758cf7485cbb27911ccbe0b07e0eb9",
"vout" : 0,
"scriptSig" : {
"asm" : "0 3045022100b922b6495ce11ab5b8959e0fb97a40bc98011d32b81ece252f2d3bfaf3c34ccf0220194951276272a21c7c0e001d26e68ca9a532927c0c703902ac96a4933824b0e101 3044022100dd7bbfba7d765843580d158bf9ef92ba34798d82a42e0098b8acd229cfd6afc3021f55d516e1913bbce390e6fd251d4da483a05e7cb8e510a02f9c6e2d92e574da01 522103e9b16e8ef73855ffa479d7c1b655f99d6834003c6608210b575a0c6bc6c062632103f12e2f8a3357ba47e8ea91b5ce2325dbc9346e4d2bf8db5d30f9422201bc320e210392a98eb30cb3840e47b3b081f43508da37e499272ede8c95f27b9afca813257953ae",
"hex" : "00483045022100b922b6495ce11ab5b8959e0fb97a40bc98011d32b81ece252f2d3bfaf3c34ccf0220194951276272a21c7c0e001d26e68ca9a532927c0c703902ac96a4933824b0e101473044022100dd7bbfba7d765843580d158bf9ef92ba34798d82a42e0098b8acd229cfd6afc3021f55d516e1913bbce390e6fd251d4da483a05e7cb8e510a02f9c6e2d92e574da014c69522103e9b16e8ef73855ffa479d7c1b655f99d6834003c6608210b575a0c6bc6c062632103f12e2f8a3357ba47e8ea91b5ce2325dbc9346e4d2bf8db5d30f9422201bc320e210392a98eb30cb3840e47b3b081f43508da37e499272ede8c95f27b9afca813257953ae"
},
"sequence" : 4294967295
}
],
"vout" : [
{
"value" : 0.00240000,
"n" : 0,
"scriptPubKey" : {
"asm" : "OP_HASH160 5868dadcf00a6fff4cc54752e6e75b046d24aad6 OP_EQUAL",
"hex" : "a9145868dadcf00a6fff4cc54752e6e75b046d24aad687",
"reqSigs" : 1,
"type" : "scripthash",
"addresses" : [
"2N1Jh4cYEFPvw43kZaJovks3hwMWFRUdJ9E"
]
}
},
{
"value" : 0.11055498,
"n" : 1,
"scriptPubKey" : {
"asm" : "OP_HASH160 d81e64eb5a16486b3b5b9dc14eda3412e40ca863 OP_EQUAL",
"hex" : "a914d81e64eb5a16486b3b5b9dc14eda3412e40ca86387",
"reqSigs" : 1,
"type" : "scripthash",
"addresses" : [
"2NCwxMYedhG73QXxDC8jDXY9i5mw4KGcAqo"
]
}
}
],
"blockhash" : "0000000000000fc2902d17140996a27be5d9dfaf8480ea786fa83dc656da72ca",
"confirmations" : 10,
"time" : 1452693415,
"blocktime" : 1452693415
}
Estoy mirando los ejemplos de la guía para desarrolladores , y no parece que el addresses
campo en los vout esté realmente serializado. Lo mismo es cierto para reqSigs
. ¿Cómo se derivan para la transacción si no se serializan explícitamente dentro de ella?
Los campos que está buscando addresses
y reqSigs
, de hecho, están serializados en la transacción. En particular, están implícitos en la scriptPubKey
cadena binaria.
El scriptPubKey
campo es muy general y admite muchos tipos de pago e incluso datos basura arbitrarios (desafortunadamente).
El formato de pay-to-pubkey-hash (P2PKH) es <OP_DUP> <OP_HASH160> <push 20-byte pubKeyHash> <OP_EQUALVERIFY> <OP_CHECKSIG>
[fuente] . El hash de 20 bytes se convierte a través de Base58Check en la cadena de dirección. Y según la documentación a la que se vinculó, reqSigs
es 1 para P2PKH.
Otro formato para el script es un simple multisig, y esto permitirá reqSigs
que sea mayor que 1.
Tenga en cuenta que los datos JSON son producidos por una función llamada DecodeRawTransaction
. Esta es la razón por la cual los datos de salida parecen ser diferentes de los datos de entrada, porque se realizó un procesamiento e interpretación adicional sobre ellos.