Aller au contenu
buybitcoinsmart

Glossaire / Lightning et couche 2

Millisatoshi

Aussi appelé msat.

Qu'est-ce qu'un millisatoshi ?
Un millisatoshi est un millième de satoshi, l'unité que Lightning utilise pour compter les soldes de canaux et les frais de routage, et un montant que la blockchain bitcoin elle-même ne peut pas enregistrer.

Lightning tient ses comptes un cran plus fin que la blockchain, au millième de satoshi. Le BOLT 2 fixe le rapport sans détour : push_msat ne peut pas dépasser 1000 fois funding_satoshis, et l'exécution on-chain n'est possible que pour des montants entiers de satoshis. Tout reste de millisatoshi dans votre solde est réel à l'intérieur du canal et est arrondi au moment où ce canal se ferme.

Comment cela fonctionne

Un millisatoshi est une unité de compte à l'intérieur d'un canal Lightning plutôt qu'une unité de règlement sur la blockchain.

Chaque montant de paiement à l'intérieur d'un canal est écrit en millisatoshi et le dit dans le nom de son champ. Le message qui ajoute un paiement à un canal, update_add_htlc, porte un amount_msat de 64 bits, et l'ouverture d'un canal négocie push_msat, htlc_minimum_msat et max_htlc_value_in_flight_msat dans la même unité. Le BOLT 2 énonce la limite à côté de la définition : les montants sont en millisatoshi, "though on-chain enforcement is only possible for whole satoshi amounts greater than the dust limit", et la transaction d'engagement les arrondit à l'inférieur.

Le facteur de conversion n'est pas une légende. Un nœud qui ouvre un canal doit fixer push_msat à un maximum de 1000 fois funding_satoshis, et le pair récepteur doit faire échouer le canal si push_msat est supérieur à funding_satoshis fois 1000. Le rapport de 1 000 à 1 est inscrit dans la poignée de main des deux côtés.

Les factures héritent du même plancher. Un montant BOLT 11 est exprimé en bitcoin avec une lettre multiplicatrice, et le plus petit d'entre eux, p pour pico, porte une règle que les autres n'ont pas : le dernier chiffre du montant doit être zéro. Un pico bitcoin est un dixième de millisatoshi, donc le zéro final force la demande sur un nombre entier de millisatoshis. La spécification en donne la raison clairement, que les montants inférieurs au millisatoshi ne peuvent pas être transférés sur le réseau puisque les HTLC sont libellés en millisatoshis, et les vecteurs de test incluent une facture rejetée sous l'intitulé "Invalid sub-millisatoshi precision".

Les trois décimales supplémentaires gagnent leur place dans l'arithmétique des frais. Un nœud de transfert facture un taux proportionnel exprimé en millionièmes de satoshi par satoshi transféré, donc un taux de 1 sur un paiement de 1 000 satoshis revient à un seul millisatoshi. Arrondissez cela à un satoshi entier et vous avez soit multiplié les frais par mille, soit jeté ces frais.

Où le voir

Les chiffres en millisatoshis apparaissent partout où un outil Lightning montre ses chiffres réels au lieu d'un affichage arrondi.

Décodez une facture BOLT 11 et les indications de route apparaissent dans cette unité. L'exemple travaillé de la spécification elle-même liste deux sauts facturant des frais de base de 1 millisatoshi et 2 millisatoshi, et sa facture d'exemple pour une commande de la boutique Blockstream porte une indication de route dont les frais de base sont de 1000, soit un satoshi entier. La mise à jour de gossip d'un canal publie htlc_minimum_msat et fee_base_msat dans la même unité, donc un tableau de bord qui lit ces champs affiche un nombre mille fois plus grand que le chiffre en satoshis à côté.

Les portefeuilles grand public masquent l'unité mais pas l'arithmétique. Phoenix publie une table de frais plutôt que de découvrir les frais au moment du paiement, et son envoi Lightning coûte 0,4 pour cent plus 4 satoshis ; sur un paiement de 137 satoshis, la part en pourcentage ressort à 548 millisatoshi, une quantité sans aucune représentation on-chain. Muun présente l'on-chain et Lightning comme un seul solde, ce qui masque complètement la frontière sans la supprimer.

Millisatoshi vs satoshi

Un satoshi est le plus petit montant que la blockchain bitcoin peut enregistrer, tandis qu'un millisatoshi en est un millième et n'existe que dans les messages de Lightning et dans les registres que ses deux pairs tiennent.

La différence se fait sentir à la fermeture. Un solde de canal de 1 234 567 millisatoshi est exécutable comme 1 234 satoshis et pas plus, parce que la transaction d'engagement qui règle le canal on-chain paie des satoshis entiers ; le reste de 567 millisatoshi n'a aucune sortie on-chain où loger, et il n'est dépensable que tant que le canal reste ouvert. Cet écart vaut une fraction de centime, et c'est encore la raison pour laquelle les deux unités ne peuvent pas être échangées l'une contre l'autre dans quoi que ce soit qui touche à la blockchain.

À ne pas confondre avec

Questions fréquentes

Combien de millisatoshis y a-t-il dans un satoshi ?

Exactement 1 000. La spécification Lightning inscrit le rapport dans la poignée de main d'ouverture du canal : un nœud doit fixer push_msat à un maximum de 1000 fois funding_satoshis, et le pair qui reçoit ce message doit faire échouer le canal si push_msat est supérieur à funding_satoshis fois 1000.

Puis-je réellement retirer un millisatoshi ?

Non, parce que la blockchain bitcoin n'enregistre que des satoshis entiers. Un solde en millisatoshis est réel tant qu'un canal Lightning est ouvert, mais le BOLT 2 indique que l'exécution on-chain n'est possible que pour des montants entiers de satoshis au-dessus de la limite de poussière, et la transaction d'engagement arrondit le reste à l'inférieur.

Pourquoi Lightning s'embarrasse-t-il d'une unité aussi petite ?

Les frais de routage proportionnels sont exprimés en millionièmes de satoshi par satoshi transmis, de sorte que les frais sur un petit paiement se situent entre deux satoshis. Un taux de 1 sur un paiement de 1 000 satoshis équivaut à un millisatoshi, et l'arrondir à un satoshi entier effacerait les frais ou les multiplierait par mille.

À lire ensuite

Termes associés

Plus de termes : Lightning et couche 2

Lire cette page en anglais