Le terme « mempool » est la contraction des mots anglais « memory » et « pool », que l'on peut traduire en français par « mémoire » et « bassin ». Ainsi, une mempool est un espace temporaire regroupant les transactions Bitcoin en attente d'être intégrées dans un bloc. Cet espace est maintenu par chaque nœud du réseau.
Dans cet article, nous étudions la nature technique des mempools sur Bitcoin, ainsi que leur rôle dans le fonctionnement du protocole.
C’est quoi une mempool sur Bitcoin ?
Lorsque l’on souhaite réaliser une transaction sur Bitcoin, la première étape consiste à la signer grâce aux clés privées contenues dans un portefeuille. Une fois signée, la transaction est transmise à un nœud du réseau qui s'assure de sa conformité aux règles établies. Si la transaction remplit tous les critères de validité, ce nœud la propage ensuite à d'autres nœuds du réseau auxquels il est connecté. Ce processus de diffusion continue, et rapidement, la transaction devrait avoir atteint la plupart des nœuds du réseau Bitcoin.
Si la transaction dispose de suffisamment de frais, elle sera sélectionnée par un mineur pour l’intégrer dans un bloc. Dès qu'un mineur parvient à générer un bloc valide contenant la transaction, celle-ci est confirmée par la diffusion du nouveau bloc sur le réseau.
La « mempool » désigne l’espace de stockage temporaire accueillant les transactions validées par les nœuds, mais pas encore incluses dans un bloc. Tant qu'une transaction attend sa confirmation, elle réside dans les mempools des nœuds.
Bien qu'on utilise souvent le terme « la mempool » comme s'il s'agissait d'une chose unique, il serait plus juste de parler au pluriel de « mempools ». En effet, chaque nœud du réseau Bitcoin gère sa propre mempool, et il peut exister des différences entre les mempools de chaque nœud.
Comment sont gérées les mempools sur Bitcoin ?
La mempool d'un nœud évolue donc constamment en fonction des nouvelles informations qu’il reçoit. Lorsque des nouvelles transactions sont émises par des utilisateurs, le nœud les enregistre dans sa mempool. À l’inverse, quand un mineur trouve un bloc à ajouter à la blockchain, le nœud examine les transactions confirmées dans ce bloc et les retire de sa mempool.
Puisque les mempools représentent un espace de stockage pour les transactions en attente de confirmation, elles sont forcément limitées en taille. En effet, chaque nœud est libre de définir une limite maximale pour sa mempool personnelle.
Par défaut, sur Bitcoin Core (l'implémentation majoritaire du protocole Bitcoin), la limite maximale est fixée à 300 Mo. Cela signifie qu'un nœud acceptera les transactions en attente jusqu'à atteindre ce plafond. Au-delà, il entamera un processus de priorisation en fonction des frais. Les transactions offrant les frais les plus bas risquent alors d'être exclues de la mempool du nœud. Concrètement, cela se traduit par l'effacement de ces transactions de sa mémoire.
Chaque nœud a la possibilité de modifier la taille de sa mempool, en ajustant le paramètre maxmempool dans le fichier de configuration bitcoin.conf. Cependant, la plupart des nœuds conservent la limite par défaut de 300 Mo. Il existe donc une certaine homogénéité quant à la capacité des mempools sur Bitcoin.
Cette uniformité entraîne une conséquence : lorsqu'une transaction est rejetée des mempools de 300 Mo, elle est de fait écartée du réseau Bitcoin, comme si elle était annulée. Pour prévenir ce scénario, un indicateur nommé le « taux de purge » nous informe du minimum de frais de transaction nécessaire pour éviter d’être oublié par les mempools des nœuds.
Par exemple, si le cumul des transactions en attente offrant plus de 2 sats/vB atteint 300 Mo, le taux de purge sera fixé à 2 sats/vB. Les transactions proposant des frais inférieurs à ce seuil seront alors exclues des mempools. Naturellement, ce taux fluctue en fonction de la demande pour l’espace dans les blocs et de l'offre générée par l'activité de minage.
➤ Découvrir le rôle des nœuds sur Bitcoin.
Qu’est-ce qu’une règle de mempool ?
Comme expliqué dans la partie précédente, pour qu’un nœud accepte d'ajouter une nouvelle transaction non confirmée dans sa mempool, cette dernière doit se conformer à certaines règles. Ces normes se divisent en deux types :
les règles de consensus ;
et les règles de standardisation, également connues sous le terme de « règles de mempool ».
Les règles de consensus sont un peu les lois fondamentales du protocole Bitcoin. Elles garantissent la cohérence et l'intégrité de l'ensemble du système en définissant les critères selon lesquels les transactions et les blocs sont validés. Une transaction qui enfreint les règles de consensus ne peut pas être incluse dans un bloc valide. À titre d'exemple, une transaction dont une signature serait invalide ne pourrait pas être minée sur la blockchain. Ces règles de consensus sont les mêmes pour tous les utilisateurs de Bitcoin et sont appliquées de manière collective.
Les règles de standardisation, quant à elles, sont déterminées par chaque nœud Bitcoin de manière indépendante. Elles définissent des critères supplémentaires pour la structure des transactions non confirmées que le nœud est disposé à accepter dans sa mempool et à diffuser à ses pairs. Ces règles sont configurées et exécutées localement par chaque nœud. Elles peuvent varier d'un nœud à l'autre et concernent uniquement les transactions non confirmées. Ainsi, un nœud n'acceptera une transaction qu'il jugerait non standard que si celle-ci est déjà incluse dans un bloc valide.
Bien que ces règles puissent différer d'un nœud à l'autre, la plupart conservent les paramètres par défaut établis dans Bitcoin Core. Puisque cette implémentation représente plus de 98 % du réseau Bitcoin, il existe de fait une homogénéité des règles de standardisation à travers les nœuds.
Une transaction qui, bien que conforme aux règles de consensus, ne respecte pas ces règles de standardisation, aura donc des difficultés à se propager sur le réseau. Elle pourra toutefois être incluse dans un bloc valide si jamais elle atteint un mineur. Dans la pratique, ces transactions, qualifiées de non standard, sont généralement transmises directement à un mineur par des voies externes au réseau pair-à-pair de Bitcoin. C'est souvent le seul moyen pour confirmer ce type de transaction.
Pour illustrer la distinction entre ces deux types de règles, prenons l'exemple des frais de transaction. D'un point de vue consensus, il n'existe aucune exigence concernant les frais. Une transaction peut donc ne comporter aucuns frais et néanmoins être intégrée dans un bloc conforme aux règles de consensus. Le bloc sera accepté par le réseau de nœuds. Par exemple, voici une transaction minée avec aucuns frais : fd456524104a6674693c29946543f8a0befccce5a352bda55ec8559fc630f5f3
En revanche, les règles de standardisation imposent par défaut aux transactions d’allouer au minimum 1 sat/vB de frais. Ainsi, si un nœud reçoit une transaction non confirmée avec zéro frais, il va refuser de l’intégrer dans sa mempool et ne la diffusera pas aux autres nœuds.
Une transaction dépourvue de frais est donc à la fois valide selon les règles de consensus et non standard selon les règles de mempool, car la politique par défaut de Bitcoin Core pour le paramètre minRelayTxFee est de 0.00001 (en BTC/kB).
➤ En savoir plus sur les frais de transaction Bitcoin.
Conclusion
La mempool représente un réservoir temporaire au sein des nœuds destiné aux transactions Bitcoin en attente de confirmation. Chaque nœud du réseau dispose de sa propre mempool.
La capacité des mempools est restreinte, généralement à 300 Mo, conformément à la configuration standard de Bitcoin Core. Ainsi, elles ne peuvent contenir qu'un volume limité de transactions, priorisées selon leurs taux de frais. En période de congestion, un « taux de purge » est établi pour indiquer le minimum de frais nécessaire pour éviter l'exclusion d'une transaction des mempools.
Pour être intégrées dans un bloc, les transactions Bitcoin doivent respecter les règles de consensus. Une seconde couche de règles plus restrictives, appelées règles de standardisation ou de mempool, est appliquée de manière individuelle par chaque nœud. Les transactions qui ne respectent pas ces règles supplémentaires ne sont pas ajoutées dans la mempool du nœud et, par conséquent, ne sont pas propagées à travers le réseau.