Saltar al contenido
buybitcoinsmart

Glosario / Referencia para desarrolladores

PP script

¿Qué es PP script?
PP script, el campo script del protocolo de pago (BIP70), era obligatorio en cada salida y contenía el script de bloqueo en bruto que el pagador debía reproducir, los mismos bytes que acaban en una salida de transacción.

Se especifica en el BIP-70.

De todo lo que BIP70 enviaba en la red, el script es la única parte que sobrevivió hasta la blockchain. Los certificados, las notas y las fechas de expiración se quedaron off-chain, mientras que el script de bloqueo entraba tal cual en la transacción y hoy se encuentra en el conjunto de UTXO. Esos bytes, y nada más de la solicitud, deciden quién puede gastar las monedas.

Cómo funciona

Estado: histórico. El script era el campo 2 del mensaje Output y la única parte de él que un comerciante no podía omitir, ya que el monto tenía cero como valor predeterminado. Bitcoin Core dejó de analizar cualquier parte de ese mensaje en la 0.20.0, publicada el 3 de junio de 2020.

Enviar un script en lugar de una dirección fue una elección deliberada. Una dirección es un formato de transporte para personas: base58check o bech32, con un prefijo, una suma de comprobación y un conjunto de caracteres elegido para sobrevivir a que se anote por escrito y se lea en voz alta. Una billetera que recibe una tiene que decodificarla en un script antes de poder construir nada. BIP70 se saltaba ese viaje de ida y vuelta y nombraba el destino en la forma que la red usa realmente.

Las formas estándar tienen tamaños fijos, y conocerlos hace que un explorador de bloques sea mucho más fácil de leer:

  • "Pay to public key hash", 25 bytes: duplicar, calcular el hash, apilar 20 bytes, verificar la igualdad, verificar la firma.
  • "Pay to script hash", 23 bytes: calcular el hash, apilar 20 bytes, comprobar la igualdad.
  • SegWit de una sola clave, 22 bytes: un byte de versión cero y un hash de 20 bytes.
  • SegWit de hash de script, 34 bytes: versión cero y un hash de 32 bytes.
  • Taproot, 34 bytes: versión uno y una clave de 32 bytes.

Lo que el formato sacrificaba era la detección de errores. Bech32 garantiza que se detecte el reemplazo de cuatro caracteres cualesquiera en una dirección de hasta 89 caracteres, y base58check detecta la corrupción con un hash de cuatro bytes. Los bytes en bruto de un script no llevan ninguna de las dos. Un bit alterado en una dirección produce una cadena de caracteres que su billetera rechaza; un bit alterado en un script produce una salida válida que nadie podrá gastar jamás.

Dónde aparece

Los tipos de script son la razón por la que dos retiros del mismo tamaño pueden costar comisiones distintas.

Un exchange que le deja elegir un formato de dirección está eligiendo un script por usted. Una salida SegWit de una sola clave ocupa 22 bytes frente a 25 de la forma heredada (legacy), lo cual es trivial, pero gastarla después no lo es: esa entrada cuesta aproximadamente 68 bytes virtuales, mientras que una heredada cuesta alrededor de 148, así que las monedas que usted recibe hoy determinan parte de lo que pagará en comisiones durante el resto de la vida de esas monedas. A 20 sat/vB, la diferencia es de alrededor de 1.600 satoshis por cada entrada que usted acabe gastando.

Los exploradores de bloques indican el tipo de cada salida que muestran, y así usted puede comprobar en qué tipo de salida le pagaron realmente. El software más reciente describe los destinos con descriptores de salida, una forma de texto compacta que abarca toda una familia de scripts y su derivación, en lugar de un script cada vez.

El hábito que vale la pena conservar de todo esto es sencillo. Confirme el destino en un dispositivo con pantalla propia, porque el malware que cambia una dirección en su portapapeles es habitual, y una billetera de hardware que muestra el destinatario real es la comprobación que lo detecta.

PP script frente a script de bloqueo

El campo de BIP70 era un contenedor; un script de bloqueo es la cosa en sí. Un script de bloqueo, también llamado scriptPubKey o pubkey script, aparece en todas las salidas de transacción creadas hasta hoy y establece la condición que debe cumplir quien gasta. PP script era un lugar concreto por el que viajaba una copia de uno, dentro de un protocolo que nadie ejecuta. Use el nombre del campo solo al leer documentación de BIP70, y el nombre general en todos los demás casos.

No confundir con

Preguntas frecuentes

¿Por qué BIP70 enviaba un script en lugar de una dirección de bitcoin?

Porque el script es lo que una transacción contiene realmente. Una dirección es una codificación del mismo destino con una suma de comprobación a su alrededor, así que enviar el script eliminaba un paso de decodificación, a costa de perder la suma de comprobación que detecta los errores de escritura.

¿Cambia sus comisiones el formato de la dirección a la que usted retira?

Sí, sobre todo cuando después gasta las monedas. Una entrada SegWit de una sola clave cuesta alrededor de 68 bytes virtuales frente a aproximadamente 148 de una heredada, así que a 20 sat/vB usted ahorra alrededor de 1.600 satoshis por entrada.

Para seguir leyendo

Términos relacionados

Más en la sección Referencia para desarrolladores

Leer esta página en inglés