Saltar al contenido
buybitcoinsmart

Glosario / Referencia para desarrolladores

Script de bloqueo

También se conoce como scriptPubKey o Script de salida.

¿Qué es el script de bloqueo?
El script de bloqueo es el breve fragmento de Script de Bitcoin que acompaña a cada salida de transacción y establece las condiciones que deben cumplirse antes de que las monedas de esa salida puedan volver a moverse.

Los bitcoin no se guardan en una dirección; están en salidas, cada una protegida por un script de bloqueo. Bitcoin Core llama scriptPubKey al campo, y en una salida moderna corriente mide 22 o 34 bytes. Cuando usted da una dirección a alguien, le está entregando la receta del script de bloqueo que escribirá la billetera de esa persona.

Cómo funciona

Cada salida de una transacción serializada consta de tres cosas seguidas: ocho bytes de valor en satoshis, un prefijo de longitud y el propio script de bloqueo. Nada en la salida nombra a un destinatario. El script es el destinatario, y una dirección no es más que una codificación con suma de comprobación del puñado de bytes que hay dentro de él.

Cinco plantillas representan casi todo lo que hay hoy en la blockchain. Un bloqueo pay-to-public-key-hash heredado (legacy) ocupa 25 bytes y nombra cuatro opcodes (códigos de operación) alrededor de un hash de 20 bytes. Un bloqueo pay-to-script-hash ocupa 23 bytes y termina con OP_EQUAL. SegWit nativo es deliberadamente simple en comparación: un byte de versión seguido de una sola inserción de datos, 22 bytes para una sola clave y 34 bytes para un hash de script, sin ninguna lógica en la salida. Taproot también ocupa 34 bytes: un byte de versión y una clave de 32 bytes.

La política de retransmisión reconoce esa breve lista y se niega a retransmitir cualquier otra cosa, y por eso no se puede inventar un formato de salida propio y esperar que una billetera pague a ese formato. El consenso es más laxo que la política en este punto, pero el efecto práctico es que las cinco plantillas son todo el menú.

El nombre pubkey script es un fósil. En las primeras transacciones el script sí contenía una clave pública: la salida coinbase del bloque génesis ocupa 67 bytes y contiene una clave sin comprimir de 65 bytes seguida de OP_CHECKSIG, y usted puede leerla en el código fuente del propio Bitcoin Core. Pagar a un hash en lugar de a una clave se convirtió en la norma durante 2011, y hoy la mayoría de los scripts de bloqueo no contienen ninguna clave pública, sino que solo fijan una.

Dónde aparece

Pida a cualquier nodo que decodifique una transacción en bruto y cada salida llevará un objeto scriptPubKey con cuatro campos: la representación en ensamblador (ASM) legible por humanos, el hexadecimal en bruto, la cadena de tipo y la dirección que corresponde a ese tipo. Los exploradores de bloques muestran lo mismo, normalmente con el nombre locking script u output script.

También es donde vive la configuración de solo lectura de una billetera. Importar una dirección significa indicarle a su software qué scripts de bloqueo debe buscar al escanear la blockchain, y por eso un descriptor, una definición que genera toda la familia de scripts que puede producir una clave, ha reemplazado la importación dirección por dirección en las herramientas serias.

La habilidad práctica de lectura es breve. Si el script empieza por 0 y contiene 20 bytes, alguien lo gastará con una firma y una entrada barata. Si contiene 32 bytes, detrás hay un contrato que usted no puede ver. Si empieza por 1 y contiene 32 bytes, es Taproot, y puede ser una sola clave o todo un árbol de condiciones con la misma apariencia.

Script de bloqueo frente a script de desbloqueo

El script de bloqueo plantea la pregunta y el script de desbloqueo intenta responderla, y los escriben personas distintas en momentos distintos. Quien le envía dinero escribe el script de bloqueo, a partir de la dirección que usted le dio, y paga sus bytes. Usted escribe el script de desbloqueo más tarde, cuando gasta, y paga esos bytes usted mismo. Por eso enviar a una dirección Taproot le cuesta al remitente algo más que enviar a una heredada, mientras que a usted le ahorra bastante más cuando con el tiempo mueva las monedas. Los dos scripts también se ejecutan por separado y no como un único programa unido, un cambio introducido en 2010 después de que la ejecución combinada original resultara ser explotable.

No confundir con

Preguntas frecuentes

¿Una dirección de bitcoin es lo mismo que un script de bloqueo?

No. La dirección es una codificación que la billetera que envía vuelve a convertir en un script de bloqueo. Algunos scripts, como una simple salida OP_RETURN, no tienen ninguna dirección, y por eso los exploradores de bloques a veces muestran una salida con un script y sin destinatario.

¿Por qué se llama pubkey script si no contiene ninguna clave pública?

El nombre data de 2009, cuando las salidas sí contenían una clave pública en bruto seguida de OP_CHECKSIG. Pagar a un hash de la clave reemplazó ese patrón durante 2011, pero el nombre de campo scriptPubKey se quedó en el código y en la documentación.

Términos relacionados

Más en la sección Referencia para desarrolladores

Leer esta página en inglés