Aller au contenu
buybitcoinsmart

Glossaire / Nœuds et logiciels

Filtre de bloc compact

Qu'est-ce qu'un filtre de bloc compact ?
Un filtre de bloc compact est un petit résumé à codage Golomb des scripts de sortie qu'un bloc crée et dépense, publié par les nœuds complets pour qu'un portefeuille léger puisse tester des blocs sans révéler ce qu'il détient.

Spécifié dans BIP-158.

Un filtre couvre un bloc, et il répertorie des scripts de sortie plutôt que des adresses, des montants ou des identifiants de transaction. Le BIP-158 fixe le type de base à 0x00 avec un P de 19 et un M de 784 931, si bien qu'un élément absent du bloc correspond quand même environ une fois sur 784 931 essais. Comme la correspondance s'exécute sur votre appareil, le nœud qui sert le filtre n'apprend jamais quels bitcoins sont les vôtres.

Comment cela fonctionne

Un filtre de bloc compact est assemblé en hachant les scripts de sortie qu'un bloc crée et dépense dans une même plage numérique, en triant les résultats, et en n'écrivant que les écarts entre eux.

La liste des éléments est fixée par la spécification, de sorte que deux nœuds honnêtes produisent des filtres identiques octet pour octet pour le même bloc. Pour chaque transaction, le filtre prend le script de sortie précédent dépensé par chaque entrée, en ignorant la transaction coinbase, et le scriptPubKey de chaque sortie. Une catégorie est laissée de côté à dessein : les sorties commençant par OP_RETURN. Le BIP-158 les exclut pour que les filtres puissent plus tard être engagés à l'intérieur d'une sortie OP_RETURN de coinbase, comme l'engagement témoin l'est déjà, sans que l'engagement ait à se couvrir lui-même.

Le hachage utilise SipHash avec c réglé à 2 et d réglé à 4, avec pour clé les 16 premiers octets du hash de bloc dans sa forme little-endian standard. Cette clé change à chaque bloc, donc le même script se retrouve ailleurs dans chacun et personne ne peut construire une table de correspondance valable sur toute la chaîne. Chaque sortie de 64 bits est ensuite projetée dans la plage de zéro à N fois M par une multiplication et un décalage plutôt qu'une division.

La compression est ce que le nom désigne : les valeurs triées sont remplacées par leurs différences successives, et chaque différence devient un quotient en unaire suivi de 19 bits de reste, ce qui est le codage Golomb-Rice. La sortie ne peut pas être plus petite que N fois 20 bits, et elle est livrée avec le nombre d'éléments N devant, sous forme de CompactSize ; un bloc dont le filtre n'a aucun élément est stocké sous la forme d'un seul octet de zéros. Un nœud disposé à servir ces filtres annonce le bit de service NODE_COMPACT_FILTERS, défini comme 1 décalé vers la gauche de 6.

Où le voit-on

Les filtres de bloc compact sont la méthode de synchronisation choisie par les portefeuilles qui préfèrent consommer de la bande passante plutôt que de remettre une liste d'adresses au serveur de quelqu'un d'autre.

Wasabi Wallet est l'exemple dans nos propres avis : bureau uniquement, bitcoin uniquement, chaque connexion via Tor par défaut, et une synchronisation à partir des filtres pour qu'aucun serveur n'apprenne quelles adresses vous appartiennent. Nos avis lui attribuent la note de 3,6 et le signalent comme appelant à la prudence, pour une raison qui n'a rien à voir avec la synchronisation. Electrum, noté 4,4, prend l'autre voie : il vérifie par SPV auprès d'un serveur d'indexation que n'importe qui peut exploiter, et ce serveur finit par détenir la liste des adresses que vous possédez.

Deux limites méritent d'être connues avant de s'appuyer sur les filtres. Un filtre est indexé sur des scripts, donc vous ne pouvez pas y rechercher un identifiant de transaction : avec seulement un txid, il vous faut encore un nœud ou un explorateur. Et les sorties OP_RETURN sont absentes par construction, donc un logiciel qui surveille les sorties porteuses de données ne peut pas du tout être bâti sur ce mécanisme.

Filtre de bloc compact vs relais de blocs compacts

Un filtre de bloc compact indique à un portefeuille si un bloc vaut la peine d'être téléchargé ; le relais de blocs compacts, spécifié dans le BIP152, réduit un bloc déjà en route entre deux nœuds complets.

Les publics diffèrent. Les filtres sont par bloc, déterministes, indexés sur les 16 premiers octets du hash de bloc, et téléchargés par des clients qui ne détiennent aucune chaîne. Le relais remplace la plupart des transactions d'un bloc par des identifiants de 48 bits dont la clé est tirée de l'en-tête de bloc haché avec un nonce que l'émetteur choisit, et il n'épargne rien à un récepteur dont la mempool ne contient pas déjà ces transactions. L'un évite à un téléphone de télécharger des blocs dont il n'a pas besoin ; l'autre évite à un nœud de recevoir deux fois des transactions. Le mot commun « compact » est toute la ressemblance.

À ne pas confondre avec

Questions fréquentes

Un filtre de bloc compact peut-il révéler à quelqu'un quelles adresses mon portefeuille surveille ?

Non. Le filtre est construit par le nœud à partir du contenu du bloc lui-même et publié pour tout le monde, donc rien au sujet de votre portefeuille ne quitte votre appareil. Le pair qui vous sert un bloc correspondant apprend bel et bien que vous avez demandé ce bloc précis, ce qui est un signal bien plus faible qu'une liste d'adresses.

Pourquoi mon portefeuille télécharge-t-il parfois un bloc qui ne me concerne pas ?

Parce que les filtres sont probabilistes. Un élément que vous testez et qui n'est pas dans le bloc correspond quand même environ une fois sur 784 931 essais, donc un portefeuille qui surveille de nombreux scripts recueille quelques faux positifs, télécharge ces blocs et n'y trouve rien qui lui appartienne.

Puis-je rechercher un identifiant de transaction dans un filtre de bloc compact ?

Non. Un filtre basique BIP-158 contient uniquement des scripts de sortie : le scriptPubKey de chaque sortie à l'exception des sorties OP_RETURN, plus le script de sortie précédent dépensé par chaque entrée non coinbase. Un identifiant de transaction ne s'y trouve pas, vous avez donc toujours besoin d'un nœud ou d'un explorateur de blocs.

À lire ensuite

Sources

Dernière vérification le 6 septembre 2026.

Termes associés

Plus de termes : Nœuds et logiciels

Lire cette page en anglais