ZeroMQ (ZMQ)
ZMQ est un système de notification utilisé par Bitcoin Core pour publier événements (raw transaction, raw block, etc.) à des consommateurs. Pratique pour les indexers et apps temps réel.
Définition
ZeroMQ (souvent abrégé ZMQ ou 0MQ) est une bibliothèque de messagerie asynchrone à haute performance, indépendante de Bitcoin. Elle propose des patterns de messaging (pub-sub, push-pull, req-rep) sans broker central. Depuis la version 0.10 (2013), Bitcoin Core intègre une interface ZMQ optionnelle qui publie en temps réel des événements importants pour les applications consommatrices.
Pourquoi ZMQ dans Bitcoin Core
L'interface RPC de Bitcoin Core est pull-based : un client doit interroger répétitivement (getmempoolinfo, getbestblockhash) pour détecter les changements. C'est inefficace pour les applications réactives. ZMQ est push-based : Bitcoin Core publie un événement, et tous les abonnés le reçoivent immédiatement, en latence millisecondes.
Les topics disponibles
Bitcoin Core publie plusieurs topics, chacun configurable via bitcoin.conf :
| Topic | Contenu | Usage typique |
|---|---|---|
| zmqpubrawtx | Bytes bruts de chaque tx entrant dans le mempool | Indexer mempool, exchanges |
| zmqpubrawblock | Bytes bruts de chaque nouveau bloc | Block explorers, syncers |
| zmqpubhashtx | Juste le TXID des nouvelles tx | Notifications de réception |
| zmqpubhashblock | Juste le hash du nouveau bloc | Triggers de tâches |
| zmqpubsequence (depuis Core 0.21) | Séquence d'événements mempool (entré, retiré, remplacé) | RBF tracking, mempool dynamics |
Exemple de configuration
Dans bitcoin.conf :
zmqpubrawblock=tcp://127.0.0.1:28332
zmqpubrawtx=tcp://127.0.0.1:28333
zmqpubsequence=tcp://127.0.0.1:28334
Un client Python (avec pyzmq) peut alors s'abonner :
socket = ctx.socket(zmq.SUB) socket.connect("tcp://127.0.0.1:28332") socket.setsockopt_string(zmq.SUBSCRIBE, "rawblock") while True: topic, body, seq = socket.recv_multipart() # traiter le nouveau bloc
Cas d'usage majeurs
- Lightning : LND et Core Lightning utilisent ZMQ pour détecter les fermetures de canal on-chain en quasi-temps réel.
- Block explorers (Mempool.space, Bitcoinexplorer.org) : mise à jour live.
- Marchands (BTCPay Server) : détection immédiate de paiement.
- Indexers (Electrs, Fulcrum) : mise à jour incrémentale du UTXO set.
- Bots de trading on-chain : réaction instantanée aux confirmations.
Limites
- ZMQ n'a pas de queue persistante : si le client est hors ligne, il rate les events.
- Pas d'authentification native (à protéger par firewall ou Unix socket).
- Charge réseau non négligeable pour
rawtxsur un nœud très actif (~50-200 tx/sec en pointe).
À retenir
ZMQ est l'interface "réactive" de Bitcoin Core, complémentaire de la RPC pollée. Toute infrastructure Bitcoin sérieuse l'utilise pour la latence et l'efficacité. À activer dès le bitcoin.conf si vous opérez un nœud productif.
Termes lies
- Bitcoin CoreBitcoin Core est l'implémentation de référence du protocole Bitcoin, descendante directe du code de Satoshi. Open-source, maintenue par des centaines de contributeurs. Représente >95 % des nœuds. Le « consensus » du code Bitcoin.
- RPCRPC (Remote Procedure Call) est l'interface JSON-RPC de Bitcoin Core pour interroger ou commander un nœud. Utilisé par bitcoin-cli et tous les outils.
Glossaire inspire du dictionnaire de Loic Morel sur Pandul.fr.