News

Una comprobación de silent payments leía los scripts con prisa

BIP-375 prohíbe mezclar una salida de silent payment con un input que la wallet no sepa clasificar. Su validador de referencia decidía cuáles eran esos inputs mirando un solo byte, y un byte no basta para distinguir un witness program de un script común.

3 min de lecturaProtocolo
Una comprobación de silent payments leía los scripts con prisa

Qué pasó

El 17 de agosto de 2026 se integró el pull request #2253 en el repositorio de propuestas de Bitcoin, corrigiendo el validador de referencia de BIP-375, la especificación en borrador para enviar silent payments mediante PSBTs. El validador venía tratando cualquier script de salida cuyo primer byte cayera entre OP_2 y OP_16 como una salida de SegWit versión 2 o posterior. La mayoría de los scripts que empiezan por esos bytes no son nada de eso.

Qué cambia

Los silent payments permiten a quien recibe publicar una única dirección estática que nunca aparece en la cadena: quien envía deriva una salida nueva a partir de ella usando un secreto compartido calculado con los propios inputs de la transacción. Como el destinatario tiene que encontrar esos pagos escaneando, BIP-352 restringe qué transacciones entran en el alcance. Una de las condiciones es que la transacción "does not spend an output with SegWit version > 1", y la especificación es explícita sobre el motivo: saltarse los scripts de salida desconocidos "allows us to have a clean upgrade path for silent payments by avoiding the need to scan the same transaction multiple times with different rule sets."

El coste de equivocarse aquí lo paga quien recibe, que no tiene voto en el asunto. Si quien envía incluye un input que la regla excluye, produce un pago que la wallet del destinatario, o el servidor de índice del que depende, sencillamente no va a mirar nunca. BIP-375 lleva la restricción al flujo de firma para que falle temprano: "If any input is spending an output with script using Segwit version > 1, the Signer must fail."

Reconocer ese tipo de input es donde el validador se equivocaba. Preguntaba si el primer byte del script era OP_2 o superior. Un witness program no es un byte, es una forma: un opcode de versión seguido de un único push directo de entre 2 y 40 bytes, y nada más detrás. El reemplazo comprueba la forma, exigiendo que la longitud total esté entre 4 y 42 bytes y que el segundo byte sea igual a la longitud de lo que queda. Un OP_2 suelto es un script común que empuja el número dos, y el pull request agrega un vector de prueba que dice justamente eso.

Qué no cambia

Esto es un validador de referencia de una especificación en borrador, no una regla de consenso ni una wallet publicada. Nada en la red se comportó distinto el 17 de agosto, y si alguna implementación en producción copió el mismo atajo es una pregunta que el pull request no responde.

La restricción en sí se mantiene, y es la parte con un coste real: unas monedas guardadas en una versión futura de witness no se pueden gastar hacia un silent payment con las reglas actuales, por diseño, y esa limitación la absorbe quien envía para que el escaneo de quien recibe siga siendo barato.

También conviene nombrar en qué dirección fallaba el error. La comprobación antigua rechazaba cosas que debía aceptar, no al revés. Un validador que rechaza por error un PSBT válido es un fallo; uno que acepta por error uno inválido es un fallo distinto y peor.

Contexto

Todo el software de Bitcoin tiene que decidir qué hacer con un script que no reconoce, porque el método mismo de un soft fork consiste en dar significado nuevo a patrones que el software antiguo trata como no restringidos. Escribir esa decisión como una comprobación de rango sobre el primer byte es el atajo que envejece mal, y lo hace justo cuando llega la actualización que anticipaba. El repositorio de propuestas lleva quince días movidos: es el mismo tramo en el que BIP-85 sumó una aplicación para Nostr y BIP-89 avanzó a Deployed.

Boletín

Bitcoin, sin ruido

Qué ha pasado en Bitcoin, qué cambia de verdad, y las fuentes para que puedas comprobarnos. Un número cada vez, directo a tu correo.

  • Un correo por número, nunca una secuencia automática
  • Sin píxeles de seguimiento y sin compartir direcciones
  • Baja desde cualquier número con un clic

Recibe el próximo número

Un correo por número, sin píxeles de seguimiento, y te puedes dar de baja desde cualquiera de ellos. No compartimos tu dirección. Política de privacidad