Glossario / Riferimento per sviluppatori
PP expires
- Che cos'è PP expires?
- PP expires era il timestamp Unix opzionale di un messaggio PaymentDetails di BIP70 che indicava a un wallet di smettere di onorare la richiesta una volta passato quel momento.
Specificato nel BIP-70.
Ogni fattura bitcoin a prezzo fisso ha bisogno di una scadenza, perché il prezzo si muove mentre il cliente decide. BIP70 dava ai commercianti un campo per fissarla, un timestamp Unix a 64 bit, e lo lasciava opzionale. L'abitudine è sopravvissuta al protocollo: il conto alla rovescia su una schermata di acquisto immediato o su un ATM bitcoin svolge esattamente la stessa funzione.
Come funziona
Stato: storico. expires era il campo 4 del messaggio PaymentDetails, e Bitcoin Core ha deprecato BIP70 nella versione 0.19 prima di eliminarlo nella 0.20.0 il 3 giugno 2020. Oggi nessun software implementa il campo.
Nel messaggio c'erano due orologi uno accanto all'altro. time era obbligatorio e registrava quando il commerciante aveva costruito la richiesta; expires era opzionale e registrava quando avrebbe dovuto smettere di essere valido. Entrambi contavano i secondi dal 1º gennaio 1970, ed entrambi erano interi senza segno a 64 bit, il che evitava senza clamore il muro del 19 gennaio 2038 su cui si scontra un contatore con segno a 32 bit.
L'applicazione della scadenza spettava interamente al software di chi pagava. Un wallet confrontava il timestamp con l'orologio del proprio sistema e rifiutava di costruire una transazione una volta passata la scadenza, il che significa che un dispositivo con l'orologio sbagliato o pagava una fattura ormai scaduta o rifiutava una ancora valida. Nulla del campo toccava la blockchain. Una transazione che paga una richiesta scaduta è valida come qualsiasi altra, e se il commerciante la accredita, la rimborsa o se la tiene senza dire nulla non è mai stata una questione del protocollo.
Le finestre brevi nascondevano una trappola specifica. Bitcoin punta a un blocco ogni dieci minuti in media, quindi una scadenza di cinque minuti poteva passare prima che esistesse una sola conferma, lasciando un cliente che aveva davvero pagato e una fattura che il software del commerciante aveva già considerato persa.
Dove lo vedi
Le quotazioni a prezzo fisso sono ovunque nell'acquisto di bitcoin, e dietro ognuna c'è una scadenza.
La schermata di acquisto immediato di un exchange mostra un tasso accanto a un conto alla rovescia, di solito tra qualche secondo e un paio di minuti. Se lo lasci scadere, la quotazione viene ricostruita al prezzo corrente. Un ATM bitcoin fa la stessa cosa su una finestra più lunga, e questo è in parte il motivo per cui il suo spread è più ampio: l'operatore assorbe il rischio di prezzo per tutto il tempo che passi davanti alla macchina.
Lightning ha reso la scadenza obbligatoria invece che opzionale. Una fattura BOLT11 porta un campo x per la scadenza e, quando manca, il valore predefinito è 3600 secondi, un'ora. Se paghi più tardi, un nodo che si comporta correttamente rifiuta il pagamento invece di lasciarlo in sospeso.
Il consiglio pratico per chi paga è poco appariscente: quando c'è una scadenza, non risparmiare sulla commissione. Pagare meno per risparmiare qualche centinaio di satoshi è il modo più comune di perdere una finestra, e una transazione che arriva in ritardo è proprio il caso che finisce in una richiesta all'assistenza invece che in un ordine.
PP expires vs locktime
Una scadenza era una richiesta del commerciante che il software del wallet sceglieva di rispettare; il locktime è una regola che ogni nodo della rete applica. I due vanno anche in direzioni opposte, oltre che con forze diverse. expires segnava un momento dopo il quale non si sarebbe più dovuto effettuare un pagamento, e nessun miner lo ha mai controllato. Il locktime, scritto nella transazione stessa, indica un'altezza di blocco o un momento prima del quale la transazione non può essere inclusa in alcun blocco. L'uno chiude una finestra; l'altro la apre.