Glossario / Lightning e layer 2
Feature bit
- Che cos'è un feature bit?
- Un feature bit indica agli altri nodi Lightning che il tuo nodo gestisce una specifica estensione del protocollo, con i numeri dispari che la marcano come opzionale e i numeri pari che la marcano come obbligatoria.
Lightning non porta alcun numero di versione che i peer possano confrontare, quindi due nodi stabiliscono cosa possono fare insieme scambiandosi un bitfield nel momento in cui si connettono. BOLT 9 assegna 25 coppie con nome, dal bit 0 fino al bit 67, e nessuno può impostare entrambi i bit di una stessa coppia. Se il tuo wallet rifiuta una fattura che un altro wallet paga, un feature bit mancante è una delle cose da controllare.
Come funziona
I feature bit si contano dal bit meno significativo di un bitfield, a partire dal bit 0, che ha il valore 0x1 e conta come pari.
Vengono assegnati in coppie, e l'abbinamento è tutto il trucco: il bit dispari significa che il nodo gestisce la funzionalità, il bit pari significa che la richiede. Una capacità può quindi essere introdotta come opzionale, diffondersi senza clamore e in seguito essere promossa a obbligatoria, cosa che secondo BOLT 9 i nodi non aggiornati rifiuteranno, così la mancata corrispondenza emerge quando due nodi si incontrano e non a metà di un pagamento. I requisiti dicono il resto con chiarezza: un nodo di origine non deve impostare entrambi i bit di una coppia, e un nodo ricevente che li vede comunque entrambi tratta la funzionalità come obbligatoria.
Alcune funzionalità si basano su altre, e il mittente porta con sé l'intera catena. I pagamenti multi-parte di base occupano i bit 16 e 17 e dipendono da payment_secret; i canali zeroconf occupano i bit 50 e 51 e dipendono da option_scid_alias; option_onion_messages_only_channels ai bit 66 e 67 dipende dai normali onion messages. Il nodo di origine deve impostare ogni dipendenza transitiva, così il codice dietro un unico gate di funzionalità può dare per scontata la presenza dei bit di supporto invece di rivalidarli.
Cinque delle 25 coppie ora recitano solo ASSUMED: 0/1, 8/9, 12/13, 14/15 e 44/45. Ciascuna è diventata così diffusa che si presume che ogni nodo la abbia, e la semantica sopravvive solo nelle revisioni precedenti della specifica. La tabella salta anche dei numeri, senza nulla assegnato a 2/3, 20/21, 30/31, 32/33, da 52 a 59 né a 64/65, quindi le lacune sono normali.
Dove lo vedi
I feature bit viaggiano in diversi luoghi separati, e la colonna Context della tabella BOLT 9 indica in quale di essi rientra ciascuna coppia, ed è vuota su sei delle 25 righe.
I indica il messaggio init che due peer si scambiano alla connessione, N un node_announcement diffuso nel grafo del gossip, C un channel_announcement, 9 una fattura BOLT 11, B il campo allowed_features di un percorso cieco e T il channel_type concordato all'apertura di un canale. Molti bit compaiono in un solo contesto: option_payment_metadata, bit 48 e 49, è solo per le fatture, mentre option_anchors ai bit 22 e 23 compare in init, nel gossip e come tipo di canale ma mai in una fattura.
Quando due contesti sono in disaccordo, vince la fattura: la motivazione di BOLT 9 afferma che, per i flag presenti sia in node_announcement sia in BOLT 11, i valori della fattura prevalgono su quelli annunciati. Ecco perché un wallet legge le capacità dalla fattura che hai incollato, non da ciò che la destinazione ha annunciato alla rete del gossip ore prima.
Phoenix, sviluppata da ACINQ sulla sua implementazione Eclair, esegue un nodo reale sul tuo smartphone, quindi se accetta un pagamento multi-parte o un percorso cieco lo decide un bitfield scambiato con il proprio peer, non una pagina di marketing. Muun mostra on-chain e Lightning come un unico saldo, e i suoi pagamenti Lightning continuano a dipendere dai bit della fattura.
Feature bit vs bit di versione
Un feature bit negozia le capacità tra due peer Lightning; un bit di versione segnala un soft fork nell'intestazione di un blocco bitcoin. BIP-9 assegna ai miner i bit da 0 a 28 del campo versione dell'intestazione e fissa l'attivazione di un deployment a 1.916 di una finestra di 2.016 blocchi sulla mainnet, dopo la quale è attivo per ogni blocco successivo. Un feature bit non vincola nessuno: è un'affermazione tra due peer, vera su una connessione e falsa sulla successiva, senza soglia, senza timeout e senza attivazione a livello di rete. Lightning negozia ciò che due nodi faranno l'uno per l'altro; bitcoin decide ciò che tutti devono accettare.