Glosario / Referencia para desarrolladores
OP_DUP
- ¿Qué es OP_DUP?
- OP_DUP copia el elemento de la cima de la pila para poder usarlo dos veces, y por eso el script estándar pay-to-public-key-hash puede tanto calcular el hash de su clave pública como usarla en la verificación.
Un byte, 0x76, y una sola tarea. El Script de Bitcoin no tiene variables, solo una pila, así que un elemento consumido por una instrucción desaparece antes de que se ejecute la siguiente, y la duplicación es la única forma de reutilizarlo. Es el primero de los cuatro opcodes (códigos de operación) operativos del script de 25 bytes que protegía casi todas las direcciones de bitcoin que empiezan por 1.
Cómo funciona
La duplicación hace falta porque la verificación necesita la misma clave pública para dos fines incompatibles. La salida solo fijaba un hash, así que hay que calcular el hash de la clave y compararlo para demostrar que es la clave correcta. Después, la verificación de firma necesita la propia clave, que la comparación habría consumido.
Siga un gasto heredado (legacy) paso a paso. Los datos de quien gasta llegan a la pila como una firma con una clave pública encima. OP_DUP hace una segunda copia de la clave. El opcode OP_HASH160 reemplaza la copia por su hash de 20 bytes. La salida apila los 20 bytes fijados, el opcode OP_EQUALVERIFY consume ambos y aborta todo el script ante cualquier discrepancia, y el opcode OP_CHECKSIG queda frente a la clave original y la firma, exactamente lo que necesita. Cinco pasos, sin ramificaciones, sin bucles y con un costo fijo cada vez.
El opcode cuenta para dos techos sin hacer nada costoso. Es una de las 201 instrucciones operativas que puede contener un script anterior a Taproot, y la copia que hace cuenta para el límite de 1.000 elementos entre todas las pilas. Ninguno de los dos importa en un gasto de una sola clave, y ambos importan en un script que duplica elementos dentro de una cadena de condiciones sin bucles.
Dónde aparece
Mire cualquier transacción que gaste desde una dirección que empieza por 1: el script de bloqueo empieza por OP_DUP. Los exploradores de bloques lo muestran como la primera palabra de la representación en ensamblador (ASM).
Más interesante es dónde se ejecuta sin aparecer. Una salida SegWit nativa de una sola clave no contiene ninguna lógica, solo un byte de versión y un hash de 20 bytes, pero el BIP-141 indica al nodo que construya la plantilla clásica a partir de ese hash y la ejecute de todos modos. Así, el opcode sigue ejecutándose en cada gasto P2WPKH de la red y no aparece en ninguna parte del bloque. Se obtiene el comportamiento sin pagar las cuatro unidades de peso que antes costaba ese byte.
Las salidas de hash de script y los gastos por ruta de clave de Taproot lo omiten por completo. Una salida P2SH compara un hash directamente, y un gasto por clave de Taproot verifica una firma con la clave de salida sin que intervenga ningún script. Es la ilustración más pequeña posible de lo que realmente hicieron SegWit y Taproot: no tanto capacidades nuevas como las mismas comprobaciones organizadas para que la cadena tenga que cargar menos bytes para obtenerlas.