Glossario / Riferimento per sviluppatori
Importo PP
- Che cos'è l'importo PP?
- L'importo PP era il campo in satoshi all'interno di un output BIP70, impostato a zero quando il commerciante voleva che fosse il pagatore a scegliere quanto inviare.
Specificato nel BIP-70.
Gli errori nei pagamenti nascono dalle unità di misura. L'importo BIP70 era un conteggio di satoshi su 64 bit, mentre il parametro amount di un URI BIP21 è bitcoin decimale, quindi lo stesso pagamento si scrive 250000 nel primo e 0,0025 nel secondo. Chi sposta denaro tra sistemi dovrebbe controllare quale unità si aspetta un campo prima di fidarsi di un totale.
Come funziona
Stato: storico. Il campo apparteneva a BIP70, che Bitcoin Core ha reso obsoleto nella versione 0.19 e ha rimosso nella versione 0.20.0 il 3 giugno 2020.
Due campi componevano un Output all'interno di un messaggio PaymentDetails: uno script che indicava dove va il denaro e un importo che indicava quanto. L'importo era un intero senza segno di 64 bit in satoshi con valore predefinito zero, e lo zero aveva un significato preciso. Non significava non pagare nulla. Significava che il commerciante rinunciava a indicare una cifra e che il wallet doveva chiedere al cliente, ed è così che funzionavano le pagine per le donazioni.
In una stessa richiesta potevano comparire più output, ciascuno con il proprio importo, e il wallet che pagava doveva soddisfarli tutti in una sola transazione. È più utile di quanto sembri. Un commerciante poteva destinare una parte di una vendita direttamente al cold storage, una parte a un hot wallet per i rimborsi e una parte a un affiliato, tutto senza che il cliente inviasse tre pagamenti o sapesse che la suddivisione esisteva.
L'intervallo non è mai stato un vincolo. Un intero senza segno di 64 bit arriva al massimo a 18.446.744.073.709.551.615 satoshi, circa 8.800 volte i 2.100.000.000.000.000 satoshi che esisteranno mai. Il confine interessante stava all'altro estremo. Un importo sotto la soglia della polvere produceva un output che la rete non avrebbe ritrasmesso, e la politica di Bitcoin Core fissa quella soglia a 546 satoshi per un output legacy pay-to-public-key-hash e a 294 per un output segwit a chiave singola.
Dove lo vedi
Oggi nessuno implementa il campo amount di BIP70, ma la confusione sulle unità che c'è dietro è del tutto viva.
Tre specifiche, tre unità. Gli URI BIP21 indicano bitcoin. BIP70 indicava satoshi. Le fatture BOLT11 di Lightning vanno ancora più nel dettaglio e indicano millisatoshi, un millesimo di satoshi. Le interfacce dei wallet aggiungono poi un'impostazione di visualizzazione, quindi lo stesso saldo appare come 0,00250000 o come 250.000 a seconda di una preferenza impostata una volta e dimenticata.
Il costo pratico di sbagliare qui è denaro reale. Le stime delle commissioni arrivano in satoshi per byte virtuale, quindi una spesa segwit con un input e due output di circa 141 vbyte costa 705 satoshi a 5 sat/vB. Se leggi quella cifra come bitcoin, penseresti che una transazione di routine costi più di quanto la maggior parte delle persone spenda in commissioni in un anno.
Due abitudini risolvono la questione. Scegli un'unità di misura nelle impostazioni del tuo wallet e lascialo lì, così il numero di cifre che ti aspetti non cambia mai. E leggi l'etichetta dell'unità su qualsiasi schermata di prelievo prima di leggere il numero, perché i minimi dell'exchange, le commissioni di rete e il tuo saldo sono spesso indicati in unità diverse nella stessa pagina.
Importo PP vs importo dell'URI Bitcoin
Un importo BIP70 era un intero in satoshi; un importo BIP21 è un decimale in bitcoin, e il fattore tra i due è 100.000.000. Tutta la differenza è questa, ed è sufficiente per avere conseguenze. Un campo che contiene 0,0025 in un formato contiene 250000 nell'altro, e un software che passa dall'uno all'altro senza convertire produce un errore di otto ordini di grandezza nella direzione verso cui pende. Ha vinto il formato moderno, quindi il numero che incontri oggi in un link di pagamento è in bitcoin, a meno che qualcosa indichi esplicitamente sats.