Aller au contenu
buybitcoinsmart

Glossaire / Lightning et couche 2

Transaction d'engagement

Qu'est-ce qu'une transaction d'engagement ?
Une transaction d'engagement est la transaction bitcoin signée et non diffusée que chaque partie d'un canal Lightning détient, qui dépense la sortie de financement selon la répartition actuelle des soldes.

Chaque paiement Lightning remplace les transactions d'engagement des deux côtés par une nouvelle paire, et l'ancienne paire est révoquée plutôt que supprimée. Le BOLT 3 fixe le poids attendu d'une transaction d'engagement de canal à ancres à 1 124 unités de poids plus 172 pour chaque paiement encore en cours. En détenir une, c'est détenir une sortie que vous pouvez prendre seul, à des frais que votre pair a acceptés des semaines plus tôt.

Comment cela fonctionne

Une transaction d'engagement a exactement une entrée, la sortie de financement 2-sur-2 du canal, et ses sorties correspondent à la répartition actuelle de cet argent.

Il en existe deux à tout moment, une par pair, et elles ne sont délibérément pas la même transaction. Chaque copie retarde le paiement de son propre détenteur derrière un verrou OP_CHECKSEQUENCEVERIFY de to_self_delay blocs tout en payant l'autre côté plus tôt, de sorte que celui qui diffuse est celui qui attend. Avec option_anchors, même l'autre côté n'est pas instantané : la sortie to_remote porte un verrou CSV d'un bloc, ajouté pour qu'aucun pair ne puisse bloquer l'engagement en y attachant des transactions enfants bon marché.

La transaction cache son propre compteur. Le BOLT 3 fixe le champ version à 2, prend le numéro d'engagement de 48 bits, le combine par XOR avec les 48 bits inférieurs du SHA256 des deux valeurs payment_basepoint issues de open_channel et accept_channel, puis répartit le résultat sur deux champs : les 24 bits supérieurs vont dans la sequence de l'entrée derrière l'octet 0x80, les 24 bits inférieurs dans le locktime derrière 0x20. Les deux pairs le recalculent en un instant. Quiconque d'autre observe la chaîne voit deux nombres d'apparence arbitraire et ne peut pas compter combien de paiements le canal a transportés.

C'est le financeur qui paie la sortie. Avant qu'une sortie ne soit disposée, les frais de base sont soustraits du côté qui a financé le canal, et avec option_anchors deux sorties d'ancre fixes de 330 satoshis chacune sortent également de ce même côté. Les sorties sont ensuite triées par valeur, de la plus petite à la plus grande, puis par scriptPubKey comparé octet par octet, puis par cltv_expiry pour les sorties HTLC, afin que les deux pairs aboutissent à une transaction identique octet par octet sans jamais se l'envoyer.

Tout ce qui est trop petit pour valoir la peine d'être écrit n'est pas écrit. Le BOLT 3 appelle ces sorties des "trimmed outputs" (sorties tronquées) : un HTLC dont le montant, moins les frais que coûterait sa propre transaction de second étage, tombe sous le dust_limit_satoshis de son propriétaire n'obtient aucune sortie du tout, et l'argent devient des frais de mineur au lieu du solde de quiconque. Les seuils que le BOLT 3 liste sont ceux de Bitcoin Core : 330 satoshis pour "pay to witness script hash", 294 pour "pay to witness pubkey hash", 240 pour "pay to anchor". Ce sont un plancher plutôt que le réglage lui-même, et le BOLT 3 demande aux canaux à ancres de se situer au-dessus, car sur ces canaux la transaction de second étage ne paie aucun frais et cesse donc de contribuer du tout à la troncature.

La forme la plus récente de la transaction jette les frais intégrés. Là où zero_fee_commitments s'applique, le champ version devient 3, feerate_per_kw est fixé à 0, et une sortie shared_anchor unique portant le script pay to anchor OP_1 <0x4e73> est ajoutée à cette limite de 240 satoshis. N'importe qui peut la dépenser, de sorte que l'engagement atteint un bloc par child pays for parent au prix que le marché des frais pratique le jour venu, plutôt qu'au prix qu'il avait lors de la signature de la paire.

Pourquoi cela compte quand vous achetez du bitcoin

La transaction d'engagement est le moment où un solde Lightning cesse d'être un nombre à l'écran et devient des satoshis moins des frais, et deux de ses règles coûtent de l'argent réel.

La première est la troncature. Les petits montants à l'intérieur d'un canal ne sont pas arrondis, ils sont supprimés, et l'exemple de calcul de la spécification elle-même livre 1 800 satoshis de paiements en cours au mineur parce que chacun tombait sous la limite de poussière plus le coût de son second étage. Cela fixe un plancher à ce qui vaut la peine d'être déplacé sur Lightning. Phoenix, le portefeuille ACINQ dans nos avis, facture 1 000 satoshis pour créer un canal et indique que se remettre d'une fermeture forcée prend environ 720 blocs, soit environ cinq jours. Un canal financé avec quelques milliers de satoshis est une arithmétique qui ne tombe jamais juste.

La seconde est que les frais à l'intérieur d'une transaction d'engagement ont été choisis au moment de sa signature. Le solde du financeur a été amputé au feerate_per_kw de ce jour-là, et si la mempool a bougé depuis, la transaction qui se trouve dans votre portefeuille peut ne pas se confirmer au prix qu'elle porte. Les ancres existent exactement pour cela, et zero_fee_commitments existe pour déplacer la décision au moment de la diffusion.

Aucune de ces deux règles ne vous atteint si quelqu'un d'autre détient le canal. Strike, noté 4,6 dans nos avis sur les plateformes d'échange, est natif Lightning et dépositaire tant que votre solde reste dans l'application, et Coinbase facture ses retraits Lightning en dessous d'un envoi on-chain pour les petits montants et au-dessus pour les gros. Ce que vous abandonnez en échange est documenté dans les avis sur les portefeuilles : Wallet of Satoshi, noté 2,7 et signalé comme appelant à la prudence, a cessé de servir les clients des États-Unis le 23 novembre 2023, et a ensuite retiré son service Lightning dépositaire dans toute l'Union européenne à mesure que les périodes de transition de MiCA se fermaient. Aucune transaction d'engagement vous appartenant n'existait pour prendre le relais.

Parcours de l'exemple de frais du BOLT 3

Le BOLT 3 publie un calcul de frais, et le suivre de bout en bout montre où va réellement l'argent d'un canal.

La configuration est un feerate_per_kw de 5 000, un dust_limit_satoshis de 546, et quatre paiements en cours : des HTLC offerts de 5 000 et 1 000 satoshis, des HTLC reçus de 7 000 et 800 satoshis. À ce taux de frais, une transaction de délai HTLC coûte 3 315 satoshis et une transaction de succès HTLC coûte 3 515.

Le poids part de 724, le chiffre pour un canal sans option_anchors, la forme que tout cet exemple suppose. Le HTLC offert de 5 000 satoshis franchit 546 plus 3 315, il obtient donc une sortie et le poids monte à 896. Le HTLC offert de 1 000 satoshis ne le franchit pas et est tronqué. Le HTLC reçu de 7 000 satoshis franchit 546 plus 3 515, il obtient donc une sortie et le poids monte à 1 068. Le HTLC reçu de 800 satoshis est tronqué.

Les frais de base sont 5 000 multiplié par 1 068 et divisé par 1 000, soit 5 340 satoshis, prélevés sur la seule sortie du financeur. Les frais qu'un mineur perçoit réellement sont 7 140 satoshis, car les deux HTLC tronqués s'y ajoutent. Sur 13 800 satoshis en cours, 1 800 cessent d'exister comme solde de quiconque, et le total peut monter plus haut encore si la sortie du financeur lui-même tombe sous la limite de poussière une fois les frais prélevés.

Transaction d'engagement vs transaction de pénalité

Une transaction d'engagement paie une répartition que les deux pairs ont signée ; une transaction de pénalité prend tout le canal à un pair qui a publié une répartition qu'il avait déjà révoquée.

Les deux dépensent des choses différentes. Une transaction d'engagement dépense la sortie de financement. Une transaction de pénalité dépense les sorties d'une transaction d'engagement qui s'est révélée périmée, en utilisant la clé de révocation que son détenteur a remise lorsque cet état a été remplacé. Le script to_local inscrit les deux avenirs dans une seule sortie : une branche exige la clé retardée après to_self_delay blocs, l'autre exige une signature de révocation et fonctionne sans aucun délai.

Transaction d'engagement vs fermeture forcée

Une transaction d'engagement est un objet que vous détenez ; une fermeture forcée est l'événement par lequel quelqu'un en diffuse une.

La distinction compte parce que vous n'êtes pas forcément celui qui agit. Si votre pair force la fermeture sur un état courant, sa copie paie votre côté sans aucune action de votre part, sous la seule réserve du verrou CSV d'un bloc que les canaux à ancres imposent à la sortie to_remote. Votre propre copie est la solution de repli face à un pair devenu silencieux, et c'est la copie qui vous fait attendre la fin du délai. Détenir une transaction d'engagement est normal, continu et gratuit ; en diffuser une est un événement que vous préféreriez ne jamais connaître.

À ne pas confondre avec

Questions fréquentes

Une transaction d'engagement est-elle réellement diffusée un jour ?

Généralement non. Un canal qui se ferme de façon coopérative signe une autre transaction, moins coûteuse, et la paire d'engagements est simplement abandonnée. Une transaction d'engagement n'est diffusée que lorsqu'un côté renonce à la coopération, ce qui correspond à une fermeture forcée.

Pourquoi ai-je récupéré moins que mon solde Lightning lors de la fermeture d'un canal ?

Deux règles prélèvent une part. Les frais de base sont prélevés sur le côté qui a financé le canal, et tout montant inférieur à la limite de poussière fixée par les deux pairs, que le BOLT 3 situe à 330 satoshis et plus pour le type de script utilisé par les sorties Lightning, n'est pas inscrit comme sortie du tout et revient au mineur à la place.

Mon partenaire de canal peut-il réécrire ma transaction d'engagement sans moi ?

Non. Chaque nouvel état nécessite les deux signatures, donc aucun solde ne change si vous ne le signez pas. Ce que votre partenaire peut faire, c'est diffuser un ancien état qu'il a déjà signé, ce qui est le cas que la clé de révocation et la fenêtre de délai ont pour rôle de punir.

À lire ensuite

Termes associés

Plus de termes : Lightning et couche 2

Lire cette page en anglais