ScriptSig

El código de desbloqueo de una salida anterior

Un ScriptSig proporciona el código de desbloqueo de una salida anterior.

Cada salida de una transacción tiene un código de bloqueo (ScriptPubKey). Así que, cuando seleccionas una salida como entrada en una transacción futura, necesitas proporcionar un código de desbloqueo (ScriptSig) para que pueda gastarse. Ese código de bloqueo/desbloqueo usa un mini lenguaje de programación llamado Script.

El campo ScriptSig se usa para desbloquear scripts legados como P2PK, P2PKH, P2MS, P2SH (y otros scripts personalizados). Los scripts segwit más nuevos, como P2WPKH y P2WSH, se desbloquean por medio del campo de testigo.

Ejemplos

¿Cómo es un ScriptSig?

Los ScriptSig son casi siempre únicos, pero tienen una estructura similar dependiendo del tipo de script de bloqueo que estés desbloqueando.

P2PK (ScriptSig)

Para desbloquear un script de bloqueo P2PK, solo necesitas proporcionar una única firma. Es uno de los scripts de desbloqueo más simples, pero bastante poco común hoy en día (se encuentra principalmente al desbloquear transacciones coinbase antiguas).

P2PKH (ScriptSig)

Para desbloquear un script P2PKH, necesitas proporcionar una única firma junto con una clave pública. La clave pública puede ser comprimida (33 bytes) o no comprimida (65 bytes). Fue uno de los scripts más comunes hasta 2016; desde entonces, P2WPKH se volvió más común (funciona igual, pero usa la witness).

Un ScriptPubKey P2PKH contiene un hash de la clave pública, así que la clave pública real se revela en el ScriptSig.

P2MS (ScriptSig)

Para desbloquear un script P2MS (multisig), necesitas proporcionar el número requerido de firmas (por ejemplo, 2 de 3).

P2SH (ScriptSig)

Para desbloquear un script P2SH, proporcionas los datos necesarios para el script de rescate más el propio script de rescate (redeem script) al final del ScriptSig.

Custom (ScriptSig)

A veces encuentras ScriptSigs desbloqueando scripts personalizados. Por ejemplo, en una transacción cuyo script de bloqueo original era un simple problema de matemáticas (pidiendo dos números que sumen 8, siendo el segundo 2 menos que el primero: OP_2DUP OP_ADD OP_8 OP_EQUALVERIFY OP_SUB OP_2 OP_EQUAL), el ScriptSig solo necesita proporcionar esos dos números (p. ej., OP_5 OP_3).

Estos scripts personalizados son bastante raros, pues la mayoría de los scripts de bloqueo personalizados se envuelven en un P2SH, en lugar de colocarse directamente en el ScriptPubKey de una salida (los scripts de bloqueo "en crudo" se consideran no estándar y no son retransmitidos por los nodos — aunque siguen siendo válidos y pueden minarse en la blockchain).

Terminología

¿Por qué se llama ScriptSig?

El ScriptSig contiene Script, y normalmente contiene una firma (signature), por eso se llama "ScriptSig", para abreviar. Un ScriptSig no tiene por qué contener una firma, pero igual lo llamamos así porque ese fue el nombre de variable que Satoshi usó en la versión original de bitcoin — al fin y al cabo, las salidas se bloquean principalmente a la clave pública de alguien y se desbloquean con la firma digital correspondiente.

Tiene más sentido pensar en el "ScriptSig" simplemente como el campo de "código de desbloqueo" dentro de una transacción en bruto. "ScriptSig", "scriptSig" y "scriptsig" son solo formas distintas de escribir lo mismo; no hay una forma oficial, aunque la variante en camel case con la primera letra minúscula ("scriptSig") es como lo escribía Satoshi y parece ser la más común.

ScriptSig de la Coinbase

En la transacción coinbase, el ScriptSig no desbloquea nada (la entrada está en blanco). El minero es libre de colocar cualquier dato allí — frecuentemente la altura del bloque, una etiqueta de texto (ASCII) y un ExtraNonce.

Ícono de herramienta ASCII

ASCII

Convierte entre bytes (en hexadecimal) y caracteres ASCII.

0 bytes
Bytes
0 caracteres
  • Los bytes hex entre 0x20 y 0x7f contienen los caracteres imprimibles.
  • Cualquier valor 0x1f o inferior es un carácter de control (no se mostrará, o mostrará un carácter extraño).
  • Cualquier valor 0x80 o superior no mostrará nada.

Consulta el estándar de codificación ISO 646 para más detalles.

Intérprete de Script

Ejecute un script paso a paso y vea la pila cambiar con cada opcode. El ScriptSig corre primero, luego el ScriptPubKey.