Glosario / Referencia para desarrolladores
PP expires
- ¿Qué es PP expires?
- PP expires, el campo expires del protocolo de pago (BIP70), era una marca de tiempo Unix opcional del mensaje PaymentDetails que indicaba a la billetera que dejara de atender la solicitud una vez pasado ese momento.
Se especifica en el BIP-70.
Toda factura de bitcoin a precio fijo necesita un plazo, porque el precio se mueve mientras el cliente decide. BIP70 dio a los comerciantes un campo para ello, una marca de tiempo Unix de 64 bits, y lo dejó como opcional. La costumbre sobrevivió al protocolo: la cuenta regresiva de una pantalla de compra instantánea o de un cajero de bitcoin cumple exactamente la misma función.
Cómo funciona
Estado: histórico. expires era el campo 4 del mensaje PaymentDetails, y Bitcoin Core marcó BIP70 como obsoleto en la versión 0.19 antes de eliminarlo en la 0.20.0, el 3 de junio de 2020. Hoy nada implementa el campo.
En el mensaje había dos relojes, uno junto al otro. El campo time era obligatorio y registraba cuándo el comerciante había creado la solicitud; expires era opcional y registraba cuándo debía dejar de ser válida. Ambos contaban segundos desde el 1 de enero de 1970, y ambos eran enteros sin signo de 64 bits, lo que, sin llamar la atención, evitaba el muro del 19 de enero de 2038 con el que se topa un contador con signo de 32 bits.
Hacer cumplir el plazo dependía por completo del software del pagador. La billetera comparaba la marca de tiempo con el reloj de su propio sistema y se negaba a construir una transacción una vez pasado el plazo, lo que significa que un dispositivo con el reloj mal puesto o pagaba una factura ya muerta o rechazaba una todavía viva. Nada de este campo tocaba la blockchain. Una transacción que paga una solicitud expirada es tan válida como cualquier otra, y si el comerciante la acredita, la reembolsa o se la queda en silencio nunca fue una cuestión del protocolo.
Los plazos cortos escondían una trampa concreta. Bitcoin apunta a un bloque cada diez minutos en promedio, así que una expiración de cinco minutos podía agotarse antes de que existiera una sola confirmación, y dejar a un cliente que había pagado de verdad con una factura que el software del comerciante ya había dado por perdida.
Dónde aparece
Las cotizaciones a precio fijo están por todas partes al comprar bitcoin, y detrás de cada una hay una caducidad.
La pantalla de compra instantánea de un exchange muestra un precio cotizado junto a una cuenta regresiva, normalmente de entre unos pocos segundos y un par de minutos. Si deja que se agote, la cotización se rehace al precio actual. Un cajero de bitcoin hace lo mismo con un plazo más largo, y esa es en parte la razón de que su spread sea más amplio: el operador absorbe el riesgo de precio de todo el tiempo que usted pase frente a la máquina.
Lightning hizo obligatorio el plazo en lugar de opcional. Una factura BOLT11 lleva un campo x para la expiración y, cuando falta, el valor predeterminado es de 3600 segundos, una hora. Si se paga más tarde, un nodo que se comporta como es debido rechaza el pago en lugar de dejarlo en el limbo.
El consejo práctico para quien paga es poco vistoso: cuando hay un plazo de por medio, no ahorre en la comisión. Pagar de menos para ahorrarse unos cientos de satoshis es la forma más común de perder el plazo, y una transacción que llega tarde es precisamente el caso que termina en una solicitud de soporte en lugar de en un pedido.
PP expires frente a locktime
Una expiración era una solicitud del comerciante que el software de billetera decidía respetar; el locktime es una regla que hace cumplir cada nodo de la red. Además de tener fuerzas distintas, los dos van en sentidos opuestos. expires marcaba un momento a partir del cual ya no debía hacerse un pago, y ningún minero lo comprobó nunca. El locktime, escrito en la propia transacción, indica una altura de bloque o un momento antes del cual la transacción no puede incluirse en ningún bloque. La primera cierra un plazo; el segundo abre uno.