141 / 691NEUTRINO

Compact Block Filters

Filtres de blocs compacts selon BIP 157 et BIP 158

Compact Block Filters permet à un portefeuille léger de trouver localement les blocs pertinents avec de petits filtres déterministes. BIP 157 couvre transport et vérification ; BIP 158 définit contenu et encodage.

Compact Block Filters désigne des index probabilistes de blocs pour clients légers. Le portefeuille télécharge un filtre et teste ses scripts localement, au lieu d’envoyer un filtre personnel d’adresses au serveur comme dans BIP 37. BIP 157 et BIP 158 sont Deployed à la révision, mais ne remplacent pas la validation complète du consensus.

BIP 157 définit getcfilters/cfilter, getcfheaders/cfheaders et getcfcheckpt/cfcheckpt. BIP 158 spécifie le filtre basic de type 0x00. Le client synchronise d’abord les en-têtes de blocs, puis ceux des filtres et les filtres ; en cas de correspondance il récupère le bloc et trouve les transactions réelles. Cela diffère de Compact Blocks de BIP 152 pour le relais rapide des blocs. [BIP 157 — Client Side Block Filtering] [BIP 158 — Compact Block Filters for Light Clients]

Le filtre contient les scriptPubKey des nouvelles sorties sauf les scripts commençant par OP_RETURN, ainsi que les scripts des sorties précédentes dépensées par les entrées, hors entrée coinbase. Les éléments vides sont omis et forment un ensemble. Ce n’est pas un index de tous les txid, chaînes d’adresses ou données witness ; sa construction exige aussi les sorties précédentes dépensées. [BIP 158 — Compact Block Filters for Light Clients]

Les valeurs SipHash-2-4 sont ramenées à N × M, triées et leurs différences encodées par Golomb-Rice. Basic utilise P=19 et M=784931 ; la clé est constituée des 16 premiers octets du hash de bloc en little-endian. La sérialisation commence par N en CompactSize. Une requête hors ensemble peut correspondre à tort avec une probabilité d’environ 1/M ; un filtre correct n’omet aucun élément inclus. [BIP 158 — Compact Block Filters for Light Clients]

Le hash du filtre est double-SHA256 de sa sérialisation. Son en-tête est double-SHA256 de ce hash concaténé avec l’en-tête de filtre précédent. Cela établit des liens vérifiables, mais l’engagement n’est pas dans l’en-tête de bloc du consensus. Le hachage seul ne détecte donc pas une chaîne fausse cohérente fournie par tous les pairs connectés. [BIP 157 — Client Side Block Filtering]

BIP 157 recommande plusieurs pairs indépendants, sauf connexion sécurisée à un pair de confiance. En cas de désaccord, le client trouve la première divergence et vérifie le filtre contre le bloc et les données nécessaires des sorties précédentes. La garantie de filtres corrects suppose au moins un pair honnête. Après réorganisation, les filtres doivent suivre la nouvelle branche et l’état pertinent du portefeuille doit être recalculé. [BIP 157 — Client Side Block Filtering] [BIP 158 — Compact Block Filters for Light Clients]

Le test local ne révèle pas les scripts surveillés au pair. Les requêtes ultérieures de blocs complets révèlent cependant un intérêt et peuvent être corrélées aux adresses IP ou aux requêtes répétées. BIP 157 recommande des sources choisies aléatoirement parmi les pairs sortants ; la source du bloc n’a pas à servir les filtres. Cela ne garantit pas l’anonymat. [BIP 157 — Client Side Block Filtering]

Un filtre concerne un bloc confirmé, pas le Mempool actuel. Une correspondance ne prouve ni paiement ni droit de dépenser ; les transactions et validations nécessaires le déterminent. Un nœud peut conserver les filtres après élagage des blocs sans pouvoir fournir un ancien bloc complet. Les économies d’un client léger ne remplacent pas le modèle de sécurité de Full Node. [BIP 157 — Client Side Block Filtering]

Dans Bitcoin Core 29.0, -blockfilterindex construit l’index ; -peerblockfilters active le service aux pairs et nécessite l’index basic. NODE_COMPACT_FILTERS annonce ce service. Le RPC getblockfilter retourne filter et header pour le bloc choisi. La disponibilité d’un RPC ou index ne signifie pas à elle seule que les filtres sont servis en P2P ; cette entrée ne modifie aucune configuration. [Bitcoin Core 29.0 — getblockfilter RPC] [Bitcoin Core 29.0 — Filter service configuration]

Pour une vision complète, lisez aussi Neutrino, Full Node, Pruned node, Confidentialité de Bitcoin, Compact block relay. Cette entrée est également citée par Compact Block Filters, Neutrino.

DOC · 001BIP 157 — Client Side Block FilteringSpécification ↗DOC · 002BIP 158 — Compact Block Filters for Light ClientsSpécification ↗DOC · 003Bitcoin Core 29.0 — getblockfilter RPCDocumentation ↗DOC · 004Bitcoin Core 29.0 — Filter service configurationSource primaire ↗
Sources d’abord · Pas un conseil financier