Scripting avanzado de Bitcoin
Bitcoin utiliza un sistema de secuencias de comandos para las transacciones . En cuarto lugar, el script es simple, basado en pila y procesado de izquierda a derecha. La secuencia de comandos dentro de los resultados de la transacción no está completada intencionalmente por Turing y no tiene instrucciones de salto para evitar la formación de bucles, sin embargo, con el uso de un agente fuera de la cadena, se pueden construir procesos completos de turing utilizando el libro mayor como una cinta de teletipo para almacenar Resultados computacionales.
Un script de salida de transacción es un predicado formado por una lista de instrucciones que describen cómo la siguiente persona que desea transferir los tokens bloqueados en el script debe desbloquearlos. El script para un script P2PKH típico para la dirección D de Bitcoin simplemente obstaculiza el gasto futuro de los bitcoins con la provisión de dos cosas:
- una clave pública que, cuando está en hash, produce la dirección de destino D incrustada en el script, y
- una firma para demostrar la propiedad de la clave privada correspondiente a la clave pública que se acaba de proporcionar.
La secuencia de comandos proporciona la flexibilidad para cambiar los parámetros de lo que se necesita para gastar bitcoins transferidos. Por ejemplo, el sistema de secuencias de comandos podría usarse para requerir dos claves privadas, o una combinación de varias claves, o incluso ninguna clave. Los tokens se desbloquean si la solución proporcionada por la parte que gasta deja un valor distinto de cero en la parte superior de la pila cuando finaliza el script.
De hecho, el script de Bitcoin se define por el código ejecutado por los nodos que construyen la cadena Block . Los nodos acuerdan colectivamente el conjunto de códigos de operación que está disponible para su uso y cómo procesar esos códigos de operación. A lo largo de la historia de Bitcoin ha habido numerosos cambios en la forma en que se procesa el script, incluida la adición de nuevos códigos de operación y la desactivación o eliminación total de códigos de operación del conjunto.
Los nodos que comprueban el script de Bitcoin procesan las entradas de transacción en un motor de evaluación de script. El motor se compone de tres pilas que son:
- La pila principal
- La pila alternativa
Además, el sistema también utiliza un sistema de gestión de subíndices para rastrear la profundidad de los bucles If anidados
Las pilas principal y alternativa contienen vectores de bytes que pueden ser utilizados por los opcodes de Bitcoin para procesar los resultados del script. Cuando se usan como números, los vectores de bytes se interpretan como enteros de longitud variable little-endian con el bit más significativo que determina el signo del entero. Por lo tanto, 0x81 representa -1. 0x80 es otra representación de cero (llamado 0 negativo). El 0 positivo está representado por un vector de longitud nula. Los vectores de bytes se interpretan como booleanos donde False está representado por cualquier representación de cero y True está representado por cualquier representación de no cero.
Antes de la actualización de Genesis, los vectores de bytes en la pila no pueden tener más de 520 bytes de longitud, sin embargo, en el protocolo de Bitcoin ilimitado, mientras que los códigos de operación pushdata se limitan a empujar 4.3GB en la pila, es teóricamente posible concatenar múltiples objetos en la pila para formar elementos de datos singulares más grandes para el procesamiento.
Antes de Génesis, los códigos de operación que eliminan enteros y bools de la pila requieren que no tengan más de 4 bytes de longitud, pero la suma y la resta pueden desbordarse y dar como resultado que se coloque un entero de 5 bytes en la pila. Después de la actualización de Genesis a principios de 2020, los mineros ahora son libres de extraer transacciones con elementos de datos de cualquier tamaño posible dentro de las reglas del protocolo. Estos serán utilizables con funciones matemáticas dentro del script. En este momento, los mineros acordarán colectivamente los límites de datos apropiados en lugar de permitir que un comité centralizado forme un conjunto de restricciones predeterminadas.
Más información sobre el script de Bitcoin
- Opcodes utilizados en el script de Bitcoin
- Codificación de números en el script de Bitcoin
- Scripts con control de flujo (cláusulas condicionales)
- Transferencia de datos en entradas
- OP_CODESEPARATOR
- OP_RETURN
- OP_VER
- Ejemplos de guiones complejos
Atribución
Este contenido se basa en el contenido de https://en.bitcoin.it/wiki/Script bajo Creative Commons Attribution 3.0 . Aunque puede haber sido ampliamente revisado y actualizado, reconocemos a los autores originales.