Glossario / Lightning e layer 2
Annuncio di canale
- Che cos'è un annuncio di canale?
- Un annuncio di canale è il messaggio gossip firmato che comunica alla rete Lightning che esiste un canale pubblico, provando la proprietà dell'output di finanziamento con quattro firme.
Ogni canale Lightning pubblico entra nel grafo di routing attraverso uno di questi messaggi, e per ogni canale può esistere un solo annuncio valido. Non può essere inviato finché la transazione di finanziamento non ha sei conferme, e i peer dimenticano il canale 72 blocchi dopo che l'output è stato speso. Annunciare costa privacy, perché il messaggio pubblica l'output on-chain che finanzia il tuo canale e lo lega alla chiave del tuo nodo.
Come funziona
Un annuncio di canale è costoso da falsificare, e questo è esattamente lo scopo del progetto.
Inviare gossip non costa nulla, quindi un nodo potrebbe altrimenti inondare la rete con canali immaginari. Il BOLT 7 lo impedisce rendendo ogni affermazione verificabile sulla blockchain. Il messaggio, di tipo 256, indica un short_channel_id che punta a un output specifico: tre byte di altezza del blocco, tre di indice della transazione, due di indice dell'output. Il nodo che lo riceve cerca quell'output e scarta l'annuncio a meno che non sia un P2WSH non speso che paga alle due chiavi Bitcoin indicate.
Quattro firme stanno in testa. Due provengono dalle chiavi di identità dei nodi, e due dalle chiavi di finanziamento che gestiscono l'output on-chain, bitcoin_key_1 e bitcoin_key_2. Tutte e quattro firmano lo stesso doppio hash SHA256, calcolato dall'offset di byte 256 fino alla fine del messaggio. Abbinare le chiavi dei nodi alle chiavi Bitcoin prova che i due nodi che annunciano il canale sono le due parti che lo hanno finanziato, non estranei che puntano all'output di qualcun altro. Inoltre node_id_1 deve essere la minore, in ordine lessicografico, delle due chiavi compresse, e il nodo che riceve deve ignorare qualsiasi annuncio che sbaglia quell'ordine.
Annunciare è facoltativo, impostato dal bit announce_channel all'apertura del canale. Se lo è, i peer si scambiano announcement_signatures (tipo 259) una volta che la transazione di finanziamento è sufficientemente profonda, e da quel momento una delle due parti può diffondere il risultato. Uno splice produce un nuovo annuncio per la nuova transazione, ed è per questo che i nodi aspettano 72 blocchi dopo che un output di finanziamento è stato speso prima di dimenticare il canale: la spesa potrebbe essere un ridimensionamento e non una chiusura.
Dove lo vedi
Gli annunci di canale sono ciò che un explorer Lightning legge quando disegna il grafo della rete.
L'identificatore stampato accanto a ogni canale esce direttamente dal messaggio. Un short_channel_id scritto come 539268x845x1 indica l'output 1 della transazione con indice 845 nel blocco 539268, così chiunque può controllare quell'output on-chain. L'annuncio non contiene nulla che somigli a un listino: nessuna commissione, nessuna capacità, nessun nome dell'operatore. Un canale non è utilizzabile finché almeno una delle parti non invia un channel_update con le sue commissioni e il suo delta di scadenza, e il nome del nodo arriva separatamente in un node_announcement.
Questa separazione spiega perché i canali scompaiono dagli explorer pur esistendo ancora. Se il channel_update più recente in una delle due direzioni ha più di due settimane (1209600 secondi), un nodo può rimuovere il canale dalla sua vista. Un annuncio non viene mai aggiornato da solo, quindi un canale resta sulla mappa solo finché un operatore continua a firmare di nuovo le sue condizioni.
Dal lato del wallet, gli annunci di canale si incontrano soprattutto per la loro assenza. Un canale deve essere annunciato solo se vuoi che estranei instradino pagamenti attraverso di esso, e un wallet per smartphone esiste per spendere e ricevere, non per essere un salto. Per questo le questioni pratiche nelle nostre recensioni di Phoenix e Muun sono la tabella delle commissioni pubblicata e il file di backup, non una posizione nel grafo pubblico.
Annuncio di canale vs capacità del canale
Un annuncio di canale prova che un canale esiste, mentre la capacità del canale è il numero di satoshi al suo interno, e il messaggio non indica alcun importo. I suoi campi sono quattro firme, un vettore di funzionalità, un hash della catena, lo short channel ID e quattro chiavi pubbliche. Chi cita una cifra di capacità ha unito l'annuncio ai dati della catena, leggendo il valore dell'output a cui punta l'identificatore. Per questo un canale non annunciato ha capacità ma nessuna cifra pubblica: nulla indica alla rete quale output leggere.