#LNWeek dal 4 al 7 ottobre tradusione di quattro semplici articoli di introduzione a Lighting Network.#3 i canali Lighting Network. Come funzionano, quali sono
Autore: Raphael Osaze Eyerin | Pubblicazione originale: 13/06/2022 | Tradotto da: 31febbraio | Milano Trustless | Link: Lightning Payment Channels
I canali di pagamento sono la spina dorsale di Lightning Network, in quanto consentono di inviare e ricevere pagamenti off-chain
Cos'è un canale di pagamento?
Un canale di pagamento è una relazione finanziaria duplex e trustless tra due nodi della rete LN, implementata da transazioni Bitcoin a firma multipla che condividono il controllo dei bitcoin nel canale tra i due nodi Lightning.
I canali di pagamento sono costruiti inviando bitcoin a un indirizzo multisig 2 su 2, con entrambi i partner del canale come firmatari nel multisig.
Quando si sceglie di aprire un canale, uno o entrambi gli utenti accettano di inviare alcuni bitcoin all'indirizzo multisig 2-of-2. Una volta che la transazione è stata minata, i bitcoin nel multisig non possono essere spesi senza la collaborazione del partner di canale, perché anche la sua firma è necessaria per spendere le monete.
Nota: i canali di pagamento possono essere finanziati da uno dei due partner di canale, o con un doppio finanziamento da parte di entrambi i peer, ma al momento sono più popolari i canali a finanziamento singolo. I canali a doppio finanziamento sono stati implementati solo da Core Lightning (precedentemente noto come C-Lightning); per aprire un canale a doppio finanziamento è necessario utilizzare un nodo Core Lightning.
Come si crea un canale di pagamento?
Per iniziare a effettuare transazioni su Lightning Network, è necessario aprire un canale di pagamento o gli utenti possono anche utilizzare un servizio che ha un canale già aperto in modo custodial. In ogni caso deve esistere un canale di pagamento aperto prima che sia possibile inviare e ricevere pagamenti LN.
Per aprire un canale di pagamento entrambi i peer devono essere connessi; se le controparti non sono già connesse, il promotore del canale deve connettersi alla controparte utilizzando la sua chiave pubblica, l'URL del server o l'indirizzo IP e il numero di porta.
Esempio di stringa di connessione
@localhost:9735
Dopo aver stabilito la connessione, il nodo di avvio manda un messaggio di apertura del canale all'altro peer. Se il peer accetta di aprire un canale con il nodo promotore, quest'ultimo prepara una transazione di finanziamento (funding transaction).
Una funding transaction è una transazione che invia fondi a un indirizzo a 2 firme su 2 che consiste nelle chiavi pubbliche di entrambi i peer del canale. I bitcoin inviati saranno bloccati all'indirizzo multi-firma e richiederanno entrambe le firme dei peer del canale per sbloccare i fondi in futuro. Successivamente il promotore del canale invia la transazione di finanziamento al suo peer perché la firmi e crei anche una transazione di rimborso prima di trasmettere il finanziamento on-chain per l'apertura del canale.
La transazione di rimborso (refund transaction) è il primo impegno creato dal canale e serve a garantire al finanziatore che i suoi fondi non possano essere rubati dagli altri peer. La transazione di rimborso spende l'output della transazione di finanziamento che non è ancora stata pubblicata; questo è possibile perché l'ID della transazione di finanziamento non è modificabile, grazie a Segwit.
Dopo che la transazione di rimborso è stata creata con successo, il promotore del canale trasmette la funding transaction alla blockchain, quindi attende un numero concordato di conferme. Dopo la conferma il canale è aperto e i peer del canale possono fare il gossip sull'esistenza del canale alla rete più ampia.
Transazione di impegno
Le transazioni di impegno (commitment transactions) sono una serie di transazioni Bitcoin off-chain che aggiornano lo stato dei saldi del canale di pagamento LN, in base a come i partner del canale distribuiscono la capacità del canale tra di loro.
La transazione di impegno include anche output aggiuntivi per i tentativi di pagamento in-flight sotto forma di contratti hash time-locked (HTLC).
Le transazioni di impegno si basano anche sulla capacità di Bitcoin di limitare la doppia spesa, quindi solo una transazione di impegno valida sarà in grado di spendere i fondi bloccati nell'indirizzo multisig 2-di-2 creato dalla transazione di finanziamento quando viene trasmessa on-chain.
Ogni volta che viene effettuato un pagamento attraverso il canale, viene creata una versione aggiornata della transazione di impegno, firmata da entrambe le parti. Questa transazione di impegno riflette il saldo aggiornato del canale tenendo conto del nuovo pagamento ed è una transazione valida, anche se speriamo di non doverla mai trasmettere alla blockchain (vedere la sezione sulla chiusura del canale).
Creare un canale di pagamento con LND
Per aprire un canale su LND, è necessario connettersi con il nodo peer se non è connesso.
@localhost:9735
Poi si può aprire un canale usando il comando open channel con la chiave pubblica del nodo con cui ci si vuole connettere come secondo parametro e l'importo in satoshi che si vuole usare per aprire il canale come terzo.
Per elencare tutti i canali aperti con LND si può usare il comando listchannels
{
"channels": [
{
"active": true,
"remote_pubkey": "026721a3077374a439d21d71987e63d8c111ea80272f37656580990757886765da",
"channel_point": "a28e4fda3d21fb681ffeb2cc72ff84e5cfc60e30674d3b8df0ce1eec62087773:0",
"chan_id": "131941395398656",
"capacity": "500000",
"local_balance": "600",
"remote_balance": "490350",
"commit_fee": "9050",
"commit_weight": "724",
"fee_per_kw": "12500",
"unsettled_balance": "0",
"total_satoshis_sent": "0",
"total_satoshis_received": "600",
"num_updates": "12",
"pending_htlcs": [
],
"csv_delay": 144,
"private": false
}
]
}
Chiusura di un canale di pagamento
Un canale di pagamento può essere chiuso in modo cooperativo, forzato o con una penalità.
Chiusura cooperativa
La chiusura cooperativa è il modo migliore per chiudere un canale di pagamento. Per effettuare una chiusura cooperativa, entrambi i partner del canale negoziano una versione finale della transazione di impegno, chiamata transazione di chiusura (closing transaction), che versa immediatamente il saldo di ciascuna parte al wallet di destinazione scelto. Quindi, il partner che ha avviato il flusso di chiusura del canale trasmetterà la transazione di chiusura.
Quando un canale di pagamento non viene chiuso in modo cooperativo (chiusura forzata), può rivelare onchain output irrisolti, che sono specifiche di Lightning; questi output aggiuntivi portano a maggiori costi in commissioni.
La persona che ha avviato la chiusura, deve inoltre attendere più a lungo il timeout prima di poter spendere dalla transazione di chiusura forzata (questo timeout consente all'altra parte di verificare eventuali frodi e di emettere una transazione di penalizzazione, se necessario).
Chiusura forzata
Si può scegliere di forzare la chiusura di un canale se la controparte non è disponibile e non può partecipare a una chiusura cooperativa.
Una chiusura forzata (chiamata anche chiusura unilaterale) avviene quando uno dei due peer del canale trasmette una transazione di impegno invece di negoziare una transazione di chiusura.
Una chiusura forzata è accettata se la transazione di impegno trasmessa è l'ultima concordata dai partecipanti al canale; se viene trasmessa una commitment revocata, la chiusura forzata è fraudolenta e può essere contestata dall'altro peer quando se ne accorge, fornendo la transazione di impegno più recente.
Quando un canale viene chiuso forzatamente, entrambi i partecipanti riceveranno il loro importo to_local in modo diverso: il partecipante che ha avviato la chiusura forzata dovrà attendere un certo lasso di tempo specificato dal timelock, mentre il suo partner riceverà immediatamente i fondi. Il ritardo offre al secondo partner l'opportunità di contestare la transazione di impegno trasmessa; se l'emittente ha trasmesso una transazione di impegno revocata, il peer può contestarla con una transazione di penalità.
Se il canale viene chiuso da un peer che non lo ha aperto, la parte che ha aperto il channel dovrà, durante una chiusura unilaterale, pagare commissioni più alte; potrebbe dover pagare commissioni on-chain per interrompere o regolare le HTLC.
Le fee sono più alte perché una transazione di impegno include uscite aggiuntive per le HTLC in sospeso, il che rende la transazione di impegno più grande (in termini di byte) di una transazione di chiusura cooperativa, e transazioni più grandi comportano fee più alte.
Chiusura forzata fraudolenta
Un canale può essere chiuso quando un partner decide di forzare la chiusura in modo fraudolento, trasmettendo una vecchia commitment che non rappresenta il più recente stato del canale concordato. Può farlo per imbrogliare il partner; il nodo imbroglione perderà tutti i suoi fondi se il partner scopre che sta cercando di imbrogliare.
Se la chiusura forzata con una transazione di impegno sbagliata viene rilevata dal partner di canale, quest'ultimo fornirà le proprie chiavi di revoca e reclamerà tutti i fondi del canale, chiudendolo con una transazione di penalizzazione che non richiede timelock.
Se la falsa chiusura non viene rilevata dal partner di canale entro il tempo to_self_delay concordato al momento dell'apertura del canale, il peer malintenzionato riuscirà a farla franca con la chiusura non valida e il partner di canale potrebbe perdere parte dei suoi fondi.
Nota: Una falsa chiusura fraudolenta può verificarsi anche se il nodo di un utente si blocca e i dati vengono persi dal database dell'utente durante il crash; se l'utente si riavvia normalmente e tenta di utilizzare una transazione di impegno che crede essere lo stato corrente, potrebbe comunque finire per essere punito.
Può accadere anche se, ad esempio, si perde un disco rigido e l'utente non riesce a recuperare i dati persi. La Data Loss Protection (DLP) potrebbe essere utilizzata per recuperare lo stato attuale del canale richiedendolo al peer remoto, se quest'ultimo è onesto. È possibile leggere qui le informazioni sulla DLP.
Conclusione
I canali di pagamento sono gli elementi costitutivi di Lightning Network. Un nodo Lightning che non ha un canale di pagamento aperto non può pagare o ricevere un pagamento Lightning.
Anche quando un utente di Lightning utilizza un wallet LN custodial senza che abbia bisogno di creare un canale di pagamento, dietro le quinte il fornitore del wallet Lightning ha un canale aperto che consente ai suoi utenti di inviare e ricevere pagamenti Lightning Network.
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