Detrás de cada dirección de Bitcoin hay un pequeño programa que dice quién puede gastar esas monedas. Bitcoin tiene su propio lenguaje para escribirlos, llamado Script. Es deliberadamente limitado, y esa limitación es una virtud: lo hace predecible y seguro. En esta lección verás cómo funciona y qué permite construir.
Cada salida lleva una cerradura
Cuando una transacción crea una salida, no la envía «a una persona», sino que la bloquea con un script: una cerradura. Para gastarla, la transacción siguiente debe aportar los datos que abren esa cerradura, normalmente una firma y una clave pública. Los nodos ejecutan ambos y, si el resultado es «verdadero», el gasto es válido.
Un lenguaje de pila
Script funciona con una pila: los datos se apilan uno encima de otro y cada operación (llamada opcode) toma los de arriba, hace algo y deja el resultado. Por ejemplo, la cerradura clásica de una dirección legacy (P2PKH) dice:
OP_DUP OP_HASH160 <hash de la clave pública> OP_EQUALVERIFY OP_CHECKSIG
Quien quiere gastar aporta su firma y su clave pública. El script duplica la clave, calcula su hash, comprueba que coincide con el de la cerradura y, por último, verifica que la firma es válida para esa clave. Si todo cuadra, la pila termina en «verdadero».
Deliberadamente limitado
Script no tiene bucles ni puede llamar a otros programas. No es Turing completo, a diferencia de los lenguajes de otras cadenas. Eso impide programas que no terminan, hace que el coste de verificar una transacción sea predecible y reduce muchísimo la superficie de errores. En una red que custodia tanto valor, la sencillez es seguridad.
Tipos de cerradura
- P2PKH (direcciones 1…): pagar al hash de una clave pública.
- P2SH (direcciones 3…): pagar al hash de un script. Quien gasta revela el script completo y los datos que lo satisfacen. Así nacieron las multifirmas cómodas.
- P2WPKH y P2WSH (bc1q…): las versiones SegWit de las anteriores, con los datos de desbloqueo en el testigo.
- P2TR (bc1p…): Taproot, que permite gastar con una sola firma o revelando solo una rama de un árbol de scripts.