Blockchain/Niveau II · Mécanismes/2.2 Transactions/Leçon 5
Le mempool
La salle d’attente locale que chaque nœud gère de manière indépendante
MatérielUn explorateur de blocs avec une vue du mempool (par ex. mempool.space)Facultatif : un nœud Bitcoin Core (« getmempoolinfo »)
Curiosité
- Pourquoi une transaction valide pour un nœud complet est-elle rejetée par son voisin ?
- Qu’advient-il des transactions aux frais les plus bas lorsqu’un nœud atteint sa limite de mémoire ?
- Comment les mineurs décident-ils quelles transactions non confirmées méritent de figurer dans leur prochain bloc ?
Explorer
- Le mempool n’est pas une base de données centrale ; c’est une liste locale, en mémoire, gérée indépendamment par chaque nœud complet. Bitcoin Core supprime les transactions non confirmées qui s’attardent trop longtemps : au bout de 72 heures lors de l’introduction de l’expiration dans la version 0.12, et de deux semaines (336 heures) depuis la version 0.14. Deux nœuds qui ont reçu les transactions dans un ordre différent, ou qui utilisent des paramètres différents, ont des mempools légèrement différents.
- Chaque nœud applique les règles de consensus (scripts valides, absence de double dépense, etc.) ainsi que des règles de politique locale, comme les taux de frais minimaux et les paramètres RBF. Si une transaction n’atteint pas le seuil minimal de taux de frais d’un nœud donné, ce nœud la rejette, ou l’évince si elle y figure déjà, même si d’autres nœuds l’acceptent.
- Par défaut, Bitcoin Core limite la taille du mempool à 300 Mo via le paramètre « maxmempool » du fichier bitcoin.conf. Lorsque cette limite est atteinte, le nœud relève dynamiquement son seuil minimal de frais pour faire de la place à des transactions plus rentables, en expulsant d’abord les moins intéressantes. Exécutez « getmempoolinfo » et observez comment « mempoolminfee » dépasse la valeur statique « minrelaytxfee » lorsque le mempool se remplit.
- Les mineurs sélectionnent les transactions dans leur propre mempool pour construire leurs blocs, en donnant la priorité aux frais par octet virtuel les plus élevés, évalués conjointement avec ceux des éventuelles transactions parentes non confirmées. Lorsqu’un bloc valide arrive, chaque nœud retire de son mempool les transactions confirmées ainsi que toutes celles qui entrent en conflit avec elles.
- Politique n’est pas consensus. Une transaction que la plupart des nœuds refusent de relayer, parce qu’elle se situe sous leur seuil de frais ou utilise une forme non standard, peut tout de même être valide dans un bloc, et certains mineurs acceptent directement de telles transactions. Le mempool de chaque nœud n’est donc qu’une estimation du contenu du prochain bloc, et différents nœuds peuvent diverger à la marge.
- À l’arrêt, Bitcoin Core enregistre son mempool dans un fichier, mempool.dat, et le recharge au démarrage en écartant tout ce qui n’est plus valide, si bien qu’un nœud redémarré ne repart pas avec un mempool vide. Pour observer le mempool à l’œuvre, ouvrez mempool.space : ses blocs projetés montrent ce que les mineurs sont susceptibles d’inclure ensuite, et chaque nouveau bloc vide la couche supérieure.
Faits clés
- Le mempool est un pool de mémoire local propre à chaque nœud, et non un service universel unique.
- Par défaut, Bitcoin Core fixe à 300 Mo la taille maximale du mempool via « maxmempool ».
- Par défaut, Bitcoin Core supprime les transactions non confirmées au bout de deux semaines (336 heures, depuis la version 0.14).
- Les nœuds appliquent à la fois les règles de consensus et des règles de politique locale, dont les taux de frais minimaux.
- Lorsque le mempool est plein, les nœuds relèvent dynamiquement leurs seuils de frais pour évincer les transactions les moins rentables.
- Bitcoin Core enregistre son mempool dans « mempool.dat » à l’arrêt, afin qu’il soit conservé après un redémarrage.
Exercice neuf, six, trois, un
9RassemblerListez 9 transactions non confirmées distinctes à partir de la vue du mempool d’un explorateur de blocs. Notez leur taux de frais actuel, leur taille en octets virtuels et leur nombre de confirmations (zéro pour toutes).
6RegrouperRegroupez les 9 transactions en 6 catégories selon la raison pour laquelle elles pourraient être bloquées : taux de frais faible, taille importante, signalisation RBF, entrées non confirmées, statut d’orpheline, ou autres raisons liées aux règles de politique.
3DistillerRéduisez les 6 groupes à 3 raisons fondamentales pour lesquelles un nœud rejetterait ou évincerait une transaction de son mempool alors qu’elle est valide au regard du consensus.
1CristalliserRédigez 1 phrase expliquant comment les différences de politique locale entre les nœuds créent une vision fragmentée et non universelle des transactions en attente sur le réseau.
Vérification des faits
Les dates, les chiffres et les affirmations ont été vérifiés à l’aide des sources publiées listées ci-dessous.
- Bitcoin Core documentation: -maxmempool and -mempoolexpiry configuration parameters
- A. M. Antonopoulos & D. A. Harding, Mastering Bitcoin, 3rd ed. (2023)
- mempool.space documentation on real-time mempool visualization