Glossaire / Lightning et couche 2
Indication de route
- Qu'est-ce qu'une indication de route ?
- Une indication de route est une entrée d'une facture Lightning qui nomme un nœud public, un canal et ses frais, pour qu'un payeur puisse joindre un destinataire dont les canaux ne sont pas annoncés.
Un canal privé n'apparaît jamais dans le graphe de gossip public, une facture doit donc porter elle-même le dernier segment de la route. Le BOLT 11 rend une indication obligatoire lorsque le bénéficiaire n'a aucun canal public, et chaque saut coûte 51 octets : identifiant de nœud, identifiant de canal, frais de base, frais proportionnels, delta CLTV. Un retrait vers un portefeuille sur téléphone sans canal annoncé ne fonctionne que parce que ces octets sont là.
Comment cela fonctionne
Une indication de route voyage dans le champ balisé BOLT 11 écrit avec le caractère r, qui contient une liste plutôt qu'une valeur unique.
Chaque entrée est constituée de cinq valeurs mises bout à bout : un pubkey de 264 bits, un short_channel_id de 64 bits, un fee_base_msat de 32 bits, un fee_proportional_millionths de 32 bits et un cltv_expiry_delta de 16 bits. Cela fait 408 bits, soit exactement 51 octets par saut. Les entrées forment une route dans le sens aller d'un nœud public vers le bénéficiaire, et chaque pubkey nomme le nœud au début de son canal plutôt qu'à la fin.
Les trois dernières valeurs sont celles qu'un nœud public diffuserait dans channel_update sous le BOLT 7. Un canal privé ne diffuse rien, la facture est donc le seul endroit où un payeur apprend ce que ce saut facture.
La règle pour le rédacteur est étroite : si aucun canal public n'est associé à la clé du bénéficiaire, la facture doit porter au moins un champ r. Un rédacteur peut en inclure plusieurs pour offrir des routes alternatives, les plus préférées en premier. Le plafond est le champ balisé lui-même, dont les données ne peuvent pas dépasser 1023 groupes de 5 bits, soit 639 octets, ce qui laisse la place à au plus douze sauts dans un champ.
Les indications sont un conseil plutôt qu'une instruction : le payeur peut utiliser la séquence de canaux donnée, et la spécification appelle ce champ "limited routing assistance". Le blinding de route dans le BOLT 4 est la réponse ultérieure au même problème. Au lieu d'un identifiant de nœud et d'un identifiant de canal en clair, le destinataire remet à l'expéditeur un point d'introduction ainsi que des identifiants de nœud modifiés et des blobs chiffrés pour chaque saut, de sorte que l'expéditeur obtient un chemin utilisable sans apprendre qui s'y trouve.
Où cela apparaît
Les indications de route sont ce qu'un décodeur de facture affiche comme informations de routage supplémentaires pour une route privée.
Le vecteur de test mainnet de la spécification est lui-même une facture de 20 milli-bitcoin routée via deux sauts indiqués : le canal 66051x263430x1800 avec des frais de base de 1 millisatoshi, 20 parties par million et un delta CLTV de 3 blocs, puis 197637x395016x2314 avec 2 millisatoshis, 30 parties par million et 4 blocs. Ces deux sauts occupent 164 des caractères bech32 de la facture, plus que le hachage de paiement et le secret de paiement réunis.
La même structure se retrouve en pratique. Phoenix, l'un des 41 portefeuilles que ce site passe en revue, garde ses canaux avec ACINQ plutôt qu'avec le graphe ouvert, et là où ces canaux ne sont pas annoncés, la règle ci-dessus oblige chaque facture à nommer le nœud d'ACINQ. La FAQ d'ACINQ, citée dans cet avis, concède déjà qu'ACINQ connaît la destination et le montant de vos paiements ; une indication étend cette divulgation vers l'extérieur, puisque celui qui vous paie apprend chez quel prestataire vous avez vos fonds. Faites un retrait via Lightning depuis une plateforme d'échange telle que Strike et c'est la plateforme, en tant que payeur, qui paie les frais de base et proportionnels du saut indiqué, lus dans la facture émise par votre portefeuille.
Indication de route vs liquidité entrante
Une indication de route dit à un payeur comment vous trouver ; la liquidité entrante décide si le paiement passe une fois arrivé.
Les deux échouent de façons qui paraissent identiques de l'extérieur, et une seule se corrige en modifiant une facture. Une indication peut être parfaitement formée et indiquer les bons frais, et le paiement échoue quand même au dernier saut parce que votre côté de ce canal n'a pas de place. Phoenix publie le prix pour corriger cela : recevoir est gratuit lorsque vous avez déjà de la liquidité entrante, et coûte 1 % plus des frais de minage lorsque le portefeuille doit passer on-chain pour faire de la place. Si un paiement échoue alors que l'expéditeur affirme que la route a été trouvée, vérifiez la capacité avant d'accuser la facture.