Skip to main content

Testigo | Bitcoin Glossary | Mapping Bitcoin

Testigo

Protocolo

Also known as: witness data, segregated witness data

Datos de firma segregados del cuerpo de una transacción SegWit. Su separación corrige la maleabilidad de transacciones y aplica el descuento de testigo.

Descripción general

En Bitcoin, el testigo son los datos que prueban la autorización para gastar un UTXO — consistiendo típicamente en firmas digitales y claves públicas. Con la introducción del Segregated Witness (SegWit), estos datos de autorización fueron movidos ("segregados") del cuerpo principal de la transacción a una estructura de testigo separada, resolviendo la maleabilidad de transacciones y habilitando el descuento de testigo.

Estructura de transacción pre-SegWit vs. SegWit

Transacción pre-SegWit:
┌────────────────────────────────────┐
│ Versión                            │
│ Entradas:                          │
│   TXID anterior + Índice           │
│   ScriptSig (firma + clave pública)│  ← Datos de testigo
│   Secuencia                        │     dentro del cuerpo tx
│ Salidas:                           │
│   Valor + ScriptPubKey             │
│ Locktime                           │
└────────────────────────────────────┘
  TXID = Hash(estructura completa de arriba)

Transacción SegWit:
┌────────────────────────────────────┐
│ Versión                            │
│ Marcador + Bandera (0x0001)        │
│ Entradas:                          │
│   TXID anterior + Índice           │
│   ScriptSig (vacío para nativo)    │
│   Secuencia                        │
│ Salidas:                           │
│   Valor + ScriptPubKey             │
│ Testigo:                           │
│   [firma, clave pública]           │  ← ¡Separado!
│ Locktime                           │
└────────────────────────────────────┘
  TXID = Hash(estructura SIN testigo)

Por qué importa la segregación

Al mover los datos de testigo fuera del cálculo del TXID:

  1. Corrección de la maleabilidad: Modificar los datos de testigo ya no cambia el TXID, permitiendo el encadenamiento confiable de transacciones esencial para la Lightning Network.
  2. Descuento de comisión: Los bytes de testigo se cuentan a un cuarto del peso (el descuento de testigo), incentivando la adopción de SegWit y aumentando efectivamente la capacidad del bloque.
  3. Versionado de scripts: La estructura de testigo incluye un byte de versión, permitiendo futuras actualizaciones de scripts (como Tapscript) sin interrumpir los formatos de transacciones existentes.

El testigo en Taproot

Las transacciones Taproot usan la versión de testigo 1. Para los gastos por ruta de clave, el testigo contiene una única firma Schnorr de 64 bytes. Para los gastos por ruta de script, el testigo incluye el script, una prueba Merkle de la inclusión del script en el árbol de scripts, y los datos que satisfacen las condiciones del script.

Conceptos erróneos comunes

El testigo no es opcional para las transacciones SegWit — es necesario para que la transacción sea válida. El término "segregado" significa que los datos de testigo están estructuralmente separados de la parte de la transacción usada para calcular el TXID, no que puedan descartarse. Los nodos completos almacenan y validan los datos de testigo; solo se excluyen del hash del TXID.