No estoy seguro de entender los campos de mi entrada. Tengo una dirección P2SH (Testnet). Esta es la entrada de mi transacción:
"vin": [
{
"txid": "a61389ff9af670770182198a984a4c1785625c60795bd57645ecc78765b23679",
"vout": 1,
"scriptSig": {
"asm": "0014778daf651b21684b572644b47d551fce0ff71c74",
"hex": "160014778daf651b21684b572644b47d551fce0ff71c74"
},
"txinwitness": [
"3044022034a07f088dd88396cd378912a4ed6a156701b075f0facbbae810677048c390e602205df07e13bf4d56feece791a1b5e4d94bec9c93aae14bb87a1b4c6c54ae9bf2f701",
"032c27921f2d15e7eca768c0e8a8b1aeb863328c74d6c194d41dde2888d4b0e75b"
],
"sequence": 4294967295
}
],
Entiendo que: en "asm" tengo RedeemScript. En txinwitness tengo mi firma y la clave pública. ¿Correcto?
Ahora, del utxo utilizado:
"txid": "a61389ff9af670770182198a984a4c1785625c60795bd57645ecc78765b23679",
"vout": 1,
"address": "2N7MaihNErbNH8XTkuZWtJYPzMQAWMPVKHd",
"label": "",
"redeemScript": "0014778daf651b21684b572644b47d551fce0ff71c74",
"scriptPubKey": "a9149ac58ff47e27214b158b38da04bc8cbf72def14387",
"amount": 0.01944571,
"confirmations": 116,
"spendable": true,
"solvable": true,
"desc": "sh(wpkh([7de694b7/0'/0'/7']032c27921f2d15e7eca768c0e8a8b1aeb863328c74d6c194d41dde2888d4b0e75b))#6z7uwusp",
"safe": true
Deduzco que he usado una salida P2SH-P2WPKH. Entonces, en ScriptPubkey encuentro la condición de desbloqueo (HASH160 de la clave pública de mi dirección). En el script de redención encuentro HASH160 de la clave pública comprimida032c27921f2d15...
¿Es correcto decir que, como condición adicional, para desbloquear una UTXO P2SH-P2WPKH, en comparación con una P2PKH, se necesita el HASH de una clave pública adicional?
Entiendo que: en "asm" tengo RedeemScript. En txinwitness tengo mi firma y la clave pública. ¿Correcto?
Correcto. en un P2SH-P2WPKH, el testigo contiene la firma y la clave pública, y la firma del script contiene el script de canje.
¿Es correcto decir que, como condición adicional, para desbloquear una UTXO P2SH-P2WPKH, en comparación con una P2PKH, se necesita el HASH de una clave pública adicional?
Aquí es donde estás un poco equivocado.
La dirección de un P2SH-P2WPKH es el hash160 del script de canje serializado del P2WPKH, que debe estar OP_0 <hash160_of_public_key>
de acuerdo con BIP0141. Entonces parece que necesita una clave pública adicional, pero en realidad solo está usando la misma clave pública dos veces. Uno que va dentro de un script de canje a script_signature, y otro para el campo de testigo que va desnudo junto a la firma.
En otras palabras, no hay ninguna clave pública adicional. Es la misma clave pública que está envuelta dentro de un contrato inteligente (script de canje) definida por BIP0141, serializada y luego cifrada. Ahora, este hash es el mismo hash que se usa para las claves públicas (hash160), por lo tanto, las salidas de estos hash de contrato inteligente tienen la misma longitud que los hash de clave pública, y es por eso que pueden confundirse con claves públicas cuando en realidad son contratos inteligentes. Esto se hace a propósito para que P2SH sea compatible con versiones anteriores.
melk
Óscar Serna