name: Introduzione Teorica a Lightning Network goal: Scoprire Lightning Network da una prospettiva tecnica objectives:


Un Viaggio nel Secondo Strato di Bitcoin

Immergiti nel cuore di Lightning Network, un sistema essenziale per il futuro delle transazioni Bitcoin. LNP201 è un corso teorico sul funzionamento tecnico di Lightning. Rivela le fondamenta e i meccanismi di questa rete di secondo livello, progettata per rendere i pagamenti Bitcoin veloci, economici e scalabili.

Grazie alla sua rete di canali di pagamento, Lightning consente transazioni rapide e sicure senza registrare ogni scambio sulla blockchain di Bitcoin. Nei vari capitoli, imparerai come funzionano l'apertura, la gestione e la chiusura dei canali, come i pagamenti vengono instradati attraverso nodi intermedi in modo sicuro minimizzando la necessità di fiducia, e come gestire la liquidità. Scoprirai cosa sono le commitment transaction, gli HTLC, le chiavi di revoca, i meccanismi di punizione, il routing a cipolla e le fatture.

Sia che tu sia un principiante di Bitcoin o un utente più esperto, questo corso fornirà informazioni preziose per comprendere e utilizzare Lightning Network. Anche se copriremo alcuni fondamenti del funzionamento di Bitcoin nelle prime parti, è essenziale padroneggiare le basi dell'invenzione di Satoshi prima di immergersi in LNP201.

Buona scoperta!

Introduzione

Panoramica del corso

Benvenuto al corso LNP201!

Questo corso mira a fornirti una comprensione tecnica approfondita del Lightning Network, una rete di sovrapposizione progettata per facilitare transazioni in bitcoin rapide e spesso a basso costo. Scoprirai progressivamente i concetti fondamentali che regolano questo sistema, dall'apertura dei canali di pagamento fino alle tecniche di instradamento e gestione della liquidità.

Sezione 1: Fondamentali
Inizieremo con un'introduzione generale al Lightning Network, stabilendo le basi essenziali su Bitcoin, i suoi indirizzi, gli UTXO e il funzionamento delle transazioni. Questa revisione dei fondamenti è essenziale per comprendere come il Lightning Network si basi sui meccanismi della blockchain principale per funzionare in modo sicuro.

Sezione 2: Apertura e chiusura dei canali
In questa sezione esploreremo il processo di apertura dei canali, che è il pilastro del Lightning Network. Imparerai come vengono create le commitment transaction, il ruolo delle chiavi di revoca per la sicurezza e come i canali possono essere chiusi in modo collaborativo o unilaterale. Ogni passaggio sarà spiegato in modo preciso e tecnico per aiutarti a comprendere tutte le sue sottigliezze.

Sezione 3: Una rete di liquidità
Il Lightning Network non si limita a singoli canali; è una vera rete di pagamento. Vedremo come le transazioni possono essere indirizzate attraverso nodi intermedi utilizzando HTLC. Questa parte ti introdurrà anche alle sfide della liquidità in entrata e in uscita.

Sezione 4: Strumenti del Lightning Network
Questa sezione presenta gli strumenti pratici del Lightning Network, come Invoices, LNURL e Keysend. Imparerai anche a gestire la liquidità dei tuoi canali, un aspetto importante per garantire la fluidità dei pagamenti e massimizzare l'efficienza delle tue transazioni su Lightning.

Sezione 5: Vai oltre
Infine, concluderemo il corso ricapitolando i concetti trattati e aprendo la strada a temi più avanzati per coloro che desiderano approfondire la loro conoscenza del Lightning Network.

Pronto a scoprire i meccanismi tecnici del Lightning Network? Andiamo!

I Fondamenti

Comprendere Lightning Network

Benvenuto al corso LNP 201, che mira a spiegare il funzionamento tecnico di Lightning Network.

Lightning Network è una rete di canali di pagamento costruita sopra il protocollo Bitcoin, con l'obiettivo di abilitare transazioni veloci e a basso costo. Consente la creazione di canali di pagamento tra i partecipanti, all'interno dei quali le transazioni possono essere effettuate quasi istantaneamente e con commissioni minime, senza dover registrare ogni transazione individualmente sulla blockchain. Così, Lightning Network cerca di migliorare la scalabilità di Bitcoin e renderlo utilizzabile per pagamenti di basso valore.

Prima di esplorare l'aspetto di "rete", è importante comprendere il concetto di canale di pagamento su Lightning, come funziona e le sue specificità. Questo è l'argomento di questo primo capitolo.

Il Concetto di Canale di Pagamento

Un canale di pagamento consente a due parti, esempio Alice e Bob, di scambiare fondi tramite Lightning Network. Ogni protagonista ha un nodo, simboleggiato da un cerchio, e il canale tra loro è rappresentato da un segmento di linea.

LNP201

Nel nostro esempio, Alice ha 100.000 satoshi dalla sua parte del canale, e Bob ne ha 30.000, per un totale di 130.000 satoshi, che costituiscono la capacità del canale.

Ma cos'è un satoshi?

Il satoshi (o "sat") è un'unità di conto su Bitcoin. Simile a un centesimo per l'euro, un satoshi è semplicemente una frazione di Bitcoin. Un satoshi equivale a 0,00000001 Bitcoin, ovvero un centomilionesimo di Bitcoin. Utilizzare il satoshi diventa sempre più pratico man mano che il valore di Bitcoin aumenta.

L'Assegnazione dei Fondi nel Canale

Ritorniamo al canale di pagamento. Il concetto chiave qui è il "lato del canale". Ogni partecipante ha fondi sul proprio lato del canale: Alice 100.000 satoshi e Bob 30.000. Come abbiamo visto, la somma di questi fondi rappresenta la capacità totale del canale, una cifra stabilita al momento della sua apertura.

LNP201

Prendiamo l'esempio di una transazione Lightning. Se Alice vuole inviare 40.000 satoshi a Bob, ciò è possibile perché lei ha fondi sufficienti (100.000 satoshi). Dopo questa transazione, Alice avrà 60.000 satoshi dal suo lato e Bob 70.000.

LNP201

La capacità del canale, fissata a 130.000 satoshi, rimane costante. Ciò che cambia è l'allocazione dei fondi. Questo sistema non permette di inviare più fondi di quanti se ne possiedano. Ad esempio, se Bob volesse rispedire 80.000 satoshi ad Alice, non potrebbe, perché ha solo 70.000.

Un altro modo per immaginare l'allocazione dei fondi è pensare a un cursore che indica dove si trovano i fondi nel canale. Inizialmente, con 100.000 satoshi per Alice e 30.000 per Bob, il cursore è logicamente dal lato di Alice. Dopo la transazione di 40.000 satoshi, il cursore si muoverà leggermente verso il lato di Bob, che ora ha 70.000 satoshi.

LNP201

Questa rappresentazione può essere utile per immaginare il bilancio dei fondi in un canale.

Le Regole Fondamentali di un Canale di Pagamento

Il primo punto da ricordare è che la capacità del canale è fissa. È un po' come il diametro di un tubo: determina la quantità massima di fondi che possono essere inviati attraverso il canale in una sola volta. Prendiamo un esempio: se Alice ha 130.000 satoshi dal suo lato, può inviare al massimo 130.000 satoshi a Bob in una singola transazione. Tuttavia, Bob può poi rispedire questi fondi ad Alice, in parte o interamente.

Ciò che è importante capire è che la capacità fissa del canale limita l'importo massimo di una singola transazione, ma non il numero totale di transazioni possibili, né il volume complessivo dei fondi scambiati all'interno del canale.

Cosa dovresti ricavare da questo capitolo?

Questa è la fine del primo capitolo, dove abbiamo gettato le basi per Lightning Network. Nei prossimi capitoli, vedremo come aprire un canale e approfondiremo i concetti qui discussi.

Bitcoin, Indirizzi, UTXO e Transazioni

0cfb7e6b-96f0-508b-9210-90bc1e28649d :::video id=75323eef-ea03-45ac-9a6e-46d73ca255de:::

Questo capitolo è un po' speciale poiché non sarà dedicato direttamente a Lightning, ma a Bitcoin. Infatti, Lightning Network è uno strato aggiuntivo su Bitcoin. È quindi essenziale comprendere alcuni concetti fondamentali di Bitcoin per afferrare correttamente il funzionamento di Lightning nei capitoli successivi. In questo capitolo, esamineremo le basi degli indirizzi di ricezione di Bitcoin, gli UTXO, così come il funzionamento delle transazioni Bitcoin.

Indirizzi Bitcoin, Chiavi Private e Chiavi Pubbliche

Un indirizzo Bitcoin è una serie di caratteri derivata da una chiave pubblica, che a sua volta è calcolata da una chiave privata. Come sicuramente saprai, è utilizzato per bloccare i bitcoin, il che equivale a riceverli nel nostro portafoglio.

La chiave privata è un elemento segreto che non dovrebbe mai essere condiviso, mentre la chiave pubblica e l'indirizzo possono essere condivisi senza rischio per la sicurezza (la loro divulgazione rappresenta solo un rischio per la tua privacy). Ecco una rappresentazione comune che adotteremo durante questo corso:

Transazioni Bitcoin: Invio di Fondi e Script

Su Bitcoin, una transazione comporta l'invio di fondi da un indirizzo all'altro. Prendiamo l'esempio di Alice che invia 0,002 bitcoin a Bob. Alice utilizza la chiave privata associata al suo indirizzo per firmare la transazione, dimostrando così di essere effettivamente in grado di spendere questi fondi. Ma cosa succede esattamente dietro questa transazione? I fondi su un indirizzo Bitcoin sono bloccati da uno script, una sorta di mini-programma che impone certe condizioni per spendere i fondi.

Lo script più comune richiede una firma con la chiave privata associata all'indirizzo. Quando Alice firma una transazione con la sua chiave privata, lei sblocca lo script che blocca i fondi, e questi possono quindi essere trasferiti. Il trasferimento di fondi comporta l'aggiunta di un nuovo script a questi fondi, stabilendo che per spenderli questa volta, sarà richiesta la firma della chiave privata di Bob.

LNP201

UTXO: Output di Transazione Non Spesi

Su Bitcoin, ciò che effettivamente scambiamo non sono direttamente i bitcoin, ma UTXO (Unspent Transaction Outputs), ovvero "gli output di transazione non spesi".

Un UTXO è una porzione di bitcoin che può avere qualsiasi valore, ad esempio, 2.000 bitcoin, 8 bitcoin, o anche 8.000 satoshi. Ogni UTXO è bloccato da uno script, e per spenderlo, si devono soddisfare le condizioni dello script, spesso una firma con la chiave privata corrispondente a un dato indirizzo di ricezione.

Gli UTXO non possono essere divisi. Ogni volta che vengono utilizzati per spendere l'importo in bitcoin che rappresentano, devono essere usati nella loro totalità. È un po' come una banconota: se hai una banconota da 10€ e devi al panettiere 5€, non puoi semplicemente tagliare la banconota a metà. Devi dargli la banconota da 10€, e lui ti darà 5€ di resto. Questo è esattamente lo stesso principio per gli UTXO su Bitcoin! Ad esempio, quando Alice sblocca uno script con la sua chiave privata, sblocca l'intero UTXO. Se desidera inviare solo una parte dei fondi rappresentati da questo UTXO a Bob, può "frammentarlo" in parti più piccole. Invierà quindi 0,0015 BTC a Bob e invierà il resto, 0,0005 BTC, a un indirizzo di resto.

Ecco un esempio di una transazione con 2 output:

LNP201

Indirizzi multi-firma

Oltre agli indirizzi semplici generati da una singola chiave pubblica, è possibile creare indirizzi multi-firma costituiti da più chiavi pubbliche. Un caso particolarmente interessante per Lightning Network è l'indirizzo multi-firma 2/2, generato da due chiavi pubbliche:

LNP201

Per spendere i fondi bloccati con questo indirizzo multi-firma 2/2, è necessario firmare con le due chiavi private associate alle chiavi pubbliche.

LNP201

Questo tipo di indirizzo rappresenta precisamente sulla blockchain di Bitcoin i canali di pagamento su Lightning Network.

Cosa dovresti ricordare da questo capitolo?

Questo capitolo su Bitcoin ci ha permesso di rivedere alcune nozioni essenziali per quanto segue. Nel prossimo capitolo, scopriremo specificamente come funziona l'apertura dei canali su Lightning Network.

Apertura e Chiusura dei Canali

Apertura del Canale

96243eb0-f6b5-5b68-af1f-fffa0cc16bfe :::video id=6098fee1-735e-4d8d-9f57-0faf5fef6d76:::

In questo capitolo, vedremo più precisamente come aprire un canale di pagamento su Lightning Network e capire il collegamento tra questa operazione e il sistema Bitcoin sottostante.

Canali Lightning

Come abbiamo visto nel primo capitolo, un canale di pagamento su Lightning può essere paragonato a un "tubo" per lo scambio di fondi tra due partecipanti (Alice e Bob nei nostri esempi). La capacità di questo canale corrisponde alla somma dei fondi disponibili su ciascun lato. Nel nostro esempio, Alice ha 100.000 satoshi e Bob ha 30.000 satoshi, dando una capacità totale di 130.000 satoshi.

LNP201

Livelli di Scambio di Informazioni

È cruciale distinguere chiaramente i diversi livelli di scambio su Lightning Network:

LNP201

È importante notare che un nodo Lightning può comunicare tramite il protocollo P2P senza aprire un canale, ma per scambiare fondi, è necessario un canale.

Passaggi per Aprire un Canale Lightning

LNP201 LNP201 LNP201 LNP201 LNP201 LNP201

Quando si considera il canale aperto?

Il canale si considera aperto una volta che la transazione di deposito è inclusa in un blocco Bitcoin e ha raggiunto una certa profondità di conferme (numero di blocchi successivi).

Cosa dovresti ricordare da questo capitolo?

Nel prossimo capitolo, esploreremo il funzionamento tecnico di una transazione all'interno di un canale sulla rete Lightning.

commitment transaction

7d3fd135-129d-5c5a-b306-d5f2f1e63340 :::video id=c17454f3-14c5-47a0-8c9c-42ee12932bd3:::

In questo capitolo, scopriremo il funzionamento tecnico di una transazione all'interno di un canale sulla rete Lightning, ovvero quando i fondi vengono spostati da un lato all'altro del canale.

Promemoria del ciclo di vita del canale

Come visto in precedenza, un canale Lightning inizia con un'apertura tramite una transazione Bitcoin. Il canale può essere chiuso in qualsiasi momento, anch'esso tramite una transazione Bitcoin. Tra questi due momenti, un numero quasi infinito di transazioni può essere eseguito all'interno del canale, senza passare attraverso la blockchain di Bitcoin. Vediamo cosa succede durante una transazione nel canale.

LNP201

Lo stato iniziale del canale

Al momento dell'apertura del canale, Alice ha depositato 130.000 satoshi sull'indirizzo multi-firma del canale. Pertanto, nello stato iniziale, tutti i fondi sono dalla parte di Alice. Prima di aprire il canale, Alice ha anche fatto firmare a Bob una transazione di prelievo, che le avrebbe permesso di recuperare i suoi fondi se avesse desiderato chiudere il canale.

LNP201

Transazioni non pubblicate: Le commitment transaction

Quando Alice effettua una transazione nel canale per inviare fondi a Bob, viene creata una nuova transazione Bitcoin per riflettere questo cambiamento nella distribuzione dei fondi. Questa transazione, chiamata commitment transaction, non viene pubblicata sulla blockchain ma rappresenta il nuovo stato del canale a seguito della transazione Lightning.

Prendiamo un esempio con Alice che invia 30.000 satoshi a Bob:

LNP201

Processo di Trasferimento: L'Invoice

Quando Bob desidera ricevere fondi, invia ad Alice una invoice per 30.000 satoshi. Alice procede quindi a pagare avviando il trasferimento all'interno del canale. Come abbiamo visto, questo processo si basa sulla creazione e firma di una nuova commitment transaction.

Ogni commitment transaction rappresenta la nuova distribuzione dei fondi nel canale dopo il trasferimento. In questo esempio, dopo la transazione, Bob ha 30.000 satoshi e Alice ha 100.000 satoshi. Se uno dei due partecipanti decidesse di pubblicare questa commitment transaction sulla blockchain, ciò risulterebbe nella chiusura del canale e i fondi sarebbero distribuiti secondo questa ultima distribuzione.

LNP201

Nuovo Stato Dopo una Seconda Transazione

Prendiamo un altro esempio: dopo la prima transazione in cui Alice ha inviato 30.000 satoshi a Bob, Bob decide di inviare 10.000 satoshi indietro ad Alice. Questo crea un nuovo stato del canale. La nuova commitment transaction rappresenterà questa distribuzione aggiornata:

LNP201

Ancora una volta, questa transazione non viene pubblicata sulla blockchain ma può essere pubblicata in qualsiasi momento nel caso in cui il canale venga chiuso.

In sintesi, quando i fondi vengono trasferiti all'interno di un canale Lightning:

Tuttavia, questo sistema presenta una potenziale falla, che affronteremo nel prossimo capitolo. Vedremo come ciascun partecipante può proteggersi contro un tentativo di truffa da parte dell'altra parte.

revocation key

f2f61e5b-badb-5947-9a81-7aa530b44e59 :::video id=1d850f23-eff1-4725-b284-ce12456a2c26::: In questo capitolo, approfondiremo il funzionamento delle transazioni sulla Lightning Network discutendo i meccanismi in atto per proteggersi dalle truffe, assicurando che ciascuna parte rispetti le regole all'interno di un canale.

Promemoria: commitment transaction

Come visto in precedenza, le transazioni su Lightning si basano su commitment transaction non pubblicate. Queste transazioni riflettono l'attuale distribuzione dei fondi nel canale. Quando viene effettuata una nuova transazione Lightning, viene creata e firmata da entrambe le parti una nuova commitment transaction per riflettere il nuovo stato del canale.

Prendiamo un esempio semplice:

LNP201

In qualsiasi momento, entrambe le parti possono pubblicare la più recente commitment transaction firmata per chiudere il canale e recuperare i propri fondi.

Il Problema: Truffare Pubblicando una Vecchia Transazione

Un potenziale problema sorge se una delle parti decide di truffare pubblicando una vecchia commitment transaction. Ad esempio, Alice potrebbe pubblicare una vecchia commitment transaction in cui aveva 100.000 satoshi, anche se ora ne ha solo 60.000 in realtà. Ciò le permetterebbe di rubare 40.000 satoshi a Bob.

LNP201

Ancora peggio, Alice potrebbe pubblicare la primissima transazione di prelievo, quella prima che il canale fosse aperto, dove aveva 130.000 satoshi, e così rubare tutti i fondi del canale.

LNP201

Soluzione: revocation key e Timelock

Per prevenire questo tipo di truffa da parte di Alice, su Lightning Network, vengono aggiunti meccanismi di sicurezza alle commitment transaction:

LNP201

Analizziamo insieme il funzionamento di questo meccanismo.

Processo di Aggiornamento della Transazione

Quando Alice e Bob aggiornano lo stato del canale con una nuova transazione Lightning, scambiano in anticipo i rispettivi segreti per la precedente commitment transaction (quella che diventerà obsoleta e potrebbe permettere a uno di loro di barare). Questo significa che, nel nuovo stato del canale:

Prendiamo un esempio per capire bene questo processo:

LNP201 LNP201 LNP201

Anche se, in questo caso, Bob non ha interesse economico a cercare di barare, se lo fa comunque, Alice beneficia anche della protezione simmetrica che le offre le stesse garanzie.

Cosa dovresti ricavare da questo capitolo?

Le commitment transaction su Lightning Network includono meccanismi di sicurezza che riducono sia il rischio di barare sia gli incentivi a farlo. Prima di firmare una nuova commitment transaction, Alice e Bob scambiano i rispettivi segreti per le precedenti commitment transaction. Se Alice prova a pubblicare una vecchia commitment transaction, Bob può usare la revocation key per recuperare tutti i fondi prima che Alice possa (perché è bloccata dal timelock), il che la punisce per aver tentato di barare.

Questo sistema di sicurezza garantisce che i partecipanti aderiscano alle regole di Lightning Network, e non possano trarre profitto dalla pubblicazione di vecchie commitment transaction.

A questo punto della formazione, ora sai come vengono aperti i canali Lightning e come funzionano le transazioni all'interno di questi canali. Nel prossimo capitolo, scopriremo i diversi modi per chiudere un canale e recuperare i tuoi bitcoin sulla blockchain principale.

Chiusura del Canale

29a72223-2249-5400-96f0-3756b1629bc2 :::video id=4d8ad4e6-32ff-46d3-bd17-343929aa863b:::

In questo capitolo, discuteremo della chiusura di un canale su Lightning Network, che viene effettuata tramite una transazione Bitcoin, proprio come l'apertura di un canale. Dopo aver visto come funzionano le transazioni all'interno di un canale, è ora il momento di vedere come chiudere un canale e recuperare i fondi sulla blockchain di Bitcoin.

Promemoria del ciclo di vita del canale

Il ciclo di vita di un canale inizia con la sua apertura, tramite una transazione Bitcoin, poi vengono effettuate transazioni Lightning al suo interno, e infine, quando le parti desiderano recuperare i loro fondi, il canale viene chiuso tramite una seconda transazione Bitcoin. Le transazioni intermedie effettuate su Lightning sono rappresentate da commitment transaction non pubblicate.

LNP201

I tre tipi di chiusura del canale

Ci sono tre modi principali per chiudere questo canale, che possono essere chiamati il buono, il brutto e il truffatore (ispirati da Andreas Antonopoulos in Mastering the Lightning Network):

Facciamo un esempio:

LNP201

Il Buono: la chiusura cooperativa

In una chiusura cooperativa, Alice e Bob concordano di chiudere il canale. Ecco come procede:

LNP201

Per esempio, se Alice possiede 100.000 satoshi e Bob 30.000 satoshi, la transazione di chiusura invierà 100.000 satoshi all'indirizzo di Alice e 30.000 satoshi all'indirizzo di Bob, senza vincoli di timelock. Una volta che questa transazione è firmata da entrambe le parti, viene pubblicata da Alice. Una volta che la transazione è confermata sulla blockchain di Bitcoin, il canale Lightning viene ufficialmente chiuso.

LNP201

La chiusura cooperativa è il metodo preferito di chiusura perché è veloce (nessun timelock) e le commissioni di transazione sono regolate in base alle attuali condizioni di mercato di Bitcoin. Questo evita di pagare troppo poco, il che potrebbe rischiare di bloccare la transazione nella mempool, o di pagare inutilmente troppo, portando a una perdita finanziaria non necessaria per i partecipanti.

Il Lato Negativo: la chiusura forzata

Quando il nodo di Alice invia un messaggio a quello di Bob chiedendo una chiusura cooperativa, se lui non risponde (per esempio, a causa di un'interruzione di internet o di un problema tecnico), Alice può procedere con una chiusura forzata pubblicando l'ultima commitment transaction firmata. In questo caso, Alice pubblicherà semplicemente l'ultima commitment transaction, che riflette lo stato del canale al momento dell'ultima transazione Lightning avvenuta con la corretta distribuzione dei fondi.

LNP201

Questa transazione include un timelock per i fondi di Alice, rendendo la chiusura più lenta.

LNP201

Inoltre, le commissioni della commitment transaction possono essere inadeguate al momento della chiusura, poiché sono state impostate quando la transazione è stata creata, talvolta diversi mesi prima. Generalmente, i clienti Lightning sovrastimano le commissioni per evitare problemi futuri, ma questo può portare a commissioni eccessive, o al contrario troppo basse.

In sintesi, la chiusura forzata è un'opzione dell'ultimo minuto quando la controparte non risponde più. È più lenta e meno economica della chiusura cooperativa. Pertanto, dovrebbe essere evitata il più possibile.

Il Truffatore: l'imbroglio

Infine, una chiusura con imbroglio si verifica quando una delle parti cerca di pubblicare una vecchia commitment transaction, spesso nel momento in cui detiene più fondi di quanto dovrebbe. Per esempio, Alice potrebbe pubblicare una vecchia transazione dove possedeva 120.000 satoshi, mentre ora ne possiede effettivamente solo 100.000.

LNP201

Bob, per prevenire questo imbroglio, monitora la blockchain di Bitcoin e la sua mempool per assicurarsi che Alice non pubblichi una vecchia transazione. Se Bob rileva un tentativo di imbroglio, può usare la revocation key per recuperare i fondi di Alice e punirla prendendo l'intera somma del canale. Poiché Alice è bloccata dal timelock sul suo output, Bob ha il tempo di spenderlo senza un timelock dalla sua parte per recuperare l'intera somma su un indirizzo di sua proprietà.

LNP201

Ovviamente, barare può potenzialmente avere successo se Bob non agisce entro il tempo imposto dal timelock sull'output di Alice. In questo caso, l'output di Alice viene sbloccato, permettendole di consumarlo per creare un nuovo output verso un indirizzo che controlla.

Cosa dovresti ricavare da questo capitolo?

Ci sono tre modi per chiudere un canale:

Una Rete di Liquidità

Lightning Network

45a7252c-fa4f-554b-b8bb-47449532918e :::video id=38419c23-5592-4573-b0a7-84824a5bfb77:::

In questo capitolo, esploreremo come i pagamenti su Lightning Network possono raggiungere un destinatario anche se non sono direttamente connessi tramite un canale di pagamento. Lightning è, infatti, una rete di canali di pagamento, che consente di inviare fondi a un nodo distante attraverso i canali di altri partecipanti. Scopriremo come vengono instradati i pagamenti attraverso la rete, come si muove la liquidità tra i canali e come vengono calcolate le commissioni sulle transazioni.

La Rete dei Canali di Pagamento

Su Lightning Network, una transazione corrisponde a un trasferimento di fondi tra due nodi. Come visto nei capitoli precedenti, è necessario aprire un canale con qualcuno per eseguire transazioni Lightning. Questo canale consente un numero quasi infinito di transazioni off-chain prima di chiuderlo per recuperare il saldo on-chain. Tuttavia, questo metodo ha lo svantaggio di richiedere un canale diretto con l'altra persona per ricevere o inviare fondi, il che implica una transazione di apertura e una di chiusura per ogni canale. Se prevedo di effettuare un gran numero di pagamenti con questa persona, aprire e chiudere un canale diventa conveniente. Al contrario, se ho bisogno di eseguire solo poche transazioni Lightning, aprire un canale diretto non è vantaggioso, poiché mi costerebbe 2 transazioni on-chain per un numero limitato di transazioni off-chain. Questo caso potrebbe verificarsi, ad esempio, quando si desidera pagare con Lightning presso un commerciante senza pianificare di tornare.

Per risolvere questo problema, Lightning Network consente di instradare un pagamento attraverso diversi canali e nodi intermedi, consentendo così una transazione senza un canale diretto con l'altra persona.

Per esempio, immagina che:

LNP201

Se Alice vuole inviare fondi a Bob senza aprire un canale diretto con lui, dovrà passare attraverso Suzie, e ogni canale dovrà adeguare la liquidità da ciascun lato. I satoshi inviati rimangono all'interno dei rispettivi canali; non "attraversano" effettivamente i canali, ma il trasferimento avviene tramite un adeguamento della liquidità interna in ogni canale.

Supponiamo che Alice voglia inviare 50.000 satoshi a Bob:

LNP201

Così, il pagamento viene instradato a Bob attraverso un movimento di liquidità in ogni canale. Al termine dell'operazione, Alice finisce con 50.000 satoshi. Ha effettivamente trasferito 50.000 satoshi poiché inizialmente ne aveva 100.000. Bob, dal canto suo, finisce con un ulteriore 50.000 satoshi. Per Suzie (il nodo intermedio), questa operazione è neutra: inizialmente, aveva 30.000 satoshi nel suo canale con Alice e 250.000 satoshi nel suo canale con Bob, per un totale di 280.000 satoshi. Dopo l'operazione, detiene 80.000 satoshi nel suo canale con Alice e 200.000 satoshi nel suo canale con Bob, che è la stessa somma di partenza. Questo trasferimento è quindi limitato dalla liquidità disponibile nella direzione del trasferimento.

Calcolo del Percorso e Limiti di Liquidità

Prendiamo un esempio teorico di un'altra rete con:

LNP201

Il massimo che Alice può inviare a Bob in questa configurazione è 90.000 satoshi, poiché è limitata dalla più piccola liquidità disponibile nel canale da Suzie a Carol. Nella direzione opposta (da Bob ad Alice), nessun pagamento è possibile perché il lato di Suzie nel canale con Alice non contiene satoshi. Pertanto, non c'è nessun percorso utilizzabile per un trasferimento in questa direzione. Alice invia 40.000 satoshi a Bob attraverso i canali:

LNP201

I satoshi inviati in ogni canale rimangono nel canale, quindi i satoshi inviati da Carol a Bob non sono gli stessi di quelli inviati da Alice a Suzie. Il trasferimento avviene solo regolando la liquidità all'interno di ogni canale. Inoltre, la capacità totale dei canali rimane invariata.

LNP201

Come nell'esempio precedente, dopo la transazione, il nodo sorgente (Alice) ha 40.000 satoshi in meno. I nodi intermedi (Suzie e Carol) mantengono lo stesso importo totale, rendendo l'operazione neutra per loro. Infine, il nodo di destinazione (Bob) riceve un ulteriore 40.000 satoshi.

Il ruolo dei nodi intermedi è quindi molto importante nel funzionamento di Lightning Network. Essi facilitano i trasferimenti offrendo molteplici percorsi per i pagamenti. Per incoraggiare questi nodi a fornire la loro liquidità e partecipare all'instradamento dei pagamenti, vengono pagate loro delle commissioni di routing.

Commissioni di Routing

I nodi intermedi applicano delle commissioni per permettere ai pagamenti di passare attraverso i loro canali. Queste commissioni sono stabilite da ogni nodo per ogni canale. Le commissioni consistono di 2 elementi:

Per esempio, per un canale tra Alice e Suzie, potremmo avere:

LNP201

Per comprendere meglio come funzionano le commissioni, studiamo la stessa rete Lightning di prima, ma ora con le seguenti commissioni di routing:

LNP201

Per lo stesso pagamento di 40.000 satoshi a Bob, Alice dovrà inviare un po' di più, poiché ogni nodo intermediario tratterrà le proprie commissioni:

f*{\text{Carol-Bob}} = \text{commissione base} + \left(\frac{\text{ppm} \times \text{importo}}{10^6}\right)
f*{\text{Carol-Bob}} = 1 + \frac{1 \times 40000}{10^6} = 1 + 0,04 = 1,04 \text{ sats}
f*{\text{Suzie-Carol}} = \text{commissione base} + \left(\frac{\text{ppm} \times \text{importo}}{10^6}\right)
f*{\text{Suzie-Carol}} = 0 + \frac{200 \times 40001,04}{10^6} = 0 + 8,0002 \approx 8 \text{ sats}

Le commissioni totali per questo pagamento su questo percorso sono quindi 9,04 satoshi. Così, Alice deve inviare 40.009,04 satoshi affinché Bob riceva esattamente 40.000 satoshi.

LNP201

La liquidità viene quindi aggiornata:

LNP201

Onion Routing

Per instradare un pagamento dal mittente al destinatario, la rete Lightning utilizza un metodo chiamato "onion routing". A differenza dell'instradamento dei dati classici, dove ogni router decide la direzione dei dati in base alla loro destinazione, l'onion routing funziona diversamente:

In questo capitolo, abbiamo esplorato l'instradamento dei pagamenti su Lightning Network. Ma sorge una domanda: cosa impedisce ai nodi intermedi di accettare un pagamento in entrata senza inoltrarlo alla destinazione successiva, con l'obiettivo di intercettare la transazione? Questo è precisamente il ruolo degli HTLC che studieremo nel capitolo seguente.

HTLC – Hashed Time Locked Contract

4369b85a-1365-55d8-99e1-509088210116 :::video id=6f204b92-55a5-4939-9440-7c5b96a297bf:::

In questo capitolo, scopriremo come Lightning consente ai pagamenti di transitare attraverso nodi intermedi senza la necessità di fidarsi di loro, grazie agli HTLC (Hashed Time-Locked Contracts). Questi contratti intelligenti assicurano che ciascun nodo intermedio riceverà i fondi dal suo canale solo se inoltra il pagamento al destinatario finale, altrimenti, il pagamento non verrà convalidato.

Il problema che sorge per l'instradamento dei pagamenti è quindi la necessaria fiducia nei nodi intermedi, e tra i nodi intermedi stessi. Per illustrare questo, rivediamo il nostro esempio semplificato di rete Lightning con 3 nodi e 2 canali:

Alice vuole inviare 40.000 satoshi a Bob ma non ha un canale diretto con lui e non desidera aprirne uno. Cerca quindi una rotta e decide di passare attraverso il nodo di Suzie.

LNP201

Se Alice invia ingenuamente 40.000 satoshi a Suzie sperando che Suzie trasferisca questa somma a Bob, Suzie potrebbe tenere i fondi per sé e non trasmettere nulla a Bob.

LNP201

Per evitare questa situazione, su Lightning, utilizziamo gli HTLC (Hashed Time-Locked Contracts), che rendono il pagamento al nodo intermedio condizionale, nel senso che Suzie deve soddisfare determinate condizioni per accedere ai fondi di Alice e trasferirli a Bob.

Come Funzionano gli HTLC

Un HTLC è un contratto speciale basato su due principi:

Ecco come funziona questo processo nel nostro esempio con Alice, Suzie e Bob:

LNP201

Creazione del segreto: Bob genera un segreto casuale noto come s (la preimmagine) e calcola il suo hash noto come r con la funzione hash indicata come h. Abbiamo:

r = h(s)

L'uso di una funzione hash rende impossibile trovare s avendo solo h(s), ma se s è fornito, è facile verificare che corrisponde a h(s).

LNP201

Invio della richiesta di pagamento: Bob invia una invoice ad Alice chiedendo un pagamento. Questa invoice include in particolare l'hash r.

LNP201

Invio del pagamento condizionale: Alice invia un HTLC di 40.000 satoshi a Suzie. La condizione affinché Suzie riceva questi fondi è che fornisca ad Alice un segreto s' che soddisfa la seguente equazione:

h(s') = r
LNP201

Trasferimento dell'HTLC al destinatario finale: Suzie, per ottenere i 40.000 satoshi da Alice, deve trasferire un HTLC simile di 40.000 satoshi a Bob, che ha la stessa condizione, ovvero che deve fornire a Suzie un segreto s' che soddisfa l'equazione:

h(s') = r
LNP201

Validazione tramite il segreto s: Bob fornisce s a Suzie per ricevere i 40.000 satoshi promessi nell'HTLC. Con questo segreto, Suzie può quindi sbloccare l'HTLC di Alice e ottenere i 40.000 satoshi da Alice. Il pagamento viene quindi correttamente instradato a Bob.

LNP201

Questo processo impedisce a Suzie di trattenere i fondi di Alice senza completare il trasferimento a Bob, poiché deve inviare il pagamento a Bob per ottenere il segreto s e quindi sbloccare l'HTLC di Alice. L'operazione rimane la stessa anche se il percorso include diversi nodi intermedi: si tratta semplicemente di ripetere i passaggi di Suzie per ogni nodo intermedio. Ogni nodo è protetto dalle condizioni degli HTLC, perché lo sblocco dell'ultimo HTLC da parte del destinatario attiva automaticamente lo sblocco di tutti gli altri HTLC in cascata.

Scadenza e gestione degli HTLC in caso di problemi

Se durante il processo di pagamento, uno dei nodi intermedi, o il nodo destinatario, smette di rispondere, specialmente in caso di interruzione di internet o di corrente, allora il pagamento non può essere completato, perché il segreto necessario per sbloccare gli HTLC non viene trasmesso. Prendendo il nostro esempio con Alice, Suzie e Bob, questo problema si verifica, ad esempio, se Bob non trasmette il segreto s a Suzie. In questo caso, tutti gli HTLC a monte del percorso sono bloccati, e anche i fondi che assicurano.

LNP201

Per evitare ciò, gli HTLC su Lightning hanno una scadenza che consente di rimuovere l'HTLC se non viene completato dopo un certo tempo. La scadenza segue un ordine specifico poiché inizia prima con l'HTLC più vicino al destinatario, e poi si sposta progressivamente fino all'emittente della transazione. Nel nostro esempio, se Bob non dà mai il segreto s a Suzie, ciò farebbe scadere prima l'HTLC di Suzie verso Bob.

LNP201

Poi l'HTLC da Alice a Suzie.

LNP201

Se l'ordine di scadenza fosse invertito, Alice potrebbe recuperare il suo pagamento prima che Suzie possa proteggersi da potenziali truffe. Infatti, se Bob tornasse a reclamare il suo HTLC mentre Alice ha già rimosso il suo, Suzie sarebbe in svantaggio. Questo ordine cascata di scadenza degli HTLC assicura quindi che nessun nodo intermediario subisca perdite ingiuste.

Rappresentazione degli HTLC nelle commitment transaction

Le commitment transaction rappresentano gli HTLC in modo tale che le condizioni che impongono su Lightning possano essere trasferite a Bitcoin in caso di chiusura forzata del canale durante la durata di un HTLC. Come promemoria, le commitment transaction rappresentano lo stato attuale del canale tra i due utenti e consentono una chiusura forzata unilaterale in caso di problemi. Con ogni nuovo stato del canale, vengono create 2 commitment transaction: una per ciascuna parte. Rivisitiamo il nostro esempio con Alice, Suzie e Bob, ma guardiamo più da vicino cosa succede a livello di canale tra Alice e Suzie quando viene creato l'HTLC.

LNP201

Prima dell'inizio del pagamento di 40.000 satoshi tra Alice e Bob, Alice ha 100.000 satoshi nel suo canale con Suzie, mentre Suzie ne detiene 30.000. Le loro commitment transaction sono le seguenti:

LNP201

Alice ha appena ricevuto la invoice di Bob, che contiene in modo notevole r, l'hash del segreto. Può quindi costruire un HTLC di 40.000 satoshi con Suzie. Questo HTLC è rappresentato nelle ultime commitment transaction come un output chiamato "HTLC Out" dal lato di Alice, poiché i fondi sono in uscita, e "HTLC In" dal lato di Suzie, poiché i fondi sono in entrata.

LNP201

Questi output associati all'HTLC condividono esattamente le stesse condizioni, ovvero:

Queste condizioni si applicano solo se il canale viene chiuso (cioè, una commitment transaction viene pubblicata sulla blockchain) mentre l'HTLC è ancora attivo su Lightning, il che significa che il pagamento tra Alice e Bob non è ancora stato finalizzato e gli HTLC non sono ancora scaduti. Grazie a queste condizioni, Suzie può recuperare i 40.000 satoshi dell'HTLC che le sono dovuti fornendo s. Altrimenti, Alice recupera i fondi dopo la scadenza del timelock, perché se Suzie non conosce s, significa che non ha trasferito i 40.000 satoshi a Bob e, quindi, i fondi di Alice non le sono dovuti.

Inoltre, se il canale viene chiuso mentre sono in sospeso diversi HTLC, ci saranno tanti output aggiuntivi quanti sono gli HTLC in corso. Se il canale non viene chiuso, allora dopo la scadenza o il successo del pagamento Lightning, vengono create nuove commitment transaction per riflettere il nuovo stato stabile del canale, cioè senza HTLC in sospeso. Gli output relativi agli HTLC possono quindi essere rimossi dalle commitment transaction.

LNP201

Infine, nel caso di una chiusura cooperativa del canale mentre un HTLC è attivo, Alice e Suzie smettono di accettare nuovi pagamenti e attendono la risoluzione o la scadenza degli HTLC in corso. Ciò consente loro di pubblicare una transazione di chiusura più leggera, senza gli output relativi agli HTLC, riducendo così le commissioni ed evitando l'attesa per un possibile timelock.

Cosa dovresti ricavare da questo capitolo?

Gli HTLC consentono il routing dei pagamenti Lightning attraverso più nodi senza doverli fidare. Ecco i punti chiave da ricordare:

Nel prossimo capitolo, scopriremo come un nodo che emette una transazione Lightning trova e seleziona le rotte per il suo pagamento per raggiungere il nodo destinatario.

Alla Ricerca della Tua Strada

7e2ae959-c2a1-512e-b5d6-8fd962e819da :::video id=e5baa834-111d-46f5-a28b-3538bed2bbb0:::

Nei capitoli precedenti, abbiamo visto come utilizzare i canali di altri nodi per instradare i pagamenti e raggiungere un nodo senza essere direttamente connessi ad esso tramite un canale. Abbiamo anche discusso su come garantire la sicurezza del trasferimento senza fidarsi dei nodi intermedi. In questo capitolo, ci concentreremo sul trovare la migliore rotta possibile per raggiungere un nodo target.

Il Problema del Routing in Lightning

Come abbiamo visto, in Lightning, è il nodo che invia il pagamento che deve calcolare l'intera rotta verso il destinatario, perché utilizziamo un sistema di routing a cipolla. I nodi intermedi non conoscono né il punto di origine né la destinazione finale. Sanno solo da dove proviene il pagamento e a quale nodo devono trasferirlo successivamente. Ciò significa che il nodo mittente deve mantenere una topologia locale dinamica della rete, con i nodi Lightning esistenti e i canali tra ciascuno, tenendo conto delle aperture, delle chiusure e degli aggiornamenti di stato.

LNP201

Anche con questa topologia della rete Lightning, ci sono informazioni essenziali per il routing che rimangono inaccessibili al nodo mittente, ovvero la distribuzione esatta della liquidità nei canali in un dato momento. Infatti, ogni canale mostra solo la sua capacità totale, ma la distribuzione interna dei fondi è nota solo ai due nodi partecipanti. Questo pone sfide per un routing efficiente, poiché il successo del pagamento dipende notevolmente dal fatto che il suo importo sia inferiore alla liquidità più bassa sulla rotta scelta. Tuttavia, le liquidità non sono tutte visibili al nodo mittente.

LNP201

Aggiornamento della Mappa della Rete

Per mantenere aggiornata la loro mappa della rete, i nodi scambiano regolarmente messaggi attraverso un algoritmo chiamato "gossip". Si tratta di un algoritmo distribuito utilizzato per diffondere informazioni in modo epidemico a tutti i nodi della rete, che consente lo scambio e la sincronizzazione dello stato globale dei canali in pochi cicli di comunicazione. Ogni nodo propaga le informazioni a uno o più vicini scelti a caso o meno, questi, a loro volta, propagano le informazioni ad altri vicini e così via fino a raggiungere uno stato sincronizzato a livello globale.

I 2 messaggi principali scambiati tra i nodi Lightning sono i seguenti:

I nodi Lightning monitorano anche la blockchain di Bitcoin per rilevare le transazioni di chiusura del canale. Il canale chiuso viene quindi rimosso dalla mappa poiché non può più essere utilizzato per instradare i nostri pagamenti.

Instradamento di un Pagamento

Prendiamo l'esempio di una piccola Rete Lightning con 7 nodi: Alice, Bob, 1, 2, 3, 4 e 5. Immaginiamo che Alice voglia inviare un pagamento a Bob ma debba passare attraverso nodi intermedi.

LNP201

Ecco la distribuzione attuale dei fondi in questi canali:

LNP201

Per effettuare un pagamento di 100.000 sats da Alice a Bob, le opzioni di instradamento sono limitate dalla liquidità disponibile in ciascun canale. Il percorso ottimale per Alice, basato sulla distribuzione di liquidità conosciuta, potrebbe essere la sequenza Alice → 1 → 2 → 4 → 5 → Bob:

LNP201

Ma poiché Alice non conosce la distribuzione esatta dei fondi in ciascun canale, deve stimare il percorso ottimale probabilisticamente, tenendo conto dei seguenti criteri:

Analizzando questi criteri, il nodo mittente può testare le rotte più probabili e tentare di ottimizzarle. Nel nostro esempio, Alice potrebbe classificare le migliori rotte come segue:

Esecuzione del Pagamento

Alice decide di testare la sua prima rotta (Alice → 1 → 2 → 5 → Bob). Invia quindi un HTLC di 100.000 sats al nodo 1. Questo nodo verifica di avere sufficiente liquidità con il nodo 2 e continua la trasmissione. Il nodo 2 riceve l'HTLC dal nodo 1, ma si rende conto di non avere abbastanza liquidità nel suo canale con il nodo 5 per instradare un pagamento di 100.000 sats. Invia quindi un messaggio di errore al nodo 1, che lo trasmette ad Alice. Questa rotta è fallita.

LNP201

Alice tenta quindi di instradare il suo pagamento utilizzando la sua seconda rotta (Alice → 1 → 2 → 4 → 5 → Bob). Invia un HTLC di 100.000 sats al nodo 1, che lo trasmette al nodo 2, poi al nodo 4, al nodo 5 e infine a Bob. Questa volta, la liquidità è sufficiente e la rotta è funzionale. Ogni nodo sblocca il suo HTLC in cascata utilizzando il preimage fornito da Bob (il segreto s), che consente di finalizzare con successo il pagamento di Alice a Bob.

LNP201

La ricerca di una rotta viene condotta come segue: il nodo mittente inizia identificando le rotte migliori possibili, poi tenta i pagamenti successivamente fino a trovare una rotta funzionale.

È importante notare che Bob può fornire ad Alice informazioni nella invoice per facilitare l'instradamento. Ad esempio, può indicare canali vicini con sufficiente liquidità o rivelare l'esistenza di canali privati. Queste indicazioni permettono ad Alice di evitare rotte con poche possibilità di successo e di tentare per prime i percorsi raccomandati da Bob.

Cosa dovresti ricavare da questo capitolo?

Nel capitolo seguente, studieremo specificamente il funzionamento delle fatture, oltre ad alcuni altri strumenti utilizzati sulla Lightning Network.

Gli Strumenti della Lightning Network

invoice, LNURL e Keysend

e34c7ecd-2327-52e3-b61e-c837d9e5e8b0 :::video id=309c3412-506e-4189-ad46-5e5088c55008::: In questo capitolo, esamineremo più da vicino il funzionamento delle fatture Lightning, ovvero le richieste di pagamento inviate dal nodo destinatario al nodo mittente. L'obiettivo è capire come pagare e ricevere pagamenti su Lightning. Discuteremo anche di 2 alternative alle fatture classiche: LNURL e Keysend.

LNP201

La Struttura delle Fatture Lightning

Come spiegato nel capitolo sugli HTLCs, ogni pagamento inizia con la generazione di una invoice da parte del destinatario. Questa invoice viene poi trasmessa al pagatore (tramite un codice QR o copiando e incollando) per avviare il pagamento. Una invoice consiste di due parti principali:

La struttura tipica di una invoice inizia con un identificatore ln per "Lightning", seguito da bc per Bitcoin, poi l'importo della invoice. Un separatore 1 distingue la parte leggibile dall'uomo dalla parte dei dati (payload).

Prendiamo come esempio la seguente invoice:

lnbc100u1p0x7x7dpp5l7r9y50wrzz0lwnsqgxdks50lxtwkl0mhd9lslr4rcgdtt2n6lssp5l3pkhdx0cmc9gfsqvw5xjhph84my2frzjqxqyz5vq9qsp5k4mkzv5jd8u5n89d2yc50x7ptkl0zprx0dfjh3km7g0x98g70hsqq7sqqqgqqyqqqqlgqqvnv2k5ehwnylq3rhpd9g2y0sq9ujyxsqqypjqqyqqqqqqqqqqqsqqqqq9qsq3vql5f6e45xztgj7y6xw6ghrcz3vmh8msrz8myvhsarxg42ce9yyn53lgnryx0m6qqld8fql

Possiamo già dividerla in 2 parti. Prima, c'è la Parte Leggibile dall'Uomo:

lnbc100u

Poi la parte destinata al payload:

p0x7x7dpp5l7r9y50wrzz0lwnsqgxdks50lxtwkl0mhd9lslr4rcgdtt2n6lssp5l3pkhdx0cmc9gfsqvw5xjhph84my2frzjqxqyz5vq9qsp5k4mkzv5jd8u5n89d2yc50x7ptkl0zprx0dfjh3km7g0x98g70hsqq7sqqqgqqyqqqqlgqqvnv2k5ehwnylq3rhpd9g2y0sq9ujyxsqqypjqqyqqqqqqqqqqqsqqqqq9qsq3vql5f6e45xztgj7y6xw6ghrcz3vmh8msrz8myvhsarxg42ce9yyn53lgnryx0m6qqld8fql

Le due parti sono separate da un 1. Questo separatore è stato scelto invece di un carattere speciale per permettere un facile copia-incolla dell'intera invoice con un doppio clic. Nella prima parte, possiamo vedere che:

Per designare l'importo del pagamento, questo è espresso in sottounità di bitcoin. Ecco le unità utilizzate:

1 \text{ mBTC} = 10^{-3} \text{ BTC} = 10^5 \text{ satoshi}
1 \ \mu\text{BTC} = 10^{-6} \text{ BTC} = 100 \text{ satoshi}
1 \text{ nBTC} = 10^{-9} \text{ BTC} = 0.1 \text{ satoshi}
1 \text{ pBTC} = 10^{-12} \text{ BTC} = 0.0001 \text{ satoshi}

Il Payload di una invoice

Il payload di una invoice include diverse informazioni necessarie per l'elaborazione del pagamento:

Le fatture vengono poi codificate in bech32, lo stesso formato utilizzato per gli indirizzi Bitcoin SegWit (formato che inizia con bc1).

LNURL Prelievo

In una transazione tradizionale, come un acquisto in negozio, viene generata una invoice per l'importo totale da pagare. Una volta presentata la invoice (sotto forma di codice QR o stringa di caratteri), il cliente può scansionarla e finalizzare la transazione. Il pagamento segue quindi il processo tradizionale che abbiamo studiato nella sezione precedente. Tuttavia, questo processo può talvolta essere molto ingombrante per l'esperienza utente, poiché richiede al destinatario di inviare informazioni al mittente tramite la invoice. Per certe situazioni, come il prelievo di bitcoin da un servizio online, il processo tradizionale è troppo ingombrante. In tali casi, la soluzione di prelievo LNURL semplifica questo processo visualizzando un codice QR che il portafoglio del destinatario scansiona per creare automaticamente la invoice. Il servizio paga quindi la invoice e l'utente vede semplicemente un prelievo istantaneo.

LNP201

LNURL è un protocollo di comunicazione che specifica un insieme di funzionalità progettate per semplificare le interazioni tra nodi Lightning e clienti, così come applicazioni di terze parti. Il prelievo LNURL, come abbiamo appena visto, è quindi solo un esempio tra altre funzionalità. Questo protocollo si basa su HTTP e consente la creazione di link per varie operazioni, come una richiesta di pagamento, una richiesta di prelievo o altre funzionalità che migliorano l'esperienza utente. Ogni LNURL è un URL codificato in bech32 con il prefisso lnurl, che, una volta scansionato, innesca una serie di azioni automatiche sul portafoglio Lightning. Ad esempio, la funzionalità LNURL-withdraw (LUD-03) consente di prelevare fondi da un servizio scansionando un codice QR, senza la necessità di generare manualmente una invoice. Allo stesso modo, LNURL-auth (LUD-04) consente l'accesso ai servizi online utilizzando una chiave privata sul proprio portafoglio Lightning invece di una password.

Inviare un pagamento Lightning senza invoice: Keysend

Un altro caso interessante è il trasferimento di fondi senza aver ricevuto una invoice in precedenza, noto come "Keysend". Questo protocollo consente di inviare fondi aggiungendo un preimmagine nei dati di pagamento crittografati, accessibile solo dal destinatario. Questo preimmagine consente al destinatario di sbloccare l'HTLC, recuperando così i fondi senza aver generato una invoice in precedenza.

Per semplificare, in questo protocollo, è il mittente a generare il segreto utilizzato negli HTLC, piuttosto che il destinatario. Praticamente, ciò consente al mittente di effettuare un pagamento senza aver dovuto interagire con il destinatario in precedenza.

LNP201

Cosa dovresti ricavare da questo capitolo?

Nel capitolo seguente, vedremo come un operatore di nodo può gestire la liquidità nei propri canali, per non essere mai bloccato e essere sempre in grado di inviare e ricevere pagamenti sulla rete Lightning.

Gestire la Tua Liquidità

cc76d0c4-d958-57f5-84bf-177e21393f48 :::video id=96096aef-e4ce-4c44-a022-57e27082232a:::

In questo capitolo, esploreremo strategie per gestire efficacemente la liquidità sulla rete Lightning. La gestione della liquidità varia a seconda del tipo di utente e del contesto. Esamineremo i principi principali e le tecniche esistenti per capire meglio come ottimizzare questa gestione.

Esigenze di Liquidità

Ci sono tre principali profili di utenti su Lightning, ognuno con specifiche esigenze di liquidità:

Questi profili ovviamente non sono fissi; un utente può passare da pagatore a beneficiario a seconda delle transazioni. Ad esempio, Bob potrebbe ricevere il suo stipendio su Lightning dal suo datore di lavoro, ponendosi nella posizione di un "venditore" che richiede liquidità in entrata. Successivamente, se vuole usare il suo stipendio per comprare cibo, diventa un "pagatore" e deve quindi avere liquidità in uscita.

Per capire meglio, prendiamo l'esempio di una semplice rete composta da tre nodi: l'acquirente (Alice), il router (Suzie) e il venditore (Bob).

LNP201

Immagina che l'acquirente voglia inviare 30.000 satoshi al venditore e che il pagamento passi attraverso il nodo del router. Ogni parte deve quindi avere una quantità minima di liquidità nella direzione del pagamento:

LNP201

Strategie di Gestione della Liquidità

I pagatori devono assicurarsi di mantenere sufficiente liquidità dalla loro parte dei canali per garantire la liquidità in uscita. Questo si rivela relativamente semplice, poiché è sufficiente aprire nuovi canali Lightning per avere questa liquidità. Infatti, i fondi iniziali bloccati nel multisig on-chain sono interamente dalla parte del pagatore nel canale Lightning all'inizio. La capacità di pagamento è quindi assicurata finché vengono aperti canali con fondi sufficienti. Quando la liquidità in uscita è esaurita, è sufficiente aprire nuovi canali. D'altra parte, per il venditore, il compito è più complesso. Per poter ricevere pagamenti, devono avere liquidità dalla parte opposta dei loro canali. Pertanto, aprire un canale non è sufficiente: devono anche effettuare un pagamento in questo canale per spostare la liquidità dall'altra parte prima di poter ricevere pagamenti. Per certi profili di utenti Lightning, come i commercianti, esiste una chiara sproporzione tra ciò che il loro nodo invia e ciò che riceve, poiché l'obiettivo di un'attività commerciale è principalmente quello di incassare più di quanto spende, al fine di generare un profitto. Fortunatamente, per questi utenti con specifiche esigenze di liquidità in entrata, esistono diverse soluzioni:

LNP201 LNP201

Infine, per i router, il cui obiettivo è massimizzare il numero di pagamenti elaborati e le commissioni raccolte, devono:

Il servizio Loop Out

Il servizio Loop Out, offerto da Lightning Labs, consente di spostare la liquidità verso il lato opposto del canale recuperando i fondi sulla blockchain di Bitcoin. Ad esempio, Alice invia 1 milione di satoshi tramite Lightning a un nodo loop, che poi restituisce quei fondi a lei in bitcoin on-chain. Questo bilancia il suo canale con 1 milione di satoshi su ciascun lato, ottimizzando la sua capacità di ricevere pagamenti.

LNP201

Pertanto, questo servizio consente di ottenere liquidità in entrata recuperando i propri bitcoin on-chain, il che aiuta a limitare l'immobilizzazione di contanti necessaria per accettare pagamenti con Lightning.

Cosa dovresti ricavare da questo capitolo?

Nel prossimo capitolo, propongo di rivedere i concetti più importanti di questa formazione.

Vai oltre

Riassunto della formazione

a65a571c-561b-5e1c-87bf-494644653c22 :::video id=5f4f4344-ef27-4765-8f09-8262e6833bde:::

In questo capitolo finale che segna la conclusione del corso LNP201, propongo di rivedere insieme i concetti importanti che abbiamo coperto.

L'obiettivo di questo corso era fornirvi una comprensione completa e tecnica di Lightning Network. Abbiamo scoperto come Lightning Network si basi sulla blockchain di Bitcoin per eseguire transazioni off-chain, mantenendo al contempo le caratteristiche fondamentali di Bitcoin, in particolare l'assenza della necessità di fidarsi degli altri nodi.

Canali di Pagamento

Nei capitoli iniziali, abbiamo esplorato come due parti, aprendo un canale di pagamento, possano effettuare transazioni al di fuori della blockchain di Bitcoin. Ecco i passaggi trattati:

LNP201 LNP201 LNP201

La Rete dei Canali

Dopo aver studiato i canali isolati, abbiamo esteso la nostra analisi alla rete dei canali:

LNP201 LNP201 LNP201

Gestione della Liquidità

Abbiamo visto che la gestione della liquidità è una sfida su Lightning per garantire il flusso regolare dei pagamenti. Inviare pagamenti è relativamente semplice: basta aprire un canale. Tuttavia, ricevere pagamenti richiede di avere liquidità sul lato opposto dei propri canali. Ecco alcune strategie discusse:

LNP201 LNP201

Sezione finale

Recensioni & Valutazioni

38814c99-eb7b-5772-af49-4386ee2ce9b0 true

Esame finale

7ed33400-aef7-5f3e-bfb1-7867e445d708 true

Conclusione

afc0d72b-4fbc-5893-90b2-e27fb519ad02 true