Glossario / Riferimento per sviluppatori
Protocollo di pagamento (BIP70)
Noto anche come Protocollo di pagamento, BIP70.
- Che cos'è il protocollo di pagamento (BIP70)?
- Il protocollo di pagamento (BIP70) è stato il tentativo di bitcoin di sostituire i semplici indirizzi con richieste di pagamento firmate e corredate di certificati, e Bitcoin Core ha rimosso l'ultimo residuo del suo supporto nella versione 0.20.0.
Specificato nel BIP-70.
Prima l'ambizione, poi l'abbandono. Gavin Andresen e Mike Hearn hanno pubblicato il BIP70 il 29 luglio 2013, Bitcoin Core lo ha incluso nella 0.9.0 a marzo 2014, lo ha dichiarato obsoleto nella 0.19 a novembre 2019 e lo ha eliminato nella 0.20.0 il 3 giugno 2020. Se una pagina di pagamento chiede ancora al tuo wallet di usarlo, consideralo un segno che quell'integrazione non viene toccata da anni.
Come funziona
Stato: dichiarato obsoleto in Bitcoin Core 0.19 ed eliminato del tutto nella 0.20.0 il 3 giugno 2020. Nessun wallet mantenuto lo implementa. Al suo posto si usa un semplice URI BIP21 per i pagamenti on-chain, fatture BOLT11 o BOLT12 su Lightning e pagamenti silenziosi BIP352 quando serve una destinazione riutilizzabile.
Il progetto era una famiglia di quattro BIP. Il BIP70 definiva i messaggi, il BIP71 registrava un tipo MIME per ciascuno dei tre che viaggiavano sulla rete, il BIP72 aggiungeva il parametro r= perché un URI potesse puntare a una richiesta e il BIP73 gestiva la negoziazione dei contenuti per i wallet che non sapevano interpretare il protocollo.
Il flusso funzionava come un terminale per carte. Un esercente serviva via HTTPS un PaymentRequest firmato. Il wallet del cliente lo scaricava, risaliva la catena di certificati X.509 allegata fino a una radice di cui si fidava già e mostrava il nome di un'azienda invece di una stringa di caratteri. Il cliente approvava, il wallet diffondeva la transazione e inviava anche all'esercente un messaggio Payment con i byte grezzi della transazione e un indirizzo di rimborso. L'esercente rispondeva con un PaymentACK, che fungeva da ricevuta.
Quattro motivi del suo crollo, e vale la pena capirli perché ognuno ricorre ogni volta che qualcuno propone di aggiungere identità sopra bitcoin.
Prendeva in prestito la fiducia dalle autorità di certificazione. Una qualsiasi delle centinaia di CA di un tipico archivio di radici può emettere un certificato per qualsiasi nome, ed è proprio il modo di fallire che bitcoin è stato costruito per aggirare. Il BIP70 permetteva anche un tipo di firma x509+sha1, e il 23 febbraio 2017 è stata pubblicata una collisione pratica di SHA-1.
Richiedeva l'esercente online. Un pagamento non poteva essere costruito se l'endpoint HTTPS dell'esercente non rispondeva, quindi un'interruzione bloccava pagamenti che con un semplice indirizzo avrebbero funzionato.
Divulgava informazioni. Il wallet faceva una richiesta in uscita al server dell'esercente, esponendo l'indirizzo IP del cliente, e il campo di rimborso consegnava un indirizzo nuovo appartenente al pagatore.
Dava molto poco. Il certificato dimostrava che qualcuno aveva il controllo di un nome di dominio, non che la fattura fosse legittima o che la merce fosse reale.
Dove lo vedi
Il motivo principale per cui il BIP70 circola ancora come termine è che il riferimento per sviluppatori di bitcoin.org descrive il protocollo al presente, e quel riferimento non segue gli aggiornamenti di Bitcoin Core da anni.
Oltre a questo, incontri il BIP70 nel codice sorgente archiviato dei wallet, in vecchie guide di integrazione scritte quando i grandi processori di pagamento lo spingevano e, ogni tanto, in un file .bitcoinpaymentrequest allegato a una fattura di dieci anni fa. Nulla di ciò che compri oggi lo richiederà. Gli esercenti che vogliono una pagina di pagamento usano software come BTCPay Server, che emette URI BIP21 e fatture Lightning e non chiede nulla di insolito al wallet del cliente.
Protocollo di pagamento (BIP70) vs PaymentRequest
Il protocollo di pagamento è l'intero scambio; PaymentRequest è uno dei suoi messaggi. Tra wallet ed esercente viaggiavano tre messaggi, e PaymentRequest era il primo, la busta firmata che serviva l'esercente. Usare i due nomi come sinonimi rende la vecchia documentazione più difficile da leggere del necessario. Nota anche che PaymentRequest è il nome di uno standard per browser senza rapporto con questo, pensato per il pagamento con carta e wallet, quindi uno sviluppatore che oggi usa quella parola difficilmente si riferisce a bitcoin.