Glossario / Lightning e layer 2
Delta di scadenza CLTV
- Che cos'è il delta di scadenza CLTV?
- Il delta di scadenza CLTV è il numero di blocchi che un nodo Lightning sottrae al timelock di un pagamento in entrata prima di inoltrarlo, annunciato per ogni direzione del canale nel gossip.
Ogni nodo che inoltra su una rotta Lightning applica due prezzi, una commissione in millisatoshi e un ritardo in blocchi, e il delta di scadenza CLTV è il ritardo. BOLT 7 lo trasporta come campo di 16 bit nel messaggio channel_update, accanto a fee_base_msat, e ogni lato di un canale pubblica il proprio valore in modo indipendente. Se un pagamento si blocca, quella pila di blocchi è il tempo per cui il tuo denaro resta congelato.
Come funziona
Il delta di scadenza CLTV è scelto dal nodo che eseguirà l'inoltro e riguarda solo la direzione in uscita di quel nodo.
La formulazione della specifica è precisa: un nodo deve impostare il campo al numero di blocchi che sottrarrà al cltv_expiry di un HTLC in entrata. Il delta quindi non è una scadenza, è un intervallo. Il nodo accetta un pagamento bloccato fino a una certa altezza di blocco assoluta, trattiene il delta per sé e offre al salto successivo un pagamento bloccato fino a quell'altezza meno il delta. Quell'intervallo è il margine di sicurezza del nodo: se il salto a valle regola il pagamento all'ultimo momento possibile, restano quei blocchi per rivendicare il pagamento a monte.
Ogni canale pubblico porta due di questi numeri, uno per direzione, ciascuno firmato dal nodo che lo ha impostato. Viaggiano in channel_update, il messaggio di tipo 258, accanto a htlc_minimum_msat e ai due campi delle commissioni. Contano solo gli aggiornamenti annunciati dai nodi che inoltreranno: su una rotta da A a B, a C e a D, il pagatore usa l'aggiornamento di B per il tratto da B a C e quello di C per il tratto da C a D, e nessuno dei propri.
Le rotte quindi si costruiscono all'indietro. Il pagatore parte dalla destinazione con la scadenza finale minima richiesta dalla fattura, risale sommando il delta annunciato di ogni salto, e il totale progressivo diventa il timelock dell'HTLC che consegna al primo peer. Quando un nodo rivede i suoi prezzi, BOLT 7 gli chiede di continuare ad accettare i parametri precedenti per 10 minuti, perché il gossip non raggiunge tutti i pagatori contemporaneamente.
Dove lo vedi
I delta di scadenza CLTV decidono per quanto tempo un pagamento Lightning bloccato impegna il tuo saldo, e l'esempio di routing di BOLT 7 stesso mette cifre su due rotte per il resto identiche.
Quattro nodi formano un rombo: A, B, C e D, che annunciano 10, 20, 30 e 40 blocchi, con C che chiede un delta di scadenza finale di 18, che la specifica chiama valore predefinito. A invia 4.999.999 millisatoshi a C. Instradato tramite B, A consegna al suo peer 5.010.198 millisatoshi, di cui 10.199 come commissione di B, e il primo HTLC scade all'altezza di blocco attuale più 80: 20 blocchi per il salto di B, 18 per C e altri 42 di margine. Instradato tramite D, lo stesso pagamento costa 5.020.398 millisatoshi e scade all'altezza attuale più 100. Stesso mittente, stesso destinatario, stesso importo, e 20 blocchi in più di esposizione.
Quei 42 non sono un margine arbitrario. BOLT 7 avverte che una rotta costruita sommando i delta in modo onesto consente a un nodo intermedio di capire la propria posizione e da lì di indovinare chi viene pagato, perciò al pagatore si consiglia di aggiungere uno scostamento casuale, ottenuto percorrendo il grafo verso l'esterno a partire dal destinatario e sommando i delta che incontra. La specifica chiama il risultato shadow route extension.
Niente di tutto questo lo imposti tu, a meno che tu non gestisca il nodo che inoltra. Phoenix, che la nostra recensione definisce un vero nodo Lightning autonomo sullo smartphone, pubblica il suo prezzo di invio come 0,4% più 4 sat, e quella tabella dà un prezzo al denaro, non ai blocchi.
Delta di scadenza CLTV vs OP_CHECKLOCKTIMEVERIFY
Un delta di scadenza CLTV è un valore di politica di routing pubblicato nel gossip, mentre OP_CHECKLOCKTIMEVERIFY è l'opcode dello script di Bitcoin che impone una scadenza assoluta on-chain.
Condividono tre lettere e poco altro. Un delta è relativo e vive interamente off-chain: non compare in nessuno script, nessun nodo completo lo valida, e il nodo che l'ha impostato lo modifica con un nuovo channel_update. OP_CHECKLOCKTIMEVERIFY è scritto nella moneta, è verificato da ogni nodo completo e non può essere modificato una volta che la moneta esiste.