English version here: https://medium.com/@thedavidcoen/lets-keep-the-fees-low-starting-the-lightning-network-fee-market-634de10a5a64
Lightning Network (LNP) è una struttura di canali di pagamento aperti tra privati e/o aziende e rappresenta la soluzione di scaling per Bitcoin; ecco perché spesso lo chiamiamo anche il secondo livello di Bitcoin (Second Layer).
Con Lightning possiamo potenzialmente effettuare centinaia di migliaia se non milioni di transazioni al secondo e quindi raggiungere qualsiasi parte del mondo (quasi) istantaneamente.
“Sì, e gratuitamente! ”
Non proprio.
Possiamo effettuare transazioni su Lightning Network e possiamo farlo in cambio di una commissione per transazione davvero economica: personalmente non ho mai speso più di 10 sat a transazione in commissioni.
Ma non sarà così a lungo.
Prima di esplorare perché e cosa possiamo fare in merito, vediamo un po’ come funziona Lightning Network. Se sai già come funziona, salta la spiegazione e vai alla sezione Lightning Network Fee Market.
Ogni membro della rete può creare il proprio nodo, dotato di wallet, in cui può conservare una certa quantità di satoshi, oppure può fare affidamento a un servizio di custodia, con tutte le criticità che ne derivano.
Quando un utente vuole inviare un pagamento a un’altra persona o servizio sulla rete, può aprire un canale di comunicazione con esso, all’interno del quale viaggeranno i satoshi, così come i pacchetti di dati instradati dai protocolli di trasporto, come TCP, viaggiano tra i dispositivi connessi a Internet. La discussione sulla struttura alla base di Internet è un po’ complicata e la ripercorro in un capitolo specifico del mio libro Domande e Risposte su Bitcoin .
Nell’immagine: le frecce nere provenienti direttamente dai nodi rappresentano transazioni su blockchain, mentre quelle all’interno dei canali sono transazioni Lightning.
Per convenzione, solo tre transazioni vengono mostrate come direttamente correlate alla blockchain di Bitcoin e vengono utilizzate per aprire due canali, quello di Alice con Bob e quello di Alice con Carl, e per chiudere il canale che Bob ha aperto con Earl. Tutte le altre frecce nere all’esterno dei canali rappresentano sempre transazioni onchain.
Alice è stata in grado di aprire due canali con due nodi diversi attraverso due transazioni onchain.
All’interno dei canali può eseguire tutte le transazioni che vuole, senza attendere conferme o pagare commissioni ai miner.
Bob chiude il canale che ha con Earl e i suoi satoshi vengono riversati sulla blockchain attraverso un’unica transazione di chiusura.
Nell’immagine i due grandi pannelli rappresentano simbolicamente i due layer: Settlement Layer , come strato di base (blockchain), e Transaction Layer (canali Lightning Network).
La rappresentazione del Transaction Layer più corretta dovrebbe considerare solo i canali di pagamento e non le transazioni al di fuori di essi, ma per ragioni legate alla semplificazione della rappresentazione su layer, è stata scelta questa soluzione.
Facciamola semplice. Come funziona con un esempio.
Immaginate di essere in un gruppo di cinque amici con un appuntamento fisso: il venerdì sera al pub.
Ogni volta che andate a bere e mangiare insieme, andate alla cassa del pub e fate dividere il conto in modo che tutti paghino per quello che hanno consumato.
Il proprietario del pub dovrà stampare più ricevute, dedicare un po’ di tempo a ritirare i soldi dai singoli aumentando la fila davanti alla cassa, e fare attenzione a raggiungere il totale corretto. In breve, questo sistema è inefficiente; è lento, costoso, decisamente non scalabile.
Supponiamo ora che tu e i tuoi amici desideriate fare le cose in modo più efficiente.
Calcolate che ogni mese spendete una media di 100 satoshi ciascuno.
Potreste mettere questi 100 satoshi in un fondo comune e tenere ciascuno di voi il conto delle spese fatte.
Una volta raggiunta la cassa del pub, potreste pagare il proprietario in un’unica soluzione, sapendo che nessuno di voi ci rimetterà, perché ognuno sa esattamente quanto hanno speso gli altri.
Dal mese successivo, se Alice, un membro del gruppo, spende 50 satoshi, integrerà il fondo comune con 50 satoshi, se Bob ne ha spesi 20, aggiungerà lo stesso numero per raggiungere i 100 satoshi, e così via.
Il fondo comune potrebbe essere utile anche fuori dal pub: se Bob vuole comprare una pizza che costa 5 satoshi ma non ha soldi con lui, potrebbe chiedere un prestito alla cassa comune che ha con gli amici e integrare 5 satoshi al prossima spesa al pub.
Su un eventuale del pub di 20 satoshi ciascuno, Bob ne pagherà 24 e tutti gli altri 19.
Queste spese extra possono avvenire un numero teoricamente infinito di volte, l’importante è che ogni membro del gruppo tenga traccia delle spese e che ogni mese ognuno abbia un saldo di 100 satoshi.
Questo è simile a quello che accade con il secondo livello di Bitcoin chiamato Lightning Network.
Tu e i tuoi quattro amici aprite un canale di pagamento (nell’esempio, il fondo comune) eseguendo una singola transazione ciascuno sulla blockchain di Bitcoin. Invece di essere una transazione standard, che richiede una singola firma per spendere i fondi, questa è una transazione multi-firma (multi-signature). Le transazioni multi-firma sono, in poche parole, transazioni complesse e programmabili, che consentono a diverse parti di partecipare. Gli individui non possono eseguire transazioni in uscita senza l’autorizzazione (firme) di altri partecipanti al gruppo.
Le parti sono ancorate alla blockchain di Bitcoin da un contratto multi-firma e possono ora inviare transazioni tra di loro all’interno del canale, senza la necessità di trasmetterle tutte onchain. Il canale richiede l’inserimento di fondi al suo interno: è necessario che almeno uno dei soggetti coinvolti nell’apertura del canale versi i fondi .
Questo denaro inserito nel canale di pagamento si chiama Channel Capacity , ovvero la capacità in satoshi del canale appena aperto.
I partecipanti al canale tengono traccia del saldo (channel state) e inviano l’ultimo saldo del canale alla blockchain di Bitcoin solo se desiderano chiudere quest’ultimo.
Quindi, se Bob vuole uscire dal fondo comune, può farlo: il suo debito verso il fondo comune verrà calcolato e potrà portare i satoshi rimanenti fuori da Lightning Network, di nuovo onchain, meno la solita commissione di mining per la transazione.
Un vero sistema di contante elettronico P2P
Quindi ora capiamo che Lightning Network è una struttura di canali di pagamento in cui gli utenti possono scambiarsi satoshi direttamente tra loro, senza che un minatore raccolga le loro transazioni e le inserisca in un nuovo blocco.
Le uniche commissioni di mining che tu ed i tuoi amici dovrete pagare saranno quelle per l’invio di satoshi a un nodo Lightning per l’apertura di un canale di pagamento con esso e quelle per la chiusura del canale con conseguente invio dei restanti satoshi alla blockchain di Bitcoin, invece di tutti quelli derivanti dalle singole transazioni onchain che fareste normalmente.
Per ogni canale che vuoi aprire, viene stabilita una capacità: immaginiamo che abbia 0,01 BTC nel mio portafoglio, o 1 milione di satoshi. Potrei decidere di aprire un canale diretto con un mio amico con una capacità di 20.000 satoshi, uno da 100.000 satoshi con il mio pub preferito e molti altri. Potrò quindi eseguire tutte le transazioni che voglio utilizzando questi canali senza doverli chiudere. Il pub, invece, potrebbe decidere ogni tanto di trasferire satoshi al suo cold wallet onchain, proprio per mantenere offline importanti quantità di denaro e proteggerle grazie alla (tendenza alla) immutabilità della blockchain di Bitcoin.
Non solo canali diretti
Se Lightning Network consentisse il trasferimento dei satoshi solo su canali diretti sarebbe completamente inutile, o meglio, la sua utilità sarebbe solo per pagamenti ricorrenti tra due persone e/o aziende a diretto contatto. In realtà questa rete permette di avere quello che in gergo viene chiamato Payment Routing: posso inviare satoshi anche a chi non è direttamente connesso a me tramite dei “salti” (chiamati hop) tra i nodi.
Immagina che un amico debba pagare la sua birra al pub ma non abbia un canale di pagamento diretto con il locale.
Invece di aprirne uno, con conseguente commissione da pagare e tempi di attesa derivanti dal trasferimento onchain, questo legge l’invoice del pub e paga: i satoshi passeranno prima da un canale aperto dal nostro amico con un’altra persona e salterà da nodo a nodo fino a raggiungere qualcuno il cui nodo ha un canale diretto con il pub.
Nel nostro esempio, se il nostro amico ha un canale diretto con il nostro nodo e noi ne avessimo uno con il pub, potrebbe accadere che i satoshi passino prima dal nostro nodo e poi arrivino al nodo del pub.
Più nodi sono disponibili per la rete Lightning, più facile sarà effettuare questi pagamenti indiretti. Pochi nodi significano un’alta possibilità che il pagamento non vada a buon fine!
È come se, nel mondo materiale, dovessimo pagare una persona che si trova in un’altra città utilizzando delle banconote: possiamo consegnare il denaro a un nostro conoscente e questo lo consegnerà ad altre persone, fino a quando non raggiungerà il destinatario finale.
Ovviamente, sebbene simile ad un sistema di pagamento indiretto del mondo materiale, qui non c’è rischio che uno dei partecipanti incaricati di consegnare i soldi al prossimo scappi con il bottino, perché la rete si basa su smart contract e non su intervento diretto delle persone.
Lightning costituisce quindi una vera e propria rete P2P , nel pieno rispetto dell’abstract del white paper Bitcoin realizzato da Satoshi Nakamoto, mentre il Base (Settlement) Layer, con la sua blockchain, è più simile ad un sistema broadcast, visto che la trascrizione della transazione e quindi la loro l’irreversibilità dipende dai minatori.
Veniamo dunque al vero obiettivo di questo post: in realtà non volevo spiegare come funziona Lightning, ma se sei arrivato qui ti sei dovuto sorbire tutto questo.
Mi spiace.
La mia vera intenzione era quella di iniziare a esplorare il cosiddetto Lightning Network Fee Market .
Il Lightning Network Fee Market
Ogni transazione ha un prezzo. Questo è vero per qualsiasi tipo di transazione, e se nei sistemi transazionali classici (ad esempio Visa o Mastercard) non paghi commissioni, è perché qualcuno le paga per te: di solito il proprietario del negozio, che, se è intelligente, aumenterà un po’ il prezzo dei suoi prodotti per coprire le commissioni.
Questo vale anche per Lightning Network.
“ Ok, ma quanto devo pagare? ”
Dipende.
Se con Bitcoin onchain paghi una fee che corrisponde alle commissioni che vuoi pagare moltiplicate per la dimensione in byte della tua transazione – potresti potenzialmente pagare commissioni elevate per una transazione con un valore economico basso e commissioni basse per un valore TX elevato – , con Lightning potresti avere letteralmente ZERO commissioni ma hai altri parametri da considerare.
Base Fee : quando apri un canale con un nodo, dovresti sapere qual è la Base Fee che richiederà per ogni transazione che lo attraversa e raggiunge un altro nodo.
Se la Base Fee è ad esempio 1 sat, pagherai 1 sat come prezzo fisso.
Fee Rate: quando invii una transazione, questa passa attraverso un nodo e questo ha impostato un tasso di commissione, paghi una percentuale dell’importo totale come commissione.
Il tasso di commissione è espresso in milli millisat (mSats), quindi, ad esempio, se un nodo richiede 1000 milli mSats come tasso di commissione, chiederà 0,001 sat.
Devi moltiplicare questo importo per l’importo totale da transare.
Vuoi trasferire 2000 sat? paghi 1 sat (Base Fee) + 2000 x 0,001 sat (Fee Rate) = 3 sat come commissione finale (Base Fee + Fee Rate).
È tutto?
No.
Devi anche considerare la quantità di hop che la tua transazione dovrà fare!
Se non hai un canale diretto con un nodo e devi pagare per un servizio, effettuerai l’inoltro su un altro nodo e questo farà lo stesso con un altro, fino a raggiungere il nodo del servizio da pagare. Lo abbiamo visto prima e lo abbiamo chiamato Payment Routing.
Quindi, diciamo che Alice deve pagare David – sì, più sat per me! – ma non ha un canale diretto con lui.
Alice ha un canale diretto con Bob, Bob ha un canale con Carol e Carol con David.
La transazione dovrà passare attraverso 2 nodi!
Quindi, ipotizziamo che questi nodi abbiano lo stessa Fee Rate e Base Rate: Alice deve pagare anche Carol, non solo Bob, quindi il doppio delle commissioni.
Ora i 2000 sat per David avranno bisogno di 6 sat di commissioni per arrivare a destinazione.
Come puoi vedere, anche se le commissioni sono basse (0,3% dell’importo totale), non sono pari a zero.
È importante notare che Alice può decidere l’importo massimo delle commissioni che è disposta a pagare.
Se 6 sat sono troppo alti per lei, potrebbe selezionare un limite più piccolo: diciamo 3 sat.
Il suo nodo calcolerà un altro percorso per David (se presente) in cui i nodi di instradamento richiedono una tariffa inferiore.
Alice e David sono entrambi collegati a Isaac, un LSP (Lightning Service Provider). Questo ha un tasso di commissione di 1000 mili mSats e un Base Fee di zero sat.
Se Alice paga 2000 sats a David, dovrà pagare solo 2000 x 0,001 sats (tariffa) = 2 sats.
Pagherà lo 0,1% dell’importo totale come commissione.
Quindi, come puoi vedere, se un utente imposta un importo massimo di commissione che è disposto a pagare, il nodo cercherà il percorso migliore con la tariffa più bassa.
Inizia il Lightning Network Fee Market.
Comprendiamo dunque che gli operatori di nodo hanno due opzioni principali:
- Potrebbero decidere di mantenere la commissione pressoché statica e anche alta rispetto alla media, in modo da mantenere il loro canale equilibrato e guadagnare sporadicamente delle commissioni di instradamento elevate.
- Potrebbero seguire (o meglio, creare) il mercato e avere tariffe dinamiche in modo da poter avere più eventi di routing, guadagnare meno per ogni evento, ma avere commissioni di instradamento complessivamente maggiori sommando tutte le transazioni.
Cosa possiamo fare per essere utenti attivi e per mantenere basse le tariffe?
Beh, prima di tutto dovremmo iniziare a creare nodi e ad aprire i canali.
È meglio avere una rete con molti nodi piuttosto che molti canali con una piccola rete di nodi!
Quindi, dovremmo selezionare buoni nodi in termini di capacità e disponibilità, ma possiamo anche considerare la Base Fee e la Fee Rate.
Nel mio caso ho creato una sorta di listino prezzi per i miei servizi di routing:
Quindi è come se stessi vendendo il mio servizio di routing (o rendessi disponibile la capacità) a un prezzo: in questo caso chiedo zero sat come Base Fee e un Fee Rate variabile che parte da 1 mili mSat (0.000001 sats) e arriva a 2000 mili mSat (0.002 sat) se un utente apre un canale con 2 milioni di sat di capacità verso mio nodo.
Questo listino prezzi probabilmente cambierà, adattandosi al Lightning Network Fee Market, una volta che la rete sarà più grande e ci sarà più concorrenza tra i nodi di routing.
Nel caso in cui desideri aprire un canale al mio nodo, ora conosci i miei prezzi ed ecco il mio URI:
0206ba1bccc9241fda43879095f54f276b41373ca236735c5357d55e385a8062e5@ewrfly2uomkxeo5k.onion: 9735
Ricorda: è importante (Non) ESSERE sconsiderato!
Dona qualche satoshi!
Bruno
Ciao, ho aperto un canale col tuo nodo, 20.000 satoshi, immagino che i satoshi “mancanti” siano trattenuti per la chiusura del canale … per questa eventuale chiusura che fee (sat/byte) viene usata ? E’ a tua discrezione o come funziona ?
PS
Il tuo articolo e’ veramente illuminante 🙂 grazie.