180 / 691BIP157/158

Compact Block Filters

Компактні фільтри блоків у роботі гаманця

Compact Block Filters допомагають легкому гаманцю вибирати блоки через локальну перевірку скриптів. Збіг потребує перевірки, а не підтверджує платіж чи гарантує анонімність.

Compact Block Filters — малі ймовірнісні індекси окремих блоків, побудовані детерміновано. BIP 158 визначає вміст і кодування, BIP 157 — передачу та перевірку зв’язності; клієнт зіставляє свої скрипти локально.

Гаманець синхронізує заголовки блоків і фільтрів, завантажує фільтри й перевіряє скрипти локально. За збігу отримує цілий блок і шукає конкретну транзакцію. Сам збіг не має збільшувати баланс: фільтр не повертає суми, доказу власності або повної історії транзакцій. [BIP 157 — Client Side Block Filtering]

BIP 158 basic включає scriptPubKey нових виходів, крім тих, що починаються з OP_RETURN, і скрипти попередніх виходів, витрачених входами поза coinbase. Порожні елементи пропускаються. Адресу слід перетворити на правильний скрипт; це не універсальний індекс txid, witness-даних чи довільних нотаток. [BIP 158 — Compact Block Filters for Light Clients] [Bitcoin Core — BasicFilterElements]

Golomb-Rice кодує різниці впорядкованих хешованих значень; basic використовує P=19 і M=784931. Запит елемента поза множиною може збігтися з імовірністю приблизно 1/M. Більше скриптів дає більше можливостей колізії, а не сталу похибку всього гаманця. Правильний фільтр не пропускає включеного елемента. [BIP 158 — Compact Block Filters for Light Clients]

Заголовок поєднує хеш поточного фільтра з попереднім заголовком. Перевірка зв’язності виявляє розбіжність із прийнятим ланцюгом, але цього зобов’язання немає в заголовку блоку Bitcoin. Нападник може надати внутрішньо узгоджені хибні фільтри; правильний хеш сам не гарантує правдивого вмісту. [BIP 157 — Client Side Block Filtering]

BIP 157 виявляє хибні фільтри порівнянням peer-вузлів із принаймні одним чесним учасником. Відтворення basic може також потребувати скриптів витрачених попередніх виходів. Реорганізація вимагає фільтрів нової гілки та перерахунку стану гаманця; та сама стара висота не означає той самий блок. [BIP 157 — Client Side Block Filtering] [Bitcoin Core — BasicFilterElements]

На відміну від BIP 37, клієнт не надсилає серверу власний адресний фільтр. Peer усе ще може бачити IP, час і запитані блоки. Завантаження від різних peer-вузлів обмежує зосередження даних, але не всі кореляції; випадковий збіг сам не робить зв’язок анонімним. [BIP 157 — Client Side Block Filtering]

Bitcoin Core RPC getblockfilter повертає фільтр і заголовок за хешем блоку при ввімкненому відповідному індексі. Це не доводить наявності публічної P2P-служби або всіх історичних блоків у peer-вузла. Клієнту потрібне працездатне джерело блоків; такі фільтри не повідомляють про непідтверджені транзакції Mempool. [BIP 157 — Client Side Block Filtering] [Bitcoin Core 30.0 — getblockfilter]

Compact Blocks за BIP 152 прискорюють передачу нового блоку короткими ідентифікаторами транзакцій і локальним Mempool. Compact Block Filters відбирають важливі для клієнта блоки. Ні локальний збіг, ні перевірка включення транзакції не замінюють незалежної повної консенсусної валідації всіх блоків. [BIP 157 — Client Side Block Filtering] [BIP 152 — Compact Block Relay]

Для повної картини прочитайте також Compact Block Filters, Neutrino, Full Node, Приватність у Bitcoin, Compact block relay. На цю статтю також посилаються Neutrino.

DOC · 001BIP 157 — Client Side Block FilteringСпецифікаціяDOC · 002BIP 158 — Compact Block Filters for Light ClientsСпецифікаціяDOC · 003Bitcoin Core — BasicFilterElementsПервинне джерелоDOC · 004Bitcoin Core 30.0 — getblockfilterДокументаціяDOC · 005BIP 152 — Compact Block RelayСпецифікація
Спочатку джерела · Не інвестиційна порада