Solía pensar que la matriz de direcciones en el scriptPubKey (vout) se completa a partir del script, pero al examinar las transacciones multigrado a la antigua, descubrí que algo hizo que mi suposición fuera incorrecta:
Dados estos tres votos:
{
"value" : 0.01000000,
"n" : 0,
"scriptPubKey" : {
"asm" : "1 04cc71eb30d653c0c3163990c47b976f3fb3f37cccdcbedb169a1dfef58bbfbfaff7d8a473e7e2e6d317b87bafe8bde97e3cf8f065dec022b51d11fcdd0d348ac4 0461cbdcc5409fb4b4d42b51d33381354d80e550078cb532a34bfa2fcfdeb7d76519aecc62770f5b0e4ef8551946d8a540911abe3e7854a26f39f58b25c15342af 2 OP_CHECKMULTISIG",
"hex" : "514104cc71eb30d653c0c3163990c47b976f3fb3f37cccdcbedb169a1dfef58bbfbfaff7d8a473e7e2e6d317b87bafe8bde97e3cf8f065dec022b51d11fcdd0d348ac4410461cbdcc5409fb4b4d42b51d33381354d80e550078cb532a34bfa2fcfdeb7d76519aecc62770f5b0e4ef8551946d8a540911abe3e7854a26f39f58b25c15342af52ae",
"reqSigs" : 1,
"type" : "multisig",
"addresses" : [
"1AJbsFZ64EpEfS5UAjAfcUG8pH8Jn3rn1F",
"1A8JiWcwvpY7tAopUkSnGuEYHmzGYfZPiq"
]
}
}
{
"value" : 0.00000002,
"n" : 0,
"scriptPubKey" : {
"asm" : "1 0351efb6e91a31221652105d032a2508275f374cea63939ad72f1b1e02f477da78 00f2b7816db49d55d24df7bdffdbc1e203b424e8cd39f5651ab938e5e4a193569e 2 OP_CHECKMULTISIG",
"hex" : "51210351efb6e91a31221652105d032a2508275f374cea63939ad72f1b1e02f477da782100f2b7816db49d55d24df7bdffdbc1e203b424e8cd39f5651ab938e5e4a193569e52ae",
"reqSigs" : 1,
"type" : "multisig",
"addresses" : [
"1NdB761LmTmrJixxp93nz7pEiCx5cKPW44"
]
}
}
que proviene respectivamente de las transacciones:
60a20bd93aa49ab4b28d514ec10b06e1829ce6818ec06cd3aabd013ebcdc4bb1 274f8be3b7b9b1a220285f5f71f61e2691dd04df9d69bb02a8b3b85f91fb1857
He notado que comparten el mismo script:
OP1 OPDATA OPDATA OP2 OP_CHECKMULTISIG
pero con diferentes resultados.
En la primera transacción puede ver dos direcciones en la matriz de direcciones, en la segunda puede ver solo una dirección.
Además, dado este:
{
"value" : 0.00000001,
"n" : 22,
"scriptPubKey" : {
"asm" : "1 6565292c66696c653d7379732e737464657272290a0a69662046616c73653a0a202020207072696e742870726f78792e73656e647261777472616e73616374696f 6e287369676e65645f74785b27686578275d29290a656c73653a0a202020207072696e74287369676e65645f7478290a0000000000000000000000000000000000 2 OP_CHECKMULTISIG",
"hex" : "51416565292c66696c653d7379732e737464657272290a0a69662046616c73653a0a202020207072696e742870726f78792e73656e647261777472616e73616374696f416e287369676e65645f74785b27686578275d29290a656c73653a0a202020207072696e74287369676e65645f7478290a000000000000000000000000000000000052ae",
"type" : "multisig"
}
}
que proviene de la transacción 4b72a223007eab8a951d43edc171befeabc7b5dca4213770c88e09ba5b936e17
No hay requisitos ni direcciones en la transacción analizada.
Entonces, creo que estoy un poco confundido sobre cómo se llena la matriz de direcciones.
tx: 60a20bd93aa49ab4b28d514ec10b06e1829ce6818ec06cd3aabd013ebcdc4bb1
OP_1
04cc71eb[...cut...]0d348ac4 // this is pubkey of 1AJbsFZ64EpEfS5UAjAfcUG8pH8Jn3rn1F
0461cbdc[...cut...]c15342af // this is pubkey of 1A8JiWcwvpY7tAopUkSnGuEYHmzGYfZPiq
OP_2
OP_CHECKMULTISIG
para gastar esta transacción, uno debe firmarla con una de dos claves privadas
tx: 274f8be3b7b9b1a220285f5f71f61e2691dd04df9d69bb02a8b3b85f91fb1857
OP_1
0351efb6[...cut...]77da78 // this is public key of 1NdB761LmTmrJixxp93nz7pEiCx5cKPW44
00f2b781[...cut...]93569e // this is not a public key!
OP_2
OP_CHECKMULTISIG
tx: 4b72a223007eab8a951d43edc171befeabc7b5dca4213770c88e09ba5b936e17
Puede leer sobre esta transacción aquí: http://www.righto.com/2014/02/ascii-bernanke-wikileaks-photographs.html [16]
Parece que está relacionado con https://github.com/bitcoin/bitcoin/blob/master/src/pubkey.h#L48 .
Según tengo entendido (también gracias a los usuarios de #bitcoin @ freenode), las claves públicas que estaba tratando de decodificar no coincidían con esta verificación, por lo tanto, para los registros: en los ejemplos mencionados, la matriz de direcciones (y el int reqSigs ) se completa solo cuando el primer byte de la clave pública coincide con las comprobaciones de la longitud relativa (comprimida o no).