Saltar al contenido
buybitcoinsmart

Glosario / Transacciones y comisiones

SIGHASH_NONE

¿Qué es SIGHASH_NONE?
SIGHASH_NONE es el indicador que firma las entradas de una transacción sin cubrir ninguna de sus salidas, lo que deja el destino del dinero abierto a cualquiera que la maneje.

Trátelo como un cheque en blanco. Una entrada SIGHASH_NONE autoriza el gasto y no dice nada sobre a quién se paga, así que un minero o cualquier nodo que retransmita la transacción puede reescribir todas las salidas antes de que se confirme. El indicador vale 2, ninguna billetera de consumo lo ofrece, y si alguna vez ve una entrada así en su propia transacción, algo ha salido mal.

Cómo funciona

Construir este hash significa descartar por completo la lista de salidas antes de calcularlo.

Lo que sobrevive sigue siendo sustancial: la versión de la transacción, el outpoint de la entrada que se firma, el propio número de secuencia de esa entrada, el script que gasta y el locktime. Los números de secuencia de todas las demás entradas se ponen a cero, una segunda libertad, porque permite a los cofirmantes ajustar sus propios bloqueos temporales relativos (relative timelocks) cuando esta firma ya existe.

Lo que no sobrevive es la clave de todo. Como no cubre ninguna salida, la firma solo dice que esta moneda puede gastarse en una transacción de esta versión en este momento o después. Quien tenga la transacción a medio construir elige adónde va el valor, y eso incluye a cualquiera que la vea en la red, ya que una transacción sin confirmar es pública desde el momento en que se difunde.

Si se añade el modificador ANYONECANPAY, el byte pasa a ser 0x82, la firma más débil que bitcoin puede producir: cubre una entrada y nada más en absoluto.

El indicador existe desde la primera versión, de enero de 2009, y nunca se ha eliminado, porque eliminarlo dejaría atrapadas monedas bloqueadas antes de que nadie pensara en las consecuencias. BIP143 y BIP341 lo reimplementaron fielmente para SegWit y Taproot en lugar de descartarlo discretamente.

Dónde aparece

SIGHASH_NONE no aparece casi en ningún sitio, lo cual es exactamente lo que cabe esperar.

El uso teórico es un protocolo en el que una parte aporta fondos y una contraparte elige el destino, con esa contraparte obligada por algo ajeno a la firma. Ninguna aplicación de bitcoin de uso extendido funciona así. Las construcciones que necesitan entradas flexibles recurren en su lugar a ANYONECANPAY, y las que necesitan salidas flexibles usan alternativas prefirmadas en las que los destinos posibles se determinan de antemano.

Así que una firma SIGHASH_NONE en circulación es un error o un robo en curso. Las mempools están vigiladas continuamente por bots que buscan rarezas gastables, y una transacción que lleve una no pasará mucho tiempo allí sin que nadie la note. Quien escriba código de firma debería tratar el indicador como un entero que nunca se pasa, y quien audite un sistema de custodia debería confirmar que el indicador es una constante y no un parámetro que aporta quien hace la llamada.

Para quien compra y conserva bitcoin, la conclusión es breve: usted no se topará con esto, su billetera no se lo ofrecerá, y un software que le pida firmar con él es un software del que conviene alejarse.

SIGHASH_NONE frente a SIGHASH_SINGLE

SIGHASH_NONE cubre cero salidas; el indicador SIGHASH_SINGLE cubre exactamente una, la salida que está en el mismo índice que la entrada que se firma. Esa única salida cubierta cambia por completo el carácter de la firma. Con SIGHASH_SINGLE un firmante puede garantizar su propio pago y dejar abierto el resto de la transacción, lo que es una pieza útil para construir swaps y mercados. SIGHASH_NONE no le garantiza nada en absoluto al firmante, y por eso uno tiene aplicaciones reales y el otro aparece sobre todo en informes de incidentes.

No confundir con

Preguntas frecuentes

¿Puede alguien robar monedas firmadas con SIGHASH_NONE?

Sí, si la transacción llega a una mempool pública. La firma no cubre ninguna salida, así que cualquiera que la vea puede poner su propia dirección en su lugar y volver a difundirla. Esa es la razón por la que ninguna billetera de consumo ofrece el indicador.

¿Por qué bitcoin sigue admitiendo un indicador que nadie usa?

Porque eliminarlo sería una bifurcación dura (hard fork). Las monedas bloqueadas en scripts que esperan que el indicador funcione pasarían a ser imposibles de gastar, así que las dos reescrituras posteriores del algoritmo de hash de firma lo reimplementaron en lugar de descartarlo.

Términos relacionados

Más en la sección Transacciones y comisiones

Leer esta página en inglés