Aller au contenu principal
Réseau

Compact Block Filters

Les compact block filters (BIP-158) sont des filtres GCS qui résument le contenu d'un bloc. Permettent à un client léger de tester localement la pertinence d'un bloc. Plus privés que les bloom filters. Base de Neutrino.

Le problème des bloom filters

Les bloom filters (BIP-37) permettaient à un wallet SPV de demander à un full node les transactions qui le concernent. Mais ils exposaient les adresses du client au serveur, ce qui était inacceptable pour la confidentialité. Bitcoin Core a désactivé peerbloomfilters par défaut en 0.19 (2019). Un remplaçant était nécessaire.

La proposition BIP-157/158

Olaoluwa Osuntokun et Alex Akselrod proposent en 2017 les Compact Block Filters dans BIP-157 et BIP-158. L'idée : inverser le paradigme. Plutôt que le client envoie son filtre, c'est le serveur qui calcule un filtre par bloc et le publie. Le client télécharge ce filtre (compact, ~20 Ko par bloc moyen) et teste localement si une de ses adresses est dedans. Aucune information sur le client ne fuite.

Le filtre GCS

Le filtre utilisé est un Golomb-Coded Set (GCS), une structure plus compacte que bloom et avec un taux de faux positifs réglable :

| Paramètre | Valeur typique BIP-158 | |-----------|------------------------| | M (taille espace) | 784 931 | | P (FP rate) | 1 / 784 931 (~0,00013 %) | | Taille moyenne | ~20 Ko par bloc | | Encodage | Golomb-Rice, très compact |

Le contenu du filtre est un hash de chaque script Bitcoin observé dans le bloc, plus quelques métadonnées.

Comment un client l'utilise

  1. Télécharge l'en-tête de bloc (80 octets) pour vérifier la chaîne PoW
  2. Télécharge le filtre du bloc (BIP-157)
  3. Calcule le hash de ses adresses
  4. Teste localement : ses adresses sont-elles dans le filtre ?
  5. Si oui (souvent un vrai positif, parfois un faux positif), télécharge le bloc complet
  6. Extrait les transactions pertinentes

C'est ce workflow qui est implémenté dans Neutrino.

Comparaison avec bloom et Electrum

| Méthode | Privacy client | Bande passante | Confiance serveur | |---------|----------------|----------------|-------------------| | Bloom (BIP-37) | Mauvaise | Faible | Forte | | Electrum protocol | Mauvaise | Très faible | Forte | | Compact Block Filters | Bonne | Modérée (~3-5 GB/an) | Faible | | Full node local | Maximale | Élevée (~700 GB + IBD) | Aucune |

Compact Block Filters offrent le meilleur compromis pour les wallets mobiles modernes.

Adoption

| Wallet / projet | Usage des CBF | |-----------------|----------------| | LND (Neutrino backend) | Oui | | btcd | Serveur de filtres | | Bitcoin Core | Serveur depuis 0.21 (filterindex) | | Phoenix | Indirect via Neutrino | | Mutiny | Oui | | Sparrow | Oui (option) | | BlueWallet | Non (utilise Electrum) |

L'index serveur est encore optionnel dans Bitcoin Core (paramètre blockfilterindex=1).

Limites

  • Bande passante non négligeable pour mobile (3-5 GB/an de filtres si on les télécharge tous depuis 2017)
  • Faux positifs : ~1 / 784 931 par adresse par bloc, gérables mais à comptabiliser
  • Pas de scan rapide sur grosse plage : il faut parcourir les filtres bloc par bloc

À retenir

Les Compact Block Filters sont l'outil moderne des wallets légers : ils combinent une bonne confidentialité, une exigence raisonnable en ressources, et un modèle de confiance minimal envers le serveur. Ils sont la base de tous les wallets Lightning mobiles non-custodial sérieux.

Termes lies

← Retour au glossaire complet

Glossaire inspire du dictionnaire de Loic Morel sur Pandul.fr.