Estoy estudiando P2SH-P2WPKH y cuando creo la transacción firmada puedo ver esta pila (usando btcdeb )
script | stack
-----------------------------------------+-------------------------------------------------------------------
OP_DUP | Public Key
OP_HASH160 | Signature
3ecfc6b4....a49 |
OP_EQUALVERIFY |
OP_CHECKSIG |
La pregunta es ¿Dónde y cuándo presiono OP_DUP e OP_CHECKSIG? No encuentro nada dentro del código de Bitcoin en GitHub, ¿quizás durante signrawtransactionwithkey
?
Entiendo que la pila contiene el
OP_DUP OP_HASH160 <PubKHash> OP_EQUALVERIFY OP_CHECKSIG
como P2PKH, pero no entiendo por qué están dentro de la pila.
Es mi UTXO y no encuentro 1a83d46422201593cb8f42f44a22a29e86ad652f
dentro de mi pila.
{
"asm": "OP_HASH160 1a83d46422201593cb8f42f44a22a29e86ad652f OP_EQUAL",
"hex": "a9141a83d46422201593cb8f42f44a22a29e86ad652f87",
"reqSigs": 1,
"type": "scripthash",
"addresses": [
"2MufRUxRcGnwbdL4PWKzKb7uSFzBT1wQL7u"
]
}
ACTUALIZAR No encuentro el código dentro de Github, pero tal vez gracias al programa testigo (<0 <20-byte-key-hash>>) el software se activa y crea la pila con P2PKH. Para el nodo más antiguo es ANYONE_CAN_SPEND
, para el nodo más nuevo verifique si hash160 (pubkey) == pubkeyhash
y luego verifique la firma.
En ese caso, cuando el UTXO está involucrado solo para TXID y Cantidad, no para validación (scriptPubKey) como P2SH y P2PKH.
La pregunta es ¿Dónde y cuándo presiono OP_DUP e OP_CHECKSIG?
tu no Ni la transacción que crea la salida ni la transacción que la gasta contienen explícitamente estas instrucciones.
Al verificar un gasto de P2WPKH (lo que significa que el scriptPubKey o el P2SH redimeScript son exactamente OP_0 <20-byte hash>
), se activa una lógica especial que verifica la pila de testigos con el script OP_DUP OP_HASH160 <20-byte-hash> OP_EQUALVERIFY OP_CHECKSIG
.
Consulte los ejemplos en BIP 141 para obtener más información.
a9141a83d46422201593cb8f42f44a22a29e86ad652f87
para desbloquear la transacción1a83d46422201593cb8f42f44a22a29e86ad652f
es hash160 del script de canje. ¿Quizás en primer lugar verifique si redimir script hash160 es igual a scriptPubKey para satisfacer al revés? ¿Y "duplicar" la pila como P2SH "clásico", donde el nodo más antiguo verifica solo esta condición y "ve" la transacción ANYONE_CAN_SPEND?
vincenzopalazzo
OP_DUP
crea un volcado de la pila cuando se ejecuta el ScriptSig (script bloqueado) y se copia en una pila diferente. ¿Por qué esto? porque en el pasado, el bitcoin funcionaba en la pila única y estaba dañado. seOP_DUP
usa porque ahora bitcoin usa más pila para verificar un script. Solo soy un estudiante de bitcoin, no tomo mi respuesta como verdadera, pero pruebo esto o espero una posible respuesta de bitcoin-dev.monoUsuario
monoUsuario
vincenzopalazzo
OP_DUMP
si crees que la pila de entrada es ScriptSig. Tal vez tengo la información incorrecta. Solo agregué una idea.monoUsuario
pieter wuille
kalle