¿Cuáles son las implicaciones de BIP 12 frente a BIP 16 y OP_CODEHASHCHECK?

Hay una discusión sobre dos propuestas de mejora de Bitcoin diferentes: BIP 12 y BIP 16, y probablemente solo una de ellas se incluirá en Bitcoin 0.6 (los mineros decidirán cuál por mayoría de votos del poder minero). LukeJr propuso una alternativa a BIP 16 llamada OP_CODEHASHCHECK.

¿Alguien puede resumir las diferencias fundamentales entre las tres propuestas y sus respectivas ventajas/desventajas?

¿Por qué "TL; DR" en el título de la pregunta?
@DH: bueno, originalmente lo puse allí porque las respuestas que busco pueden estar contenidas en la larga discusión a la que me vinculé ... pero tiene razón, la pregunta es legítima sin este prefijo.

Respuestas (3)

BIP 12 crea un nuevo código de operación de secuencia de comandos que permite que las secuencias de comandos ejecuten más secuencias de comandos almacenadas en una cadena (como las funciones de evaluación en otros idiomas). No hay mucho debate sobre BIP 12: no se utilizará. Es muy complicado, permite algunos bucles (que Script no debería admitir) y dificulta el análisis de scripts sin ejecutarlos.

Con BIP 16, los scripts pueden ejecutar scripts almacenados en una cadena una vez (no de forma recursiva), y también existen otras restricciones que eliminan todos los inconvenientes de BIP 12 mencionados anteriormente.

CODEHASHCHECK hace lo mismo que BIP 16, pero podría decirse que algunas diferencias técnicas lo hacen más elegante.

Todas estas propuestas están diseñadas para resolver el problema de cómo permitir que los destinatarios elijan qué restricciones colocar en las monedas que reciben en una dirección (autenticación de dos factores, etc.). Actualmente, los remitentes siempre definen las restricciones sobre las monedas enviadas, lo que es un inconveniente en muchos casos.

Gracias. Actualicé mi pregunta para que sea sobre la comparación entre las tres propuestas. ¿Puede dar más detalles sobre las diferencias técnicas entre BIP 16 y CODEHASHCHECK?
Con BIP 16, las secuencias de comandos que coinciden con una determinada plantilla (OP_HASH160 hash OP_EQUAL) tienen comprobaciones adicionales aplicadas, aunque estas comprobaciones adicionales no se especifican explícitamente en la secuencia de comandos. BIP 16 no crea nuevos códigos de operación. CODEHASHCHECK crea un nuevo código de operación para realizar la verificación. BIP 16 sería el único caso de comportamiento "basado en plantillas" en Script, por lo que creo que CODEHASHCHECK es más consistente con el resto de Script y debería preferirse.
Entonces... ¿la diferencia entre ellos es simplemente una cuestión de estilo? ¿Hay alguna diferencia funcional? ¿Podrías explicarlo como si tuviera diez años? (O simplemente alguien sin mucho conocimiento en el protocolo central de Bitcoin), ¿quizás con un ejemplo de por qué esto es importante?
Para mí es sobre todo una cuestión de estilo. CHC no utiliza secuencias de comandos desagradables dentro de cadenas ni coincidencias de plantillas. BIP 16 tiene un tamaño de datos más bajo y una implementación más simple, pero claramente es un truco. Esto definirá un protocolo que puede durar años, así que el estilo cuenta. (Sin embargo, no me importa mucho ; cualquiera de los dos sería aceptable).
Estoy totalmente en desacuerdo con que CHC sea más elegante. Agrega un código de operación que se comporta de manera diferente en función de si el código de operación aparece o no en scriptSig o scriptPubKey.

El mayor inconveniente de OP_EVAL (BIP 12) fue hacer que el sistema de secuencias de comandos utilizado para las transacciones se completara, eliminando así cualquier intento de análisis estático. Esto se consideró un problema muy serio y BIP12 ha sido prácticamente asesinado a tiros y enterrado.

P2SH (BIP 16) pretende ser otro enfoque para el mismo problema de introducir transacciones autorizadas de múltiples claves a nivel de protocolo. Está diseñado específicamente (como lo estaba el sistema de secuencias de comandos original) para no estar completo.

Hubo una animada discusión entre los desarrolladores principales y Luke-Jr, quien propuso usar su propia solución, OP_CODEHASHCHECK, en lugar de P2SH.

Lea la publicación para más detalles.

Gracias por la info. Actualicé mi pregunta para incluir OP_CODEHASHCHECK en la comparación también; lo que realmente me gustaría saber es cuál es la gran diferencia entre OP_CODEHASHCHECK y BIP 16. Podría ir y leer la publicación, pero hasta que lo haga (y para aquellos que no lo haga), sería bueno resumir la diferencia central aquí.

Hay tres BIP que tienen como objetivo proporcionar la función push-to-script-hash (P2SH):

BIP 12 (OP_EVAL): un nuevo código de operación toma un valor de la pila (desde cualquier lugar) y lo ejecuta como si fuera parte del propio script.

  • Desventajas: esto hace que Bitcoin Scripting sea completo (permite bucles) y no se puede analizar estáticamente.
  • Ventajas: Puedes hacer cosas que requieren un lenguaje turing-completo en Scripts.

BIP 16: cuando se ve una plantilla de secuencia de comandos mágica, después de que la secuencia de comandos se ejecuta, los clientes también deben ejecutar el elemento de la pila superior.

  • Desventajas: Requiere una plantilla de secuencia de comandos con mayúsculas y minúsculas y se comporta de manera diferente a simplemente ejecutarla como una secuencia de comandos. No se puede usar en combinación con el protocolo Bitcoin Script actual, pero no lo desaprueba.
  • Ventajas: conserva el estado actual de los scripts, mayormente analizable estáticamente.

BIP 17 (OP_CHECKHASHVERIFY): un nuevo código de operación procesa el script que ya se ha ejecutado y simplemente lo compara con el elemento de la pila superior.

  • Desventajas: No se puede usar para evaluar código en ninguna capacidad.
  • Ventajas: Analizable estáticamente utilizando exactamente el mismo método que ahora, y solo requiere una adición de código de operación trivial sin reestructurar todo el protocolo de script.

También tenga en cuenta que BIP 17 no impide que BIP 12 o 16 se implementen en el futuro, en caso de que surja alguna otra necesidad de sus capacidades más complicadas.