¿Cómo leo un guión? ¿Cómo separa el procesador los "datos" de los "comandos"?

Estoy tratando de entender cómo funciona un script, pero tengo problemas para leer un script (la salida de un Tx... y la entrada de un segundo Tx) y averiguar cómo la computadora (bitcoin-qt) sabe qué entrada en el script es datos y cuál es un comando.

Por favor, corrija mi suposición:

  • El script se lee de izquierda a derecha y es la concatenación de la salida de una Transacción anterior a la entrada de una Transacción consumidora.

  • Una salida de secuencia de comandos solo puede tener una secuencia de comandos de transacción correspondiente que la consuma.

  • Hay varios comandos de script y varios están deshabilitados en la versión actual del cliente

  • El script no puede depender de información externa (ticker bursátil), pero puede confiar en un Oracle para estas dependencias.

  • Los comandos de script que son "comandos" requieren que ciertos datos estén en la pila para funcionar correctamente

  • Hay "scripts estándar" (pero no tengo claro si esto significa que los scripts no estándar nunca se incorporarán a un bloque)

  • Si la evaluación concatenada de una salida de Tx anterior y una entrada de Tx posterior se evalúa como verdadera, entonces la transacción es válida.

Pregunta

  1. ¿Alguien puede decirme si esos pensamientos sobre los guiones son correctos?
  2. ¿Cómo sabe el cuarto procesador la diferencia entre los datos en la pila y los comandos en la pila?
  3. ¿Piensa el procesador que todo son solo datos hasta que encuentra datos que coinciden con una "función" conocida?

Respuestas (1)

El script se lee de izquierda a derecha y es la concatenación de la salida de una Transacción anterior a la entrada de una Transacción consumidora.

Básicamente, aunque los scripts en realidad no están concatenados. Se ejecuta scriptSig y luego se ejecuta scriptPubKey en la pila resultante. Esta distinción es ocasionalmente importante.

Una salida de secuencia de comandos solo puede tener una secuencia de comandos de transacción correspondiente que la consuma.

Hay muchos posibles scriptSigs que podrían "resolver" cualquier scriptPubKey, pero cada salida solo se puede gastar una vez en una cadena de bloques válida.

pero no tengo claro si esto significa que es posible que los scripts no estándar nunca se incorporen a un bloque

Pueden entrar en bloques, aunque los mineros que usan el cliente estándar nunca los agregarán a sus bloques.

¿Cómo sabe el cuarto procesador la diferencia entre los datos en la pila y los comandos en la pila?

Los datos van precedidos por los bytes del 1 al 78, las operaciones pushdata.

De hecho, en versiones muy antiguas del código, el script txin estaba concatenado con el script txout (con un OP_CODESEPARATOR entre ellos). Esto resultó en la falla OP_RETURN (donde el script txin básicamente podría ser simplemente "devolver verdadero"), por lo que se cambió a dos ejecuciones separadas.