141 / 691NEUTRINO

Compact Block Filters

Kompaktní blokové filtry podle BIP 157 a BIP 158

Compact Block Filters umožňují lehké peněžence hledat relevantní bloky lokálně podle malých deterministických filtrů. BIP 157 řeší jejich přenos a ověřování, BIP 158 obsah a kódování.

Compact Block Filters jsou pravděpodobnostní indexy bloků pro lehké klienty. Peněženka stáhne filtr a otestuje své skripty u sebe; neposílá serveru vlastní adresní filtr jako v BIP 37. BIP 157 a BIP 158 mají při revizi stav Deployed, ale nenahrazují plnou konsenzuální validaci.

BIP 157 definuje zprávy getcfilters/cfilter, getcfheaders/cfheaders a getcfcheckpt/cfcheckpt. BIP 158 určuje filtr basic typu 0x00. Klient nejprve synchronizuje hlavičky bloků, poté hlavičky filtrů a filtry; při shodě stáhne blok a vyhledá skutečné transakce. Nejde o Compact Blocks z BIP 152 pro rychlé předávání bloků. [BIP 157 — Client Side Block Filtering] [BIP 158 — Compact Block Filters for Light Clients]

Filtr obsahuje scriptPubKey nových výstupů kromě skriptů začínajících OP_RETURN a skripty předchozích výstupů utrácených vstupy, s výjimkou vstupu coinbase. Prázdné položky se vynechávají a pracuje se s množinou. Nejde o index všech txid, adresních řetězců nebo witness dat; pro sestavení jsou potřebné i utrácené předchozí výstupy. [BIP 158 — Compact Block Filters for Light Clients]

Hodnoty SipHash-2-4 se mapují do rozsahu N × M, seřadí a jejich rozdíly zakóduje Golomb-Rice. Pro basic platí P=19 a M=784931; klíčem je prvních 16 bajtů hashe bloku v little-endian podobě. Serializace začíná počtem N v CompactSize. Nečlenský dotaz může mít falešnou shodu přibližně 1/M; správný filtr nevynechá zahrnutou položku. [BIP 158 — Compact Block Filters for Light Clients]

Hash filtru je double-SHA256 jeho serializace. Hlavička filtru je double-SHA256 spojení tohoto hashe s předchozí hlavičkou filtru. Vzniká ověřitelná návaznost, ale její závazek není součástí konsenzuální hlavičky bloku. Shodně lživý řetězec od všech připojených peerů proto samotné hashování neodhalí. [BIP 157 — Client Side Block Filtering]

BIP 157 doporučuje více nezávislých peerů, není-li spojení s důvěryhodným peerem bezpečně zajištěné. Při rozporu klient najde první rozdíl a ověří filtr proti bloku a potřebným datům předchozích výstupů. Záruka správných filtrů předpokládá alespoň jednoho poctivého peera. Po reorganizaci musí navázat filtry na novou větev a přepočítat relevantní stav peněženky. [BIP 157 — Client Side Block Filtering] [BIP 158 — Compact Block Filters for Light Clients]

Lokální testování neprozrazuje peeru seznam hledaných skriptů. Následné žádosti o celé bloky však odhalují zájem a mohou se korelovat s IP adresou nebo opakovanými dotazy. BIP 157 doporučuje vybírat zdroje bloků náhodně mezi odchozími peery; zdroj bloku nemusí poskytovat filtry. To není záruka anonymity. [BIP 157 — Client Side Block Filtering]

Filtr se vztahuje k potvrzenému bloku, nikoli k aktuálnímu Mempool. Shoda nedokazuje platbu ani oprávnění utrácet; rozhodnou transakce a potřebné ověření. Uzel může uložené filtry zachovat po prořezání bloků, ale pak nemusí dodat starý celý blok. Úspora lehkého klienta nenahrazuje bezpečnostní model Full Node. [BIP 157 — Client Side Block Filtering]

V Bitcoin Core 29.0 vytváří -blockfilterindex index; -peerblockfilters zapíná poskytování peerům a vyžaduje index basic. NODE_COMPACT_FILTERS signalizuje tuto službu. RPC getblockfilter vrací pole filter a header pro zadaný blok. Samotná dostupnost RPC nebo indexu neznamená, že uzel filtry poskytuje po P2P; tato heslová dokumentace nemění konfiguraci uzlu. [Bitcoin Core 29.0 — getblockfilter RPC] [Bitcoin Core 29.0 — Filter service configuration]

Pro nejúplnější obraz čtěte toto heslo společně s Neutrino, Full Node, Ořezaný uzel, Soukromí v Bitcoinu, Kompaktní přenos bloků. Opačným směrem na něj odkazují také Compact Block Filters, Neutrino.

DOC · 001BIP 157 — Client Side Block FilteringSpecifikaceDOC · 002BIP 158 — Compact Block Filters for Light ClientsSpecifikaceDOC · 003Bitcoin Core 29.0 — getblockfilter RPCDokumentaceDOC · 004Bitcoin Core 29.0 — Filter service configurationPrimární zdroj
Primární zdroje · Nejde o investiční doporučení