Skip to main content

Sighash | Bitcoin Glossary | Mapping Bitcoin

Sighash

Protocolo

Also known as: signature hash type, SIGHASH flag

Indicador en firmas Bitcoin que define qué partes de la transacción están firmadas y cuáles pueden modificarse, controlando el alcance del compromiso.

Descripción general

Una bandera sighash (hash de firma) es un byte añadido a cada firma en una transacción Bitcoin que especifica qué partes de la transacción se comprometen en la firma. Al variar la bandera sighash, los firmantes pueden elegir bloquear toda la transacción o dejar ciertas partes modificables por otros. Esta flexibilidad habilita patrones avanzados de transacción como crowdfunding, pagos abiertos y construcción colaborativa de transacciones.

Tipos de Sighash

Banderas Sighash y lo que cubren:

SIGHASH_ALL (0x01) — Por defecto, el más común
┌────────────────────────────────┐
│ Firma: TODAS entradas + TODAS  │
│ salidas                        │
│ Nada puede cambiarse           │
│ "Acepto exactamente esta tx"   │
└────────────────────────────────┘

SIGHASH_NONE (0x02)
┌────────────────────────────────┐
│ Firma: TODAS entradas, NINGUNA │
│ salida                         │
│ Cualquiera puede cambiar a     │
│ dónde van los fondos           │
│ "Autorizo gastar mi entrada,   │
│  no me importa el destino"     │
└────────────────────────────────┘

SIGHASH_SINGLE (0x03)
┌────────────────────────────────┐
│ Firma: TODAS entradas + UNA    │
│ salida (mismo índice que la    │
│ entrada)                       │
│ Se pueden añadir otras salidas │
│ "Quiero mi salida específica,  │
│  el resto es flexible"         │
└────────────────────────────────┘

Modificador ANYONECANPAY (0x80) — Puede combinarse con los anteriores:
┌────────────────────────────────┐
│ Firma: SOLO la entrada del     │
│ firmante                       │
│ Se pueden añadir otras entradas│
│ "Otros pueden contribuir con   │
│  entradas"                     │
└────────────────────────────────┘

Banderas combinadas

El modificador ANYONECANPAY puede combinarse con cualquiera de los tres tipos base:

BanderaHexEntradas firmadasSalidas firmadas
ALL0x01TodasTodas
NONE0x02TodasNinguna
SINGLE0x03TodasUna (índice coincidente)
ALL|ANYONECANPAY0x81Una (propia)Todas
NONE|ANYONECANPAY0x82Una (propia)Ninguna
SINGLE|ANYONECANPAY0x83Una (propia)Una (índice coincidente)

Casos de uso prácticos

  • SIGHASH_ALL — Pagos estándar donde el firmante quiere bloquear toda la transacción. Usado en la gran mayoría de las transacciones Bitcoin.
  • ALL|ANYONECANPAY — Crowdfunding: el creador define la salida (destinatario y monto), y múltiples donantes cada uno firma su propia entrada. Una vez que se recopilan suficientes entradas, la transacción es válida.
  • SINGLE|ANYONECANPAY — Cada firmante se compromete con su par entrada-salida, permitiendo a un grupo construir colaborativamente una transacción. Útil en ciertas construcciones de CoinJoin.
  • NONE — Raramente usado, ya que permite a cualquiera redirigir los fondos. Podría usarse teóricamente en protocolos donde el destino de salida se determina más tarde.

Cambios de Sighash en Taproot

La actualización Taproot introdujo SIGHASH_DEFAULT (0x00), que se comporta como SIGHASH_ALL pero ahorra un byte al no añadir la bandera a la firma. Taproot también añadió la propuesta SIGHASH_ANYPREVOUT (BIP118, aún no activada) que permitiría firmas que no se comprometen con el UTXO de entrada específico, habilitando diseños de canal Eltoo/LN-Symmetry.

Concepto erróneo común

Muchos usuarios asumen que todas las firmas funcionan de la misma manera en Bitcoin. En realidad, la bandera sighash le da al firmante un control preciso sobre lo que está autorizando. Sin embargo, usar tipos de sighash no predeterminados requiere una comprensión cuidadosa, ya que un uso incorrecto puede resultar en fondos redirigibles por terceros.