180 / 691BIP157/158

Compact Block Filters

Kompaktní filtry bloků v provozu peněženky

Compact Block Filters pomáhají lehké peněžence vybrat bloky ke stažení pomocí lokálního testu skriptů. Shoda je kandidát na kontrolu, nikoli potvrzení platby nebo záruka anonymity.

Compact Block Filters jsou malé deterministicky sestavené pravděpodobnostní indexy jednotlivých bloků. BIP 158 vymezuje obsah a kódování, BIP 157 přenos a kontrolu návaznosti; klient své hledané skripty porovnává lokálně.

Peněženka synchronizuje hlavičky bloků a filtrů, stáhne filtry a testuje své skripty u sebe. Při shodě získá celý blok a hledá konkrétní transakci. Zůstatek nemá zvýšit jen kvůli shodě: filtr nevrací částku, potvrzení vlastnictví ani úplnou transakční historii. [BIP 157 — Client Side Block Filtering]

BIP 158 basic zahrnuje scriptPubKey nových výstupů kromě těch začínajících OP_RETURN a skripty předchozích výstupů utrácených vstupy mimo coinbase. Prázdné položky se vynechávají. Adresní řetězec je nutné převést na správný skript; filtr není univerzální index txid, witness dat nebo libovolné poznámky. [BIP 158 — Compact Block Filters for Light Clients] [Bitcoin Core — BasicFilterElements]

Golomb-Rice kódování ukládá rozdíly seřazených hashovaných hodnot; basic používá P=19 a M=784931. Jeden nečlenský dotaz může mít shodu přibližně 1/M. Více sledovaných skriptů znamená více příležitostí ke kolizi; nejde o pevnou chybovost celé peněženky. Správně sestavený filtr zahrnutý prvek nevynechá. [BIP 158 — Compact Block Filters for Light Clients]

Hlavička filtru propojuje hash aktuálního filtru s předchozí hlavičkou. Kontrola návaznosti odhalí nesoulad s již přijatým řetězcem, ale tento závazek není součástí hlavičky bitcoinového bloku. Útočník tedy může dodat vnitřně konzistentní falešné filtry; samotný správně vypočítaný hash nezaručuje pravdivý obsah. [BIP 157 — Client Side Block Filtering]

BIP 157 staví odhalení nepravdivého filtru na porovnání peerů s alespoň jedním poctivým. Rekonstrukce basic může potřebovat také skripty utrácených předchozích výstupů. Při reorganizaci je nutné navázat filtry na novou větev a přepočítat stav peněženky; stará výška sama neurčuje stejný blok. [BIP 157 — Client Side Block Filtering] [Bitcoin Core — BasicFilterElements]

Na rozdíl od BIP 37 klient neposílá vlastní adresní filtr serveru. Peer ale stále může pozorovat IP adresu, časování a požadované bloky. Stahování bloků od různých peerů omezuje soustředění těchto informací, nikoli všechny korelace; náhodná shoda sama z přenosu nedělá anonymní komunikaci. [BIP 157 — Client Side Block Filtering]

Bitcoin Core RPC getblockfilter vrací filtr a jeho hlavičku pro hash bloku při zapnutém odpovídajícím indexu. To samo nedokládá veřejnou P2P službu ani schopnost daného peera poskytnout každý historický blok. Klient potřebuje funkční zdroj bloků; filtry uzavřených bloků neoznamují nepotvrzené transakce v Mempool. [BIP 157 — Client Side Block Filtering] [Bitcoin Core 30.0 — getblockfilter]

Compact Blocks podle BIP 152 zrychlují přenos nového bloku pomocí krátkých identifikátorů transakcí a místního Mempool. Compact Block Filters vybírají relevantní bloky pro klienta. Ani lokální shoda, ani kontrola zařazení transakce nenahrazují samostatnou plnou konsenzuální validaci všech bloků. [BIP 157 — Client Side Block Filtering] [BIP 152 — Compact Block Relay]

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

DOC · 001BIP 157 — Client Side Block FilteringSpecifikaceDOC · 002BIP 158 — Compact Block Filters for Light ClientsSpecifikaceDOC · 003Bitcoin Core — BasicFilterElementsPrimární zdrojDOC · 004Bitcoin Core 30.0 — getblockfilterDokumentaceDOC · 005BIP 152 — Compact Block RelaySpecifikace
Primární zdroje · Nejde o investiční doporučení