¿Cómo se obtiene la dirección P2SH en decodescript?

Estoy tratando de entender cómo obtener la dirección p2SH al decodificar un script de salida.

r.push_back(Pair("p2sh", CBitcoinAddress(CScriptID(script)).ToString()));

fuente

Por lo que entiendo, CScriptID es el hash160 del script.

Respuestas (1)

Entonces, una P2SH scriptPubKey se ve así:

OP_HASH160 <20 byte script hash> OP_EQUAL

Serializado, en hexadecimal, que se parece a:

17a9140000000000000000000000000000000000000087

^ ScriptPubkey len 
  ^ OP_HASH160
    ^ Data element len
      ^ Data element
                                            ^ OP_EQUAL

donde los ceros pueden ser cualquier byte.

¿Cómo se transforma eso en una dirección que comienza con 3? Lo transformas de la misma manera que lo harías con una dirección de Bitcoin normal , pero con un byte de versión diferente. En lugar de 00, usarías 05.

Consulte también la especificación de la dirección P2SH .

por favor vea el seguimiento aquí
¿Transforma solo el elemento de datos?
@Alberts Sí, transforma solo el elemento de datos. Sin embargo, la pregunta de seguimiento no contiene ningún resultado de P2SH. Tiene una salida multisig que podría indicarse como una salida P2SH, pero no tiene salidas P2SH.
Creo que está mirando la dirección que firmó para la transacción. Cuando sigo sus instrucciones, obtengo la dirección que firmó para esta salida. Estaba interesado en la dirección P2SH (3...), cómo extraerla de un script de canje. Me di cuenta de eso y publiqué la respuesta en la pregunta de seguimiento.
@Alberts Su extracción es correcta para salidas multisig desnudas. Sin embargo, la gente también usa P2SH y su código no funcionará correctamente para eso. ¿Cual es la diferencia? P2SH tiene una secuencia de comandos de salida OP_HASH160 <hash> OP_EQUALy parece multisig desnudo<something> OP_CHECKMULTISIGVERIFY
@Alberts Para tener una idea de lo que estoy hablando, pruebe su código en esta transacción: blockchain.info/tx/…