Vai al contenuto
buybitcoinsmart

Glossario / Lightning e layer 2

Short channel ID

Noto anche come scid.

Che cos'è un short channel ID?
Un short channel ID è il puntatore da 8 byte che Lightning usa per nominare un canale, che comprime l'altezza del blocco della transazione di finanziamento, il suo indice in quel blocco e l'indice del suo output.

Lightning nomina un canale pubblico in base a dove si trova il suo output di finanziamento nella blockchain, non con un'etichetta arbitraria. Tre byte portano l'altezza del blocco, tre l'indice della transazione e due l'indice dell'output, in totale 64 bit, scritti per le persone come 539268x845x1. È quella coordinata che ti consente di verificare sulla catena un canale attraverso cui il tuo wallet sta instradando, senza fidarti del pannello di nessuno.

Come funziona

Le tre componenti di uno short channel ID si concatenano dalla più significativa: l'altezza del blocco della transazione di finanziamento, l'indice di quella transazione nel blocco e l'indice dell'output che paga il canale. Le ampiezze fisse limitano l'altezza e l'indice della transazione a 16.777.215 e l'indice dell'output a 65.535.

Scritti per una persona, i numeri si stampano in decimale e si uniscono con una lettera x minuscola, così un canale sull'output 1 della transazione all'indice 845 nel blocco all'altezza 539.268 è 539268x845x1. Le ragioni della specifica: una x minuscola è visibilmente più piccola di una cifra nella maggior parte dei caratteri, così l'occhio separa le parti, e un doppio clic seleziona l'identificatore intero.

Compresso è un semplice numero da 64 bit, e il vettore di test di BOLT 11 lo dimostra: il route hint 66051x263430x1800 è la sequenza di byte 01 02 03 04 05 06 07 08 in ordine, perché 66051 è 0x010203, 263430 è 0x040506 e 1800 è 0x0708.

Essendo una posizione e non un hash, uno short channel ID smette di essere vero se il blocco che nomina cambia. Per questo un canale non viene annunciato finché la sua transazione di finanziamento non ha almeno 6 conferme, e per questo un nodo dovrebbe ignorare un annuncio il cui output ne abbia meno. Anche lo splicing sposta l'identificatore: un canale sottoposto a splice viene annunciato di nuovo con lo short channel ID della transazione di splice, mentre i nodi continuano a inoltrare i pagamenti che usano ancora quello precedente.

Un canale che nessuno ha annunciato non ha un identificatore pubblico, quindi i peer si scambiano un alias; un aggiornamento che ne porta uno deve impostare il suo flag dont_forward e non deve mai essere trasmesso, per privacy.

Dove lo vedi

Gli short channel ID sono il livello di indirizzamento del gossip di Lightning e compaiono in ogni messaggio che riguarda un canale specifico.

Il messaggio di tipo 259, announcement_signatures, ne porta uno quando due peer accettano di pubblicare il loro canale. Il tipo 256, channel_announcement, porta quello che ogni altro nodo usa per trovare l'output di finanziamento on-chain. Il tipo 258, channel_update, lo ripete a ogni variazione di commissione o di scadenza, una volta per direzione. Il tipo 261, query_short_channel_ids, chiede a un peer gli annunci dietro un elenco di essi, inviato come array crescente con byte di codifica 0; il byte di codifica 1 una volta significava compressione zlib ed è ora vietato del tutto. Un nodo può eliminare qualunque canale il cui aggiornamento più recente in entrambe le direzioni sia più vecchio di due settimane, 1.209.600 secondi.

L'unico posto in cui un utente comune ne incontra uno è una richiesta di pagamento: il campo r di una fattura BOLT 11 porta route hints, e ogni salto è una chiave pubblica di nodo, uno short channel ID da 64 bit, due cifre di commissione e un delta di scadenza. L'esempio svolto della specifica punta a 589390x3312x1.

Short channel ID vs outpoint

Uno short channel ID e un outpoint nominano entrambi un output di transazione, e lo fanno da direzioni opposte. Un outpoint è di 36 byte, un id di transazione da 32 byte seguito da un indice da 4 byte, e nomina l'output tramite la transazione che lo ha creato; uno short channel ID è di 8 byte e nomina lo stesso output in base a dove è finito.

Il compromesso è dimensione contro stabilità. Un outpoint è valido nel momento in cui esiste una transazione, anche non confermata, e non cambia mai. Uno short channel ID non esiste finché la transazione non è in un blocco, e una riorganizzazione che la mini di nuovo a un'altra altezza o in un'altra posizione produce un identificatore diverso per lo stesso canale. Lightning lo accetta perché la coordinata serve anche da istruzione per trovare l'output, e 8 byte di gossip per canale costano molto meno di 36.

Da non confondere con

Domande frequenti

Posso cercare un canale Lightning su un block explorer a partire dal suo short channel ID?

Sì. Dividi l'identificatore a ogni lettera x: il primo numero è l'altezza del blocco, il secondo è l'indice della transazione dentro quel blocco e il terzo è l'indice dell'output che finanzia il canale. Quei tre numeri ti portano alla transazione di finanziamento su qualunque explorer che elenca in ordine le transazioni di un blocco.

Perché lo short channel ID di un canale è cambiato?

Quasi sempre perché il canale è stato sottoposto a splice. Uno splice spende il vecchio output di finanziamento in uno nuovo, e il canale viene annunciato di nuovo con lo short channel ID della transazione di splice, mentre i nodi continuano a inoltrare i pagamenti che usano ancora l'identificatore precedente. Anche una riorganizzazione della blockchain che mini di nuovo la transazione di finanziamento altrove lo cambierebbe.

Uno short channel ID è la stessa cosa di un channel ID?

No. Sono due campi distinti, e il messaggio announcement_signatures in BOLT 7 li riporta entrambi affiancati. Solo lo short channel ID è una coordinata nella blockchain.

Leggi anche

Termini correlati

Altro in Lightning e layer 2

Leggi questa pagina in inglese