Aller au contenu
buybitcoinsmart

Glossaire / Lightning et couche 2

Identifiant court de canal

Aussi appelé scid.

Qu'est-ce qu'un identifiant court de canal ?
Un identifiant court de canal est le pointeur de 8 octets que Lightning utilise pour nommer un canal, en condensant la hauteur de bloc de la transaction de financement, son index dans ce bloc et son index de sortie.

Lightning nomme un canal public d'après l'emplacement de sa sortie de financement dans la blockchain, et non d'après une étiquette arbitraire. Trois octets portent la hauteur de bloc, trois l'index de transaction et deux l'index de sortie, soit 64 bits au total, écrits pour les humains sous la forme 539268x845x1. Cette coordonnée est ce qui vous permet de vérifier on-chain un canal que votre portefeuille utilise pour router, sans faire confiance au tableau de bord de quiconque.

Comment cela fonctionne

Les trois composantes d'un identifiant court de canal sont concaténées du plus significatif au moins significatif : la hauteur de bloc de la transaction de financement, l'index de cette transaction dans le bloc et l'index de la sortie qui paie le canal. Les largeurs fixes plafonnent la hauteur et l'index de transaction à 16 777 215 et l'index de sortie à 65 535.

Écrits pour une personne, les nombres sont imprimés en décimal et joints par un x minuscule, si bien qu'un canal sur la sortie 1 de la transaction à l'index 845 dans le bloc de hauteur 539 268 s'écrit 539268x845x1. Les raisons données par la spécification : un x minuscule est visiblement plus petit qu'un chiffre dans la plupart des polices, ce qui permet à l'œil de séparer les parties, et un double-clic sélectionne l'identifiant entier.

Une fois condensé, c'est un simple nombre de 64 bits, et le vecteur de test de BOLT 11 le montre : l'indication de route 66051x263430x1800 correspond à la séquence d'octets 01 02 03 04 05 06 07 08 dans cet ordre, car 66051 vaut 0x010203, 263430 vaut 0x040506 et 1800 vaut 0x0708.

Comme il s'agit d'une position et non d'un hachage, un identifiant court de canal cesse d'être vrai si le bloc qu'il désigne change. C'est pourquoi un canal n'est pas annoncé tant que sa transaction de financement n'a pas au moins 6 confirmations, et pourquoi un nœud devrait ignorer une annonce dont la sortie en a moins. Le splicing déplace lui aussi l'identifiant : un canal ayant fait l'objet d'un splice est annoncé de nouveau sous l'identifiant court de canal de la transaction de splice, tandis que les nœuds continuent de relayer les paiements qui utilisent encore l'ancien.

Un canal que personne n'a annoncé n'a pas d'identifiant public, si bien que les pairs s'échangent un alias à la place ; une mise à jour qui en porte un doit définir son indicateur dont_forward et ne doit jamais être transmise, pour des raisons de confidentialité.

Où le voir

Les identifiants courts de canal sont la couche d'adressage du gossip Lightning, et ils apparaissent dans chaque message concernant un canal précis.

Le type de message 259, announcement_signatures, en porte un lorsque deux pairs s'accordent à publier leur canal. Le type 256, channel_announcement, porte celui que tous les autres nœuds utilisent pour retrouver la sortie de financement on-chain. Le type 258, channel_update, le répète à chaque changement de frais ou d'expiration, une fois par sens. Le type 261, query_short_channel_ids, demande à un pair les annonces derrière une liste de ceux-ci, envoyée sous forme de tableau croissant avec l'octet d'encodage 0 ; l'octet d'encodage 1 désignait autrefois la compression zlib et est désormais interdit sans exception. Un nœud peut élaguer tout canal dont la mise à jour la plus récente, dans l'un ou l'autre sens, date de plus de deux semaines, soit 1 209 600 secondes.

Le seul endroit où un utilisateur ordinaire en rencontre un est une demande de paiement : le champ r d'une facture BOLT 11 porte des indications de route, et chaque saut est une clé publique de nœud, un identifiant court de canal de 64 bits, deux montants de frais et un delta d'expiration. L'exemple détaillé de la spécification pointe vers 589390x3312x1.

Identifiant court de canal vs Outpoint

Un identifiant court de canal et un outpoint nomment tous deux une sortie de transaction, et ils le font en partant de directions opposées. Un outpoint fait 36 octets, un identifiant de transaction de 32 octets suivi d'un index de 4 octets, et nomme la sortie par la transaction qui l'a créée ; un identifiant court de canal fait 8 octets et nomme la même sortie par l'endroit où elle s'est trouvée.

Le compromis est entre taille et stabilité. Un outpoint est valide dès qu'une transaction existe, même non confirmée, et ne change jamais. Un identifiant court de canal n'existe pas tant que la transaction n'est pas dans un bloc, et une réorganisation qui la remine à une autre hauteur ou à une autre position produit un identifiant différent pour le même canal. Lightning l'accepte parce que la coordonnée sert aussi d'instruction pour retrouver la sortie, et que 8 octets pour un canal se propagent à un coût bien moindre que 36.

À ne pas confondre avec

Questions fréquentes

Puis-je retrouver un canal Lightning sur un explorateur de blocs à partir de son identifiant court de canal ?

Oui. Séparez l'identifiant à chaque lettre x : le premier nombre est la hauteur de bloc, le deuxième est l'index de la transaction dans ce bloc et le troisième est l'index de la sortie qui finance le canal. Ces trois nombres vous mènent à la transaction de financement sur tout explorateur qui liste les transactions d'un bloc dans l'ordre.

Pourquoi l'identifiant court d'un canal a-t-il changé ?

Presque toujours parce que le canal a fait l'objet d'un splice. Un splice dépense l'ancienne sortie de financement vers une nouvelle, et le canal est annoncé de nouveau sous l'identifiant court de canal de la transaction de splice, tandis que les nœuds continuent de relayer les paiements qui utilisent encore l'ancien identifiant. Une réorganisation de la blockchain qui remine la transaction de financement ailleurs le changerait aussi.

Un identifiant court de canal est-il la même chose qu'un identifiant de canal ?

Non. Ce sont deux champs distincts, et le message announcement_signatures de BOLT 7 porte les deux côte à côte. Seul l'identifiant court de canal est une coordonnée dans la blockchain.

À lire ensuite

Termes associés

Plus de termes : Lightning et couche 2

Lire cette page en anglais