Glossaire / Transactions et frais
Child pays for parent
Aussi appelé Child pays for parent, CPFP.
- Qu'est-ce que Child pays for parent ?
- « Child pays for parent » permet de sauver une transaction dont les frais sont trop faibles en dépensant sa sortie non confirmée dans une seconde transaction dont les frais couvrent les deux, car les mineurs jugent la paire ensemble.
Les mineurs ne choisissent pas les transactions une par une. Bitcoin Core les sélectionne selon le taux de frais des ancêtres depuis la version 0.13.0 en août 2016, si bien qu'un enfant généreux tire un parent avare dans le même bloc. Ce seul choix de conception donne au destinataire d'un paiement bloqué un moyen d'agir, au lieu d'attendre un expéditeur qui ne répondra peut-être jamais.
Comment cela fonctionne
Le taux de frais est un rapport, et le child pays for parent fonctionne en améliorant le rapport d'un groupe plutôt que d'une seule transaction.
Un mineur qui remplit un bloc veut le maximum de satoshis par octet virtuel. Lorsqu'une transaction du mempool dépend d'un parent non confirmé, le code de minage ne peut pas la prendre seule, il évalue donc l'ensemble des ancêtres : les frais combinés du parent et de l'enfant divisés par leur taille combinée. Si ce nombre bat la concurrence, les deux entrent. La sélection de minage de Bitcoin Core fonctionne ainsi depuis 0.13.0, la version qui a remplacé le simple tri par transaction par un tri selon le taux de frais des ancêtres.
Le calcul mérite d'être fait une fois à la main. Prenez un parent de 141 octets virtuels payant 1 sat/vB, soit 141 satoshis. Vous voulez que la paire atteigne 25 sat/vB. Un enfant à une entrée et une sortie dépensant cette pièce fait environ 111 octets virtuels, le paquet fait donc 252 octets virtuels et doit apporter 6 300 satoshis au total. Le parent a déjà contribué 141, l'enfant doit donc porter 6 159, ce qui correspond à un taux de frais d'environ 55 sat/vB pour lui seul. L'enfant paie toujours une prime, car il achète de l'espace de bloc pour les octets d'un autre en plus des siens.
Deux limites encadrent ce mécanisme. Une chaîne de transactions non confirmées ne peut pas dépasser 25 ancêtres ou descendants par défaut, et la taille totale de cette famille est plafonnée à environ 101 kilooctets, vous ne pouvez donc pas empiler des enfants indéfiniment. Et le relais n'est pas automatique : pendant des années, un enfant qui relevait un parent sous-payé était lui-même rejeté par les nœuds qui avaient déjà abandonné le parent, c'est pourquoi Bitcoin Core a ajouté en octobre 2024, dans la version 28.0, le relais opportuniste pour un parent avec un enfant, afin que la paire circule sur le réseau comme une unité.
Il existe une version plus désagréable de cette dépendance. Si quelqu'un d'autre peut rattacher un enfant volumineux à faible frais à une transaction non confirmée partagée, il peut gonfler la taille de la famille et rendre son relèvement prohibitif. Cette attaque s'appelle le pinning de transaction, et c'est la raison pour laquelle Lightning et d'autres protocoles de contrats utilisent désormais des topologies de transactions restreintes plutôt que de s'appuyer sur le simple relèvement des frais.
Pourquoi cela compte quand vous achetez du bitcoin
Le child pays for parent est le seul correctif de frais à la disposition d'un destinataire, ce qui en fait l'outil pour les retraits de plateforme qui traînent.
La séquence se déroule ainsi. Vous retirez depuis une plateforme, celle-ci a regroupé votre paiement avec cinquante autres à un taux de frais qu'elle a choisi des heures plus tôt, la pression sur les frais augmente, et le lot reste non confirmé. Le replace-by-fee ne vous sert à rien ici car la plateforme a signé ces entrées. Ce que vous pouvez faire, c'est dépenser la pièce entrante, non confirmée, vers une autre adresse de votre propre portefeuille à un taux de frais élevé. Les mineurs voient alors un paquet qui vaut la peine d'être miné, et les deux transactions se confirment ensemble.
Votre portefeuille doit coopérer. Bitcoin Core, Sparrow et Electrum vous permettent de sélectionner une pièce entrante non confirmée et de la dépenser ; plusieurs portefeuilles mobiles masquent entièrement les soldes non confirmés et ne vous offrent rien à cliquer. Si vous prévoyez de conserver de l'argent réel en auto-conservation, vérifiez ce point avant d'en avoir besoin, pas pendant une flambée des frais.
Deux mises en garde. Premièrement, un enfant dépense exactement la pièce que vous avez reçue, les frais sortent donc de l'argent que vous venez de retirer, et sur un petit retrait le coût peut représenter une part importante du montant. Deuxièmement, l'enfant crée une nouvelle pièce à une nouvelle adresse, ce qui lie les deux dans le registre public. Si le retrait faisait partie d'un dispositif soucieux de la confidentialité, le relever de cette façon est un compromis que vous devez faire en connaissance de cause.
Sauver un retrait de 0,02 BTC bloqué dans un lot à 4 sat/vB
Supposons qu'une plateforme vous envoie 0,02 BTC dans un lot payant 4 sat/vB, et qu'au matin rien en dessous de 30 sat/vB ne se confirme. Le lot est volumineux, peut-être 1 500 octets virtuels, et ce n'est pas à vous de payer pour tout. Vous avez seulement besoin que le paquet contenant votre pièce paraisse attractif.
Voici le piège qui surprend les gens : le paquet qu'un mineur évalue comprend tout le parent, ses 1 500 octets au complet, pas seulement votre part. Ajoutez un enfant de 111 octets et le paquet fait 1 611 octets virtuels, atteindre 30 sat/vB signifie donc trouver 48 330 satoshis au total. Le parent en a fourni 6 000, l'enfant doit donc environ 42 330 satoshis, ce qui, sur un retrait de 0,02 BTC, représente un coût réel.
C'est pourquoi le child pays for parent est un outil de secours plutôt qu'un outil courant, et pourquoi il fonctionne bien mieux sur un petit parent, comme un paiement envoyé directement par une personne, que sur un gros lot de plateforme. Parfois la réponse honnête est d'attendre : les taux de frais baissent la plupart des week-ends, et une transaction reste dans les mempools jusqu'à 14 jours par défaut avant que les nœuds ne l'oublient.
Child pays for parent vs replace-by-fee
Les deux relèvent des frais, mais ils sont utilisés par des parties opposées et laissent des traces différentes. Le remplacement réécrit la transaction d'origine, exige les clés qui ont signé ses entrées, produit un nouvel identifiant de transaction et fait disparaître la première version. Le child pays for parent ajoute une nouvelle transaction par-dessus, n'exige que les clés d'une sortie que vous avez reçue, ne change rien au parent et laisse les deux sur la chaîne de façon permanente.
Le remplacement est moins cher lorsqu'il est possible, car vous ne payez que les octets d'une transaction au lieu de deux. Utilisez-le chaque fois que le paiement bloqué vient de votre propre portefeuille. Recourez à l'enfant lorsque le paiement bloqué vient de quelqu'un d'autre.