Compact Block Filters son pequeños índices probabilísticos de cada bloque, construidos de forma determinista. BIP 158 define contenido y codificación; BIP 157, transmisión y continuidad. El cliente compara localmente sus scripts.
La cartera sincroniza cabeceras de bloques y filtros, descarga filtros y prueba sus scripts localmente. Ante una coincidencia obtiene el bloque entero y busca la transacción concreta. No debe aumentar el saldo solo por coincidir: el filtro no devuelve importe, prueba de propiedad ni historial completo. [BIP 157 — Client Side Block Filtering]
BIP 158 basic contiene scriptPubKey de nuevas salidas salvo las que empiezan por OP_RETURN, y scripts de salidas anteriores gastadas por entradas distintas de coinbase. Omite elementos vacíos. La dirección debe convertirse en el script correcto; no es un índice universal de txid, datos witness o notas arbitrarias. [BIP 158 — Compact Block Filters for Light Clients] [Bitcoin Core — BasicFilterElements]
Golomb-Rice codifica diferencias de valores hash ordenados; basic usa P=19 y M=784931. Una consulta ajena al conjunto puede coincidir con probabilidad aproximada 1/M. Más scripts vigilados dan más oportunidades de colisión, no una tasa fija de error de toda la cartera. Un filtro correcto no omite elementos incluidos. [BIP 158 — Compact Block Filters for Light Clients]
La cabecera enlaza el hash del filtro actual con la cabecera anterior. Verificar continuidad detecta discrepancias respecto a una cadena aceptada, pero este compromiso no está en la cabecera del bloque Bitcoin. Un atacante puede proporcionar filtros falsos internamente coherentes; un hash bien calculado no garantiza por sí solo contenido verdadero. [BIP 157 — Client Side Block Filtering]
BIP 157 detecta filtros falsos comparando pares con al menos uno honesto. Reconstruir basic puede necesitar también scripts de salidas anteriores gastadas. Una reorganización exige seguir filtros de la nueva rama y recalcular el estado de la cartera; la misma altura antigua no identifica el mismo bloque. [BIP 157 — Client Side Block Filtering] [Bitcoin Core — BasicFilterElements]
A diferencia de BIP 37, el cliente no envía su filtro de direcciones al servidor. Un par aún puede observar IP, tiempos y bloques solicitados. Descargar de distintos pares limita la concentración de información, no toda correlación; las coincidencias accidentales no hacen anónima la comunicación por sí solas. [BIP 157 — Client Side Block Filtering]
Bitcoin Core RPC getblockfilter devuelve filtro y cabecera para un hash de bloque con el índice correspondiente habilitado. Eso no demuestra un servicio P2P público ni que el par pueda servir todos los bloques históricos. Se necesita una fuente funcional de bloques; estos filtros no anuncian transacciones sin confirmar del Mempool. [BIP 157 — Client Side Block Filtering] [Bitcoin Core 30.0 — getblockfilter]
Compact Blocks de BIP 152 aceleran la transmisión de bloques nuevos con identificadores cortos y el Mempool local. Compact Block Filters seleccionan bloques relevantes para el cliente. Ni la coincidencia local ni verificar la inclusión de una transacción sustituyen la validación completa e independiente de consenso de todos los bloques. [BIP 157 — Client Side Block Filtering] [BIP 152 — Compact Block Relay]
Para obtener la imagen más completa, lee esta entrada junto con Compact Block Filters, Neutrino, Full Node, Privacidad en Bitcoin, Retransmisión compacta. También enlazan con esta entrada Neutrino.