Autore: Voltage | Pubblicazione originale: 19 giu 2023 | Tradotto da: 31febbraio | Milano Trustless | Link: LNURL – Enhancing Lightning’s User Experience
Quando si pensa a LNURL, la prima cosa che viene in mente potrebbe essere un parametro 'stile' internet, come satoshi@tuosito.com, o un codice QR statico che può essere utilizzato per pagare qualcuno tramite lightning network. Si scopre dopo che LNURL è molto di più. Vediamo cos'è LNURL, come funziona e quali sono le molteplici possibilità di utilizzo
Le basi di LNURL
LNURL è un protocollo costruito sulla base di HTTP, il protocollo di comunicazione standard su Internet, che consente ai client lightning di comunicare, coordinare ed eseguire un'ampia gamma di attività nella rete LN. Il protocollo è un progetto open-source disponibile su GitHub. Alla data attuale, contiene 20 documenti diversi, ciascuno chiamato 'LUD' (LnUrl Document), che descrivono diverse parti del protocollo che possono essere implementate da portafogli e fornitori di servizi.
In questo articolo si vedranno i LUD più noti, ma prima di entrare nei dettagli, analizziamo ciò che accomuna ogni funzione LNURL.
Il flusso è tipicamente lo stesso: si inizia con la scansione di un QR code, di solito utilizzando un wallet LN, e che rappresenta un LNURL. LNURL è una lunga stringa di caratteri, codificata bech32, lo stesso schema di codifica utilizzato per gli indirizzi SegWit. Questa stringa, una volta decodificata, è un normale URL di Internet.
Successivamente, il wallet LN avvia una richiesta all'URL decodificato. Il server che riceve la richiesta trasmette un messaggio di risposta contenente informazioni pertinenti e istruzioni su come procedere, che variano a seconda della natura dell'azione in corso.
Con le informazioni e le istruzioni in possesso, il wallet LN può eseguire alcune azioni su Lightning Network e continuare a comunicare con il server secondo le necessità. Se necessario, anche il server può eseguire azioni sulla rete Lightning.
LNURL è un protocollo molto generico. Questo approccio di scambio di informazioni e istruzioni che vengono poi eseguite su Lightning Network offre agli sviluppatori una sandbox in cui possono creare un'ampia varietà di funzionalità che migliorano l'esperienza utente di Lightning Network. Nella sua essenza, LNURL è un protocollo che facilita il coordinamento tra i client Lightning e rimuove parte della complessità per l'utente finale. Vediamo alcuni esempi concreti esplorando alcune delle diverse funzionalità di LNURL.
channelRequest e LNURL
Nei primi giorni di lightning network, la rete era riservata a coloro che avevano le conoscenze e la curiosità per smanettare con il software sperimentale, principalmente i 'supercoder nell'ombra' già coinvolti nello sviluppo di bitcoin. Ma anche se queste persone erano abituate alla complessità di bitcoin e lightning, c'erano molti intoppi nell'utilizzo di LN.
In particolare, uno dei problemi era la possibilità di ricevere pagamenti. Questo perché per ricevere un pagamento nella rete Lightning è necessario disporre di un canale di pagamento con liquidità in entrata, ovvero bitcoin che si trovano sul lato 'remoto' del canale e che possono muoversi nella direzione opposta. Nei primi tempi, quando erano disponibili solo i canali a finanziamento singolo, la persona che avviava la richiesta di apertura del canale disponeva di tutti i fondi nel lato 'locale' del canale di pagamento.
Quando si avvia la richiesta di apertura del canale, la liquidità inizia dalla parte che ne finanzia l'apertura.
Ciò significa che, per ricevere pagamenti tramite lightning network, è necessario che qualcuno richieda di aprire un canale con un altro peer, bloccando i fondi sul nodo remoto. In questo modo i satoshi potrebbero essere spinti sull'altro lato del canale, consentendo, così, di ricevere un pagamento.
Quando un peer avvia la richiesta di apertura del canale, la liquidità inizia dal suo lato.
Questo prima che arrivassero soluzioni come Magma, Pool e Liquidity Ads. Si immagini ora di dover trovare qualcuno disposto ad aprire un canale con altri, solo per poter ricevere un pagamento. Non è certo la migliore esperienza per l'utente.
LNURL è nato per risolvere questo problema. L'idea originale era quella di pagare qualcuno per aprire un canale. Così gli sviluppatori di Simple Bitcoin Wallet e Bitrefill hanno progettato quella che si è rivelata essere la prima specifica di LNURL, la `channelRequest`. Una channelRequest consente all'utente finale di acquisire liquidità in entrata acquistandola da un fornitore di servizi.
In pratica un fornitore di servizi offre una richiesta di pagamento e, dopo averla pagata, visualizza un QR code. L'utente scansiona il QR, lo decodifica e invia una richiesta all'URL decodificato. Il server risponde con alcuni dati che contengono:
- l'indirizzo del nodo remoto;
- un secondo URL, chiamato 'callback', che quando viene richiamato dal client indica al fornitore di servizi che desidera continuare il processo;
- una sequenza di caratteri, da utilizzare con la callback, che identifica il portafoglio dell'utente, chiamata 'k1';
- un tag, che identifica il tipo di richiesta LNURL in corso, in questo caso una `channelRequest`.
Quindi il wallet utilizza l'indirizzo del nodo remoto per connettersi con esso attraverso Lightning Network. Connettersi non è la stessa cosa che aprire un canale, una connessione è semplicemente un requisito per aprire un canale. Con entrambi i nodi connessi, il wallet invia una richiesta utilizzando l'URL 'callback', fornendo k1, l'ID del nodo locale e un flag per informare l'altra parte se si tratta di un canale annunciato o meno. Infine, il service provider apre il canale con l'utente.
Questo facilita l'ottenimento di liquidità inbound. Non è più necessario andare in giro a cercare persone disposte ad aprire un canale. Con le channelRequest, è possibile semplicemente pagare e attendere la liquidità in entrata.
Richiesta di prelievo - LNURL Withdraw
Un altro problema di lightning network nella sua forma attuale è l'impossibilità di fare richieste di prelievo. Ciò crea un'esperienza d'uso scomoda e poco intuitiva. In un bancomat bitcoin, ad esempio, se si vuole inserire le banconote in valuta locale e farsi pagare tramite lightning, si deve digitare la richiesta di pagamento manualmente, oppure il bancomat deve essere dotato di fotocamera per leggere il QR code della invoice generata. Sarebbe molto meglio se si potesse scansionare un QR code dallo schermo dello sportello e farsi pagare dal bancomat.
LNURL Withdraw Requests risolve questo problema! Questo protocollo consente a un nodo lightning di creare un QR code statico che può essere utilizzato per prelevare fondi quando qualcuno interagisce con esso. Se il bancomat bitcoin supportasse le richieste di prelievo LNURL, mostrerebbe un QR code: un utente, con un wallet che supporta LNURL Withdraw, può scansionarlo per ritirare/incassare . Il wallet effettua quindi una richiesta all'URL e il server risponde con informazioni e istruzioni su come procedere. In particolare, la risposta del server contiene
- un importo minimo di prelievo;
- un importo massimo di prelievo;
- una descrizione da utilizzare nella invoice;
- l'URL di callback che verrà utilizzato nella prossima richiesta del Wallet LN;
- l'identificatore 'k1' che il wallet deve inviare insieme al callback per identificare il wallet;
- il tag, che identifica il tipo di LNURL, in questo caso una 'Withdraw Request, o richiesta di prelievo'.
Una volta ricevuta tale richiesta, il wallet consente all'utente di selezionare l'importo da incassare, vincolato dall'importo minimo e massimo indicato nella risposta del server. Il wallet invia quindi una invoice per l'importo desiderato insieme all'identificatore k1 e all'URL di callback. Con la invoice a disposizione, il server può utilizzare il suo proprio nodo lightning per pagare la invoice e completare la richiesta di prelievo.
Chi ha già sentito parlare delle 'offers/richieste' BOLT 12, sa già che affrontano lo stesso problema. La differenza principale tra le offers BOLT 12 e LNURL Withdraw è che il primo vuole risolvere il problema utilizzando solo la rete lightning, senza la necessità di utilizzare un server per gestire il coordinamento tra i peer. Sebbene sia vero che BOLT 12 è migliore in termini di privacy e sovranità, vale la pena notare che le specifiche di BOLT 12 sono ancora in fase di sviluppo e quindi il supporto è al momento limitato.
Richiesta di pagamento - LNURL Pay
Immaginate di voler condividere con gli altri le vostre folli abilità in Pac-Man trasmettendo il gameplay su un servizio di streaming. E magari anche di essere in grado di ricevere mance in bitcoin per la grande qualità dei contenuti forniti. Non si può usare bitcoin on-chain perché le commissioni di mining possono diventare costose per piccole mance, quindi si opta per usare lightning network.
Ma c'è un problema: ogni pagamento lightning richiede ogni volta, la creazione di una nuova invoice. Ciò significa che non si può semplicemente mostrare il QR code di una invoice nel proprio stream, ma è necessario generarne una nuova per ogni persona che vuole lasciare una mancia e, invece di lasciare semplicemente una donazione, gli spettatori devono chiedere di creare una richiesta di pagamento per poter donare. A quel punto si dovrebbe interrompere il gameplay, creare una invoice e condividerla esclusivamente con la persona che vuole lasciare la mancia. C'è bisogno di dire cosa succederebbe agli spettatori se si interrompesse continuamente il gioco per creare le invoice? Non c'è modo possibilità per bitcoin di competere nel mercato delle mance per gli streamer, se non è in grado di fornire un'esperienza utente migliore.
Ecco dove sono utili le richieste di pagamento LNURL Pay. Questo protocollo consente l'uso di QR code statici per i pagamenti ricorrenti ed è molto simile a LNURL Withdraw, ma ora la persona che scansiona il QR code può inviare denaro invece di riceverlo. Ormai dovrebbe essere facile: l'utente scansiona il QR code e fa una richiesta all'URL decodificato, indi il server risponde con:
- un importo minimo che il servizio è disposto a ricevere;
- un importo massimo che il servizio è disposto a ricevere;
- un campo di metadati, necessario per superare la verifica della firma in una fase successiva;
- l'URL di callback;
- il tag, `payRequest`, in questo caso.
Il wallet LN consente quindi all'utente di selezionare l'importo da inviare, delimitato dall'importo minimo e massimo fornito nella risposta. Successivamente, il wallet utilizza l'URL di callback per informare il fornitore del servizio dell'importo selezionato. Alla ricezione della seconda richiesta, il server crea una invoice per l'importo selezionato e la rimanda al wallet che, infine, può pagare.
Con questo schema, le persone possono utilizzare i QR code statici per dare una mancia o per casi d'uso più elaborati. Curiosità: LNURL Pay Requests è stato sviluppato da FiatJaf, la stessa persona che ha progettato il protocollo NOSTR.
LN Address
Con LNURL Pay, gli sviluppatori hanno fatto un ulteriore passo avanti e hanno proposto un metodo di pagamento a un indirizzo di tipo e-mail, come satoshi@dominio.com. Invece di richiedere un URL codificato in una invoice, il wallet effettua una richiesta a dominio.com/.well-known/lnrulp/satoshi. Il server risponde con le stesse informazioni e istruzioni definite nelle specifiche della richiesta LNURL Pay e il flusso continua come se si trattasse di una normale richiesta LNURL Pay. In sostanza, l'unica cosa che è cambiata è l'URL iniziale.
Autenticazione via LNURL - LNURL Auth
A differenza di quanto visto finora, questo servizio non è stato progettato per migliorare l'esperienza utente Lightning. LNURL Auth è invece un protocollo utilizzato per l'autenticazione degli utenti tramite firma digitale. Una firma digitale richiede una coppia di chiavi pubblicha e privata. In sostanza, un wallet bitcoin è come un portachiavi che contiene più coppie di chiavi pubbliche e private. LNURL Auth sfrutta questo vantaggio e utilizza il seed di un wallet bitcoin per generare chiavi di autenticazione segrete. L'aspetto positivo è che gli utenti sono identificati solo dalle loro chiavi pubbliche. Non è necessario utilizzare e-mail, password o nomi utente.
Quando si accede a un sito web che supporta LNURL Auth, all'utente che fa clic sul pulsante di accesso viene presentato un QR code. Con un wallet che supporta LNURL Auth, l'utente può scansionarlo e fare una richiesta all'URL decodificato e il server risponde con:
- il tipo di azione (registrazione, login, link, auth);
- il parametro k1, che in questo caso è costituito da 32 byte di dati generati casualmente che saranno firmati dalla 'linking private key', una speciale chiave privata generata dal seed del portafoglio bitcoin;
- il tag, che in questo caso è `login`.
Il wallet chiederà quindi all'utente di autorizzare l'accesso.
Dopo che l'utente ha autorizzato l'accesso, il wallet utilizzerà la chiave privata di collegamento per firmare k1 e rinvierà la firma in una successiva richiesta al server. Il server convalida la firma rispetto alla chiave pubblica di collegamento e, se la firma è valida, autentica l'utente che esegue il login.
Richiesta LNURL per canale hosted
Un canale hosted si riferisce a un canale che non è registrato on-chain o i cui fondi non sono salvaguardati dalla timechain stessa. Al contrario, una terza parte è responsabile della custodia dei fondi.
Questo LNURL è molto simile all'LNURL channelRequest. In questo caso, il server risponde con:
- l'indirizzo del nodo remoto;
- 'k1', che in questo caso è un segreto di secondo livello utilizzato successivamente dal portafoglio;
- un alias opzionale per il nodo;
- il tag, che in questo caso è 'hostedChannelRequest'.
Il wallet utilizza l'indirizzo del nodo remoto per connettersi con esso e, una volta connesso, invia un messaggio `InvokeHostedChannel` al nodo di destinazione utilizzando k1. Il resto è gestito dal protocollo del canale Hosted utilizzato.
LNURL in libertà
Come è emerso chiaramente in questo articolo, LNURL migliora notevolmente l'esperienza dell'utente sulla rete lightning. Molti wallet e fornitori di servizi implementano diverse parti del protocollo ed è molto facile trovare bitcoiner su Twitter con il loro indirizzo 'LNAddress' in bio. Una delle caratteristiche più interessanti di LNURL è che può essere utilizzato per replicare l'esperienza che un utente avrebbe con le normali applicazioni finanziarie e questo facilita l'ingresso delle persone in bitcoin.
Si veda ad esempio il progetto 'Fruits for 10 sats' di Praia, in cui LNURL Pay viene utilizzato per replicare l'esperienza dell'utente nel pagare qualcosa con una carta di debito/credito.
Come si può vedere, è così semplice che anche i bambini possono farlo. Non c'è bisogno di capire le complessità di lightning, basta sfiorare con la carta e non pensarci più.
Un'altra interessante applicazione abilitata da LNURL è il progetto Machankura di Kgothatso Ngako, che consente di utilizzare la rete lightning per i pagamenti, usando un qualsiasi telefono cellulare, tramite SMS.
Forse uno dei casi d'uso più popolari per LNURL in questo , momento sono gli 'Zap' su NOSTR, una funzione che consente agli utenti di NOSTR di inviare satoshi l'uno all'altro dal loro client.
In questo modo gli utenti di NOSTR possono essere pagati per i contenuti ritenuti di valore, che al momento sembrano premiare principalmente i meme.
Le polemiche
Nonostante la sua popolarità, LNURL subisce molte critiche che sostengono che LNURL incentiva l'uso di servizi custodial perché richiede un server internet per supportare il protocollo, e questo va contro l'etica di bitcoin di essere denaro senza parti fidate. Questa è una critica è molto valida, ma è anche importante dire che ci sono molte opzioni disponibili che aiutano le persone a usare LNURL con sovranità, con LNBits che è una delle opzioni più popolari.
La realtà è che il protocollo lightning, da solo è ancora lontano dal raggiungere la stessa esperienza consentita da LNURL e forse non ci arriverà mai. Il meglio che si possa fare al momento è educare le persone sui compromessi dell'uso di LNURL con server di terze parti e incentivare gli sviluppatori a progettare soluzioni native anche su Lightning. BOLT 12, ad esempio, può essere utilizzato per generare QR code statici per i pagamenti e anche per le 'offerte'. Questa alternativa è più privata rispetto alla soluzione di LNURL, ma le specifiche devono ancora essere ratificate, il che significa che potrebbero ancora cambiare.
Made with 🧡 by Milano Trustless
Milano Trustless (31febbraioMI)
#MilanoTrustless è un progetto personale per #orangepillare 🟠💊 Milano e infondere ai (meravigliosi) milanesi la mentalità #trustless
follow me :
Related Posts
Lightning Network to Wspólny Język Ekonomii Bitcoina
Oct 25, 2024
Pay for What You Want & How You Deserve
Jan 24, 2024
Nick Szabo was wrong: with Bitcoin, micropayments work
Nov 23, 2023