Glossario / Riferimento per sviluppatori
URI Bitcoin
Noto anche come BIP21.
- Che cos'è un URI Bitcoin?
- Un URI Bitcoin raccoglie i dettagli di un pagamento in un'unica stringa cliccabile che inizia con bitcoin: e può contenere un indirizzo, un importo e un'etichetta.
Specificato nel BIP-21.
Un URI Bitcoin è un link, e facendoci clic si apre il tuo wallet con il pagamento già compilato. Il BIP21 ha fissato il formato il 29 gennaio 2012: lo schema bitcoin:, un indirizzo e poi parametri opzionali dopo un punto interrogativo. Riceverne uno invece di un semplice indirizzo toglie l'importo dalla lista delle cose che devi copiare correttamente.
Come funziona
La grammatica del BIP21 è volutamente ridotta, ed è la ragione principale per cui il formato è sopravvissuto invariato per oltre un decennio.
Un URI completo si legge bitcoin:bc1q...w5mdq?amount=0.00042&label=Coffee%20Shop&message=Order%20118. Tutto ciò che sta tra i due punti e il punto interrogativo è l'indirizzo di destinazione. Tutto ciò che segue è un insieme di coppie name=value unite da e commerciali, e il BIP21 ne definisce solo tre:
amountè un numero decimale di bitcoin, mai di satoshi, scritto con un punto e senza virgole né simbolo di valuta.amount=0.01significa un centesimo di bitcoin, cioè 1.000.000 satoshi.labelindica il beneficiario del pagamento, come un negozio o una persona.messagedice a cosa serve il pagamento.
Entrambi i campi di testo sono in UTF-8 con codifica percentuale, quindi uno spazio diventa %20 e una e commerciale dentro un'etichetta diventa %26.
Due regole mantengono il formato estensibile. I parametri sconosciuti vengono ignorati, il che permette a un vecchio wallet di leggere un URI nuovo senza intoppi. I parametri con il prefisso req- sono l'eccezione: un wallet che non ne capisce uno deve rifiutare l'intero URI invece di indovinare cosa doveva fare. Quella singola regola è l'intero meccanismo di aggiornamento, e da allora ha assorbito ogni estensione senza rompere il software più vecchio.
Queste estensioni sono il luogo in cui il formato vive davvero oggi:
r=, aggiunto dal BIP72, puntava a una richiesta di pagamento BIP70. Quel percorso è morto.pj=, dal BIP78, indica un endpoint PayJoin così che pagatore e beneficiario possano costruire insieme una transazione collaborativa.lightning=porta una fattura BOLT11 accanto all'indirizzo on-chain. I wallet che lo capiscono pagano tramite Lightning, i wallet che non lo capiscono ripiegano sull'indirizzo, e le pagine di pagamento dei commercianti stampano il risultato come un unico codice QR unificato.- Il BIP353 pubblica un intero URI dentro un record TXT firmato con DNSSEC sotto l'etichetta
_bitcoin-payment, così un nome leggibile da una persona si risolve in istruzioni di pagamento.
L'indirizzo stesso è opzionale. La grammatica del BIP21 ammette zero caratteri di indirizzo, ed è così che funzionava bitcoin:?r=... e come funziona oggi un URI che contiene solo un'offerta.
Perché questo conta quando compri bitcoin
Il momento in cui un URI Bitcoin conta di più è il prelievo, quando i bitcoin lasciano un exchange che non gestisci e arrivano in un posto che gestisci.
Quasi ogni exchange che questo sito tratta, da Kraken e River fino a Relai e Bitpanda, ti dà una semplice casella di testo per l'indirizzo di destinazione. Quella casella vuole l'indirizzo, non l'URI. Incolla bitcoin:bc1q... al suo interno e di solito otterrai un errore di convalida, a volte un campo troncato senza avviso e un prelievo fallito. Prendi ciò che sta tra i due punti e il punto interrogativo, e incolla solo quello.
Il traffico va anche nella direzione opposta. La schermata di ricezione del tuo wallet hardware, la pagina di pagamento di un commerciante e uno scambio peer-to-peer ti consegnano URI invece di semplici indirizzi. Un URI è più sicuro esattamente sotto un aspetto: l'importo viaggia con esso, quindi non puoi digitare male il totale. Non è più sicuro nell'aspetto che conta di più. Nulla in un URI è firmato. Il campo label è testo libero scelto da chi ha costruito la stringa, quindi una pagina di phishing può scrivere label=Kraken%20Withdrawal e il tuo wallet mostrerà quelle parole senza commento.
Per questo la schermata del wallet hardware è il controllo che conta. Qualunque cosa affermi un URI, un dispositivo di firma ti mostra l'indirizzo che sta per pagare su un display che il malware degli appunti non può riscrivere. Confronta lì i caratteri iniziali e finali, sul dispositivo, non nella scheda del browser che ha prodotto il link.
Un esempio pratico: pagare la fattura di una caffetteria
Supponi che una cassa stampi un codice QR e il tuo smartphone legga bitcoin:bc1q...w5mdq?amount=0.00042&label=Kaffeehaus&message=Table%207.
Il tuo wallet ne ricava tre fatti: pagare 0,00042 bitcoin, inviarli a quell'indirizzo e mostrare le parole Kaffeehaus e Table 7 sulla schermata di conferma. Poi fa diverse cose che l'URI non ha mai chiesto. Sceglie quali dei tuoi output non spesi usare, stima una commissione per vB dalla sua stessa vista della mempool, aggiunge un output di resto e attende la tua approvazione.
Ciò che non fa è verificare qualcosa sul destinatario. Non ha controllato che il negozio gestisca l'indirizzo, che 0,00042 bitcoin sia il prezzo concordato o che l'etichetta sia onesta. Quei controlli spettano a te. Su un caffè il rischio è perdere un caffè. Su un trasferimento a cinque cifre vale la pena leggere l'indirizzo dal dispositivo di firma in gruppi di quattro caratteri prima di approvare.
URI Bitcoin vs indirizzo
Un indirizzo è la destinazione da sola, senza istruzioni allegate. Un indirizzo bech32 moderno arriva a 42 caratteri per un output segwit a chiave singola e a 62 per un output taproot, e non dice nulla su quanto inviare né a chi. Un URI è un contenitore: un indirizzo più un importo, un'etichetta e un messaggio facoltativi. Puoi sempre recuperare l'indirizzo da un URI leggendo il testo tra lo schema e il primo punto interrogativo. Non puoi fare il contrario, perché un indirizzo non ha mai portato con sé un importo fin dall'inizio.
URI Bitcoin vs fattura BOLT11
Una fattura BOLT11 è l'equivalente su Lightning, e si comporta diversamente in tre aspetti che contano. È a uso singolo, si lega a un hash di pagamento invece che a un indirizzo e scade, per impostazione predefinita dopo 3.600 secondi quando il commerciante non imposta alcun valore. Un URI Bitcoin non scade mai e può essere pagato due volte, il che è un vantaggio su una pagina di donazioni e un pericolo su una fattura. Il codice QR unificato evita la scelta inserendo una stringa BOLT11 nel parametro lightning= di un normale URI, lasciando che ogni wallet usi il canale che gestisce.