Glossario / Lightning e layer 2
LNURL
- Che cos'è LNURL?
- LNURL è una famiglia di piccoli protocolli web che permettono a un wallet Lightning di ottenere da un server una fattura nuova, un prelievo o una richiesta di accesso seguendo un unico link codificato.
Le fatture Lightning scadono e possono essere pagate una sola volta, il che le rende scomode da stampare o pubblicare. LNURL risolve il problema anteponendo una richiesta HTTPS alla fattura: il tuo wallet chiede a un server la richiesta di pagamento nel momento in cui vuoi pagare. Le specifiche sono al di fuori dei BOLT e sono numerate a partire da LUD-01.
Come funziona
LNURL trasforma un link statico in una conversazione in tempo reale tra un wallet e un server.
Il link stesso è tutta la trovata. Nella sua forma originale, LUD-01, un URL HTTPS è codificato in bech32 con il prefisso lnurl, il che produce una stringa che sopravvive alla stampa come codice QR o alla digitazione in una finestra di chat. La forma più recente, LUD-17, elimina la codifica e usa semplici prefissi di schema come lnurlp: davanti a un URL ordinario, il che è più corto e più facile da debuggare. In ogni caso, il wallet lo decodifica, esegue una richiesta GET e riceve un JSON che gli indica di che tipo di interazione si tratta.
Il campo tag di quel JSON decide tutto ciò che segue. LUD-06 definisce payRequest, il flusso di pagamento: il server restituisce un URL di callback insieme a minSendable e maxSendable, entrambi in millisatoshi, e una stringa di metadati che il wallet mostra. Scegli un importo, il wallet richiama il server con quell'importo e il server restituisce una fattura BOLT11 appena generata per esattamente quella somma. LUD-03 definisce withdrawRequest, che funziona nella direzione opposta: il server offre denaro e il wallet fornisce una fattura per riceverlo. LUD-02 richiede un canale a un peer. LUD-04 definisce auth, in cui il wallet firma una richiesta con una chiave derivata per dominio, ed è così che alcuni siti Lightning ti fanno accedere senza password.
La proprietà di sicurezza che vale la pena capire è limitata. LNURL garantisce che la fattura provenga dal dominio del link e che il suo importo corrisponda a quello che hai approvato, perché il wallet controlla la fattura ricevuta prima di pagare. Non garantisce nulla su chi abbia il controllo di quel dominio. Scansionare un codice LNURL incollato sopra uno autentico a una bancarella di mercato paga il server dell'attaccante, e il pagamento va a buon fine esattamente come previsto.
Dove lo vedi
La maggior parte delle persone incontra LNURL senza mai vedere la parola.
Le pagine di mance e donazioni usano LNURL-pay dietro un codice QR, ed è per questo che lo stesso codice stampato funziona per cento clienti diversi con cento importi diversi. Gli omaggi alle conferenze Bitcoin e le carte faucet usano LNURL-withdraw: scansiona, il tuo wallet genera silenziosamente una fattura e i sat arrivano senza alcuna fattura visibile. Alcuni wallet Lightning e servizi web usano LNURL-auth come intero sistema di accesso.
L'impiego più ampio è indiretto. Un indirizzo Lightning, nella forma user@domain, è definito in LUD-16 ed è costruito direttamente su LNURL-pay: l'indirizzo è tradotto in un percorso HTTPS well-known e da lì il flusso è un normale LUD-06. Se il tuo wallet gestisce gli indirizzi Lightning, parla già LNURL.
L'avvertenza principale è la disponibilità. Poiché c'è un server web in mezzo, un codice LNURL è affidabile solo quanto quel server e il suo certificato TLS. Una fattura BOLT11, una volta generata, può essere pagata con il server offline; un link LNURL no.
LNURL vs fattura BOLT11
LNURL è un modo per ottenere una richiesta di pagamento; una fattura BOLT11 è la richiesta di pagamento. Questa sola differenza spiega le loro proprietà. Una fattura è autosufficiente, firmata dal nodo destinatario, valida per un tempo determinato e pagabile una sola volta. Un link LNURL non contiene importo, né hash di pagamento, né firma, resta valido a tempo indefinito e funziona per un numero qualsiasi di pagatori perché ognuno attiva una nuova fattura. Stampa una fattura e muore entro un'ora. Stampa un codice LNURL e continua a funzionare finché il dominio non smette di farlo.