Vai al contenuto
buybitcoinsmart

Glossario / Lightning e layer 2

Route hint

Che cos'è un route hint?
Un route hint è una voce di una fattura Lightning che indica un nodo pubblico, un canale e le sue commissioni, così che chi paga possa raggiungere un destinatario i cui canali non sono annunciati.

Un canale privato non compare mai nel grafo pubblico del gossip, quindi la fattura deve portare essa stessa l'ultimo tratto della rotta. BOLT 11 rende obbligatorio un hint quando il beneficiario non ha canali pubblici, e ogni salto costa 51 byte: id del nodo, id del canale, commissione base, commissione proporzionale, delta CLTV. Prelevare verso un wallet su smartphone senza canali annunciati funziona solo perché quei byte ci sono.

Come funziona

Un route hint viaggia nel campo con tag di BOLT 11 scritto con il carattere r, che contiene una lista anziché un singolo valore.

Ogni voce è composta da cinque valori affiancati: un pubkey da 264 bit, uno short_channel_id da 64 bit, un fee_base_msat da 32 bit, un fee_proportional_millionths da 32 bit e un cltv_expiry_delta da 16 bit. In tutto sono 408 bit, esattamente 51 byte per salto. Le voci formano una rotta in avanti da un nodo pubblico al beneficiario, e ciascun pubkey indica il nodo all'inizio del proprio canale, non alla fine.

Gli ultimi tre valori sono quelli che un nodo pubblico diffonderebbe in channel_update secondo BOLT 7. Un canale privato non diffonde nulla, quindi la fattura è l'unico posto in cui chi paga apprende quanto costa quel salto.

La regola per chi scrive la fattura è di portata limitata: se nessun canale pubblico è associato alla chiave del beneficiario, la fattura deve contenere almeno un campo r. Chi la scrive può includerne diversi per offrire rotte alternative, la preferita per prima. Il tetto è il campo con tag stesso, i cui dati non possono superare 1023 gruppi da 5 bit, cioè 639 byte, il che lascia spazio per un massimo di dodici salti in un solo campo.

Gli hint sono un consiglio, non un'istruzione: chi paga può usare la sequenza di canali indicata, e la specifica chiama il campo "limited routing assistance". Il route blinding di BOLT 4 è la risposta successiva allo stesso problema. Invece di un id del nodo e di un id del canale in chiaro, il destinatario consegna al mittente un punto di introduzione più id dei nodi modificati e dati cifrati per ogni salto, così il mittente ottiene un percorso utilizzabile senza sapere chi vi si trova.

Dove lo vedi

I route hint sono ciò che un decoder di fatture mostra come informazioni di routing aggiuntive per una rotta privata.

Il vettore di test mainnet della specifica stessa è una fattura da 20 milli-bitcoin instradata attraverso due salti con hint: il canale 66051x263430x1800 con una commissione base di 1 millisatoshi, 20 parti per milione e un delta CLTV di 3 blocchi, poi 197637x395016x2314 con 2 millisatoshi, 30 parti per milione e 4 blocchi. Quei due salti occupano 164 dei caratteri bech32 della fattura, più dell'hash di pagamento e del segreto di pagamento messi insieme.

La stessa struttura compare nella pratica. Phoenix, uno dei 41 wallet recensiti da questo sito, tiene i propri canali con ACINQ anziché con il grafo aperto, e dove quei canali non vengono annunciati la regola sopra obbliga ogni fattura a indicare il nodo di ACINQ. Le FAQ di ACINQ, citate in quella recensione, ammettono già che ACINQ conosce destinazione e importo dei tuoi pagamenti; un hint estende quella divulgazione verso l'esterno, dato che chi ti paga scopre con quale fornitore operi. Se prelevi via Lightning da un exchange come Strike, è l'exchange, come pagatore, a versare la commissione base e la commissione proporzionale del salto indicato, lette dalla fattura emessa dal tuo wallet.

Route hint vs liquidità in entrata

Un route hint dice a chi paga come trovarti; la liquidità in entrata decide se il pagamento ci sta una volta arrivato.

I due falliscono in modi che dall'esterno sembrano identici, e solo uno si risolve modificando una fattura. Un hint può essere perfettamente formato e indicare le commissioni giuste, e il pagamento muore comunque all'ultimo salto perché il tuo lato di quel canale non ha spazio. Phoenix pubblica il prezzo per risolverlo: ricevere è gratis quando hai già liquidità in entrata, e costa 1% più le commissioni di mining quando il wallet deve operare on-chain per fare spazio. Se un pagamento fallisce mentre il mittente insiste che la rotta è stata risolta, controlla la capacità prima di dare la colpa alla fattura.

Da non confondere con

Domande frequenti

Un route hint espone il mio canale privato?

Sì, a chiunque legga la fattura. Il campo r riporta l'id del nodo del tuo peer e l'id breve del canale tra te e lui, entrambi in chiaro, il che è il prezzo per essere raggiungibile quando i tuoi canali non sono annunciati. Il route blinding di BOLT 4 è l'approccio più recente, che li nasconde dietro un punto di introduzione.

Perché un pagamento fallisce quando il route hint sembra corretto?

Perché un hint dà indicazioni, non capacità. Il canale indicato ha comunque bisogno di saldo sufficiente dal lato del tuo peer per portare l'importo, e nessun campo di una fattura può crearlo. Controlla la tua liquidità in entrata prima di riscrivere qualsiasi cosa.

Una fattura può contenere più di un route hint?

Sì. BOLT 11 consente a chi scrive la fattura di includere diversi campi r come opzioni di routing alternative, elencate con la preferita per prima, e ogni campo può concatenare più salti propri. Un singolo campo è limitato dal tetto di 639 byte per i dati di un campo con tag, che lascia spazio per un massimo di dodici salti.

Leggi anche

Termini correlati

Altro in Lightning e layer 2

Leggi questa pagina in inglese