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:
| Bandera | Hex | Entradas firmadas | Salidas firmadas |
|---|---|---|---|
| ALL | 0x01 | Todas | Todas |
| NONE | 0x02 | Todas | Ninguna |
| SINGLE | 0x03 | Todas | Una (índice coincidente) |
| ALL|ANYONECANPAY | 0x81 | Una (propia) | Todas |
| NONE|ANYONECANPAY | 0x82 | Una (propia) | Ninguna |
| SINGLE|ANYONECANPAY | 0x83 | Una (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.