P2SH-P2WPKH: ¿siempre se ha segwit UTXO?

He estado leyendo muchos documentos sobre la estructura de transacciones de BTC y lo encuentro realmente confuso cuando se trata de la historia de SegWit.

Entonces, lo primero es, si tengo la dirección P2SH-P2WPKH, ¿significa que todas las salidas a esta dirección (UTXO) son, por definición, segwit UTXO?

En los documentos ( https://bitcoincore.org/en/segwit_wallet_dev/ ) dice:

Generación y verificación de firmas para P2SH-P2WPKH

Para el gasto de UTXO no segwit, el algoritmo de generación de firmas no cambia.

Para gastos de P2SH-P2WPKH:

  • El scriptSig SÓLO DEBE contener una inserción del script de redimir

...

Entonces, todos los UTXO para la dirección P2SH-P2WPKH son segwit, o son SegWit si la transacción SegWit se realizó en esta dirección (lo que en realidad tiene poco sentido para mí, ya que surge el problema del huevo de la gallina).

¿Por qué escribieron esta parte "Para el gasto de UTXO no segwit, el algoritmo de generación de firmas no ha cambiado" , qué caso cubre? Si tiene una dirección P2SH-P2WPKH pero está tomando algunos UTXO extranjeros para gastar (que no fueron dirigidos a su dirección)?

Otra parte no clara son los scripts para la dirección P2SH-P2WPKH. Aquí está mi dirección de ejemplo: 3MxYPuvEcKDdaEG1xoGyddqir6C4b66MJi

Y aquí está la transacción que se le hizo: https://blockchain.info/rawtx/6c2806587d5cdb3f0363e43f60b4a84baf37b3012fbde02f108f4eb1bdcede42

Basado en él, pubKeyScript de salida es a914de523116b281c96ff1e204ea2ff435b75d48f0de87 que se traduce como:

OP_HASH160 de523116b281c96ff1e204ea2ff435b75d48f0de OP_EQUAL

Entonces, de523116b281c96ff1e204ea2ff435b75d48f0de es hash160 del script de canje. El único script de canje que coincide con este hash que he encontrado es el siguiente:

0 389f26d8d616cb96df1cfd6d9989248a30b933b9

Que es el script del programa testigo v0 (0 sha160sha256(pubkey), por lo que significa que tengo que crear transacciones SegWit, ¿verdad? Intenté hacer transacciones P2SH y dice que tengo pulsaciones no nominales en el script de canje, esa es la causa de "0" presione allí, creo.

Siento que hacer algo mal en esta parte y, como resultado, firmar algo incorrecto o de una manera incorrecta...

Muy apreciado cualquier explicación.

Respuestas (1)

si tengo la dirección P2SH-P2WPKH, ¿significa que todas las salidas a esta dirección (UTXO) son por definición segwit UTXO?

Sí, Bitcoin enviado a una P2SH-P2WPKHdirección producirá un segwit UTXO.

¿Por qué escribieron esta parte "Para el gasto de UTXO no segwit, el algoritmo de generación de firmas no ha cambiado", qué caso cubre? Si tiene una dirección P2SH-P2WPKH pero está tomando algunos UTXO extranjeros para gastar (que no fueron dirigidos a su dirección)?

Creo que tiene razón, parece que solo dice que si desea enviar a una dirección segwit, no necesita firmar una entrada que no sea segwit de manera diferente que antes.

Gasto P2SH(P2WPKH)

Aquí hay un buen ejemplo de referencia: BIP 141: P2SH(P2WPKH) . Para gastar Bitcoin enviado a su dirección 3MxYPuvEcKDdaEG1xoGyddqir6C4b66MJi, debe proporcionar lo siguiente:

witness:      <signature> <pubkey>
scriptSig:    <0 <20-byte-key-hash>>
              (0x160014{389f26d8d616cb96df1cfd6d9989248a30b933b9})

¿Quizás te estás olvidando de las operaciones de empuje 0x16y/o 0x14en scriptSig?

Yes, Bitcoin sent to a P2SH-P2WPKH address will produce a segwit UTXO.Técnicamente, el tipo utxo sigue siendo p2sh. Solo se revela como segwit cuando se gasta. Podría gastarlo totalmente como un p2sh si puede forzar un script de canje que satisfaga el hash y pueda resolverlo, aunque eso es bastante imposible. Independientemente, la salida en sí es p2sh.
@RaghavSood Cierto, no habría forma de detectar que era un UTXO segwit, porque es el script de canje que es segwit.
Gracias por la respuesta y los comentarios, ahora está más claro qué es qué :) No tengo 0x16, aquí está mi script completo: "script": "0014389f26d8d616cb96df1cfd6d9989248a30b933b9", ¿También se requiere 0x16?
Basically here is serialized tx I've 0100000000010142decebdb14e8f102fe0bd2f01b337af4ba8b4603fe463033fdb5c7d5806286c00000000160014389f26d8d616cb96df1cfd6d9989248a30b933b9ffffffff0210270000000000001976a914eeba84c4b62a6b6db8f1e0a1daffa0eccde33adf88acbe2100000000000017a914de523116b281c96ff1e204ea2ff435b75d48f0de8702483045022100fc44e10e8ab2e344c7e90f04f4f21a313850cd8eaebb0320edbc5e2d34c749b70220369da1b85125babd90a067d47e4034bc15ca1b9631ed5c8554148be3a4349d19012102ed991ef73f82488def8031fcccc4d51de840e7f17e3ad5d820781df0b4ee6e0600000000
Necesita 0x16porque le dice al intérprete que envíe los siguientes 22 bytes (script de canje) a la pila.