Glossario / Lightning e layer 2
Splicing
- Che cos'è lo splicing?
- Lo splicing ridimensiona un canale Lightning aperto spendendo il suo output di finanziamento in uno nuovo, più grande o più piccolo, così il canale conserva la sua cronologia e resta utilizzabile in ogni momento.
Prima dello splicing, cambiare la dimensione di un canale significava chiuderlo e aprirne un altro: due transazioni on-chain, due commissioni e un intervallo in cui il canale non esisteva. Uno splice lo fa con una sola transazione. I messaggi splice_init, splice_ack e splice_locked fanno parte della specifica Lightning, e Core Lightning ha pubblicato un'implementazione sperimentale nella v23.08 ad agosto 2023.
Come funziona
Lo splicing spende il vecchio output di finanziamento e ne crea uno nuovo nella stessa transazione, con la firma di entrambi i peer.
I peer concordano prima cosa cambia. Uno di loro invia splice_init indicando un importo da aggiungere o rimuovere; l'altro risponde con splice_ack. Poi costruiscono insieme la transazione di splice usando il protocollo di costruzione interattiva, e ciascuno aggiunge gli input e gli output che apporta, così uno splice che aggiunge fondi preleva bitcoin on-chain da chi ricarica, e uno splice che rimuove fondi crea un output di resto che paga direttamente quel peer.
La parte che rende utile lo splicing è ciò che accade mentre la transazione è non confermata. Il canale non si ferma. Entrambi i peer detengono allo stesso tempo transazioni di impegno contro il vecchio output di finanziamento e contro quello nuovo, e i pagamenti continuano a fluire con gli stati che restano validi. Una volta che lo splice ha conferme sufficienti, splice_locked ritira il vecchio output e il canale prosegue con la sua nuova dimensione, la sua vecchia identità di canale e la sua cronologia di instradamento accumulata intatta.
Il costo è una transazione on-chain invece di due, e il risparmio è maggiore di quanto sembri. Una chiusura e riapertura rompe anche la reputazione pubblica del canale, obbliga il nodo a ricostruire una relazione di instradamento e lascia i fondi indisponibili mentre entrambe le transazioni si confermano. Lo splicing evita tutte e tre le cose. Significa anche che un saldo on-chain e un saldo Lightning nello stesso wallet possono essere presentati come un unico numero, dato che i fondi possono spostarsi tra i due senza che il canale finisca mai.
Dove lo vedi
Lo splicing si nota soprattutto nei wallet che hanno smesso di mostrarti due saldi.
Core Lightning lo ha aggiunto dietro il flag experimental-splicing nella v23.08, esponendo splice_init, splice_update e splice_signed come comandi di basso livello. ACINQ lo ha distribuito agli utenti comuni in Phoenix per Android v2.0.0 ad agosto 2023, insieme al dual funding, ed è così che quel wallet ha smesso di distinguere nella sua interfaccia tra fondi on-chain e fondi Lightning: depositare on-chain esegue uno splice nel tuo canale esistente invece di aprirne un secondo.
Per chi gestisce un nodo, l'uso pratico è ribilanciare il capitale senza rotazione dei canali. Un canale diventato troppo piccolo per il traffico che sopporta viene ricaricato sul posto. Un canale che detiene più di quanto gli serve viene svuotato in parte verso la cold storage restando aperto. Entrambe le operazioni erano prima una chiusura, un'attesa e una riapertura, con due commissioni on-chain e con la cronologia di instradamento azzerata.
Il supporto non è universale. Un'implementazione e il suo peer devono entrambi parlare i messaggi di splicing, quindi poter eseguire uno splice su un dato canale dipende da chi c'è dall'altra parte. Se il tuo wallet ti chiede ancora di chiudere un canale per spostare fondi fuori, la controparte o il software non l'ha ancora adottato.
Splicing vs chiusura forzata
Lo splicing cambia la dimensione di un canale mantenendolo attivo; una chiusura forzata termina il canale unilateralmente. Una chiusura forzata è ciò che fai quando il tuo peer è irraggiungibile o si comporta male: trasmetti il tuo impegno più recente, il tuo saldo resta bloccato dietro un ritardo di circa un giorno e il canale non c'è più. Uno splice richiede che entrambi i peer collaborino e firmino, produce un canale che continua a funzionare e non impone alcun ritardo ai fondi di nessuno. Lo splicing è un'operazione di manutenzione che pianifichi; una chiusura forzata è un ripiego che ti costa tempo e un tasso di commissione sfavorevole.