141 / 691NEUTRINO

Compact Block Filters

مرشحات الكتل المدمجة وفق BIP 157 وBIP 158

تمكّن Compact Block Filters المحفظة الخفيفة من إيجاد الكتل المعنية محليًا بمرشحات صغيرة وحتمية. يحدد BIP 157 النقل والتحقق، ويحدد BIP 158 المحتوى والترميز.

Compact Block Filters فهارس احتمالية للكتل مخصصة للعملاء الخفيفين. تنزّل المحفظة المرشح وتختبر نصوصها محليًا بدل إرسال مرشح عناوين شخصي إلى الخادم كما في BIP 37. حالة BIP 157 وBIP 158 عند المراجعة Deployed، لكنهما لا يستبدلان التحقق الكامل من الإجماع.

يحدد BIP 157 رسائل getcfilters/cfilter وgetcfheaders/cfheaders وgetcfcheckpt/cfcheckpt. يحدد BIP 158 مرشح basic من النوع 0x00. يزامن العميل رؤوس الكتل أولًا ثم رؤوس المرشحات والمرشحات؛ وعند التطابق يجلب الكتلة ويبحث عن المعاملات الفعلية. هذا مختلف عن Compact Blocks في BIP 152 لنقل الكتل السريع. [BIP 157 — Client Side Block Filtering] [BIP 158 — Compact Block Filters for Light Clients]

يحتوي المرشح على scriptPubKey للمخرجات الجديدة عدا النصوص التي تبدأ بـOP_RETURN، ونصوص المخرجات السابقة التي تنفقها المدخلات باستثناء مدخل coinbase. تُحذف العناصر الفارغة وتُعامل العناصر كمجموعة. ليس فهرسًا لكل txid أو نصوص العناوين أو بيانات witness؛ ويحتاج بناؤه أيضًا إلى المخرجات السابقة المنفقة. [BIP 158 — Compact Block Filters for Light Clients]

تُسقط قيم SipHash-2-4 إلى المجال N × M وتُرتب ثم تُرمز فروقها باستخدام Golomb-Rice. يستخدم basic ‏P=19 وM=784931؛ والمفتاح أول 16 بايت من تجزئة الكتلة بصيغة little-endian. يبدأ التسلسل بالعدد N بصيغة CompactSize. قد يطابق استعلام عن عنصر خارج المجموعة خطأً باحتمال يقارب 1/M؛ ولا يفوّت المرشح الصحيح عنصرًا مشمولًا. [BIP 158 — Compact Block Filters for Light Clients]

تجزئة المرشح هي double-SHA256 لتسلسله. رأسه هو double-SHA256 لهذه التجزئة موصولة برأس المرشح السابق. ينشئ ذلك ترابطًا قابلًا للتحقق، لكن الالتزام ليس داخل رأس كتلة الإجماع. لذا لا يكشف التجزؤ وحده سلسلة زائفة متسقة يقدمها جميع الأقران المتصلين. [BIP 157 — Client Side Block Filtering]

يوصي BIP 157 بعدة أقران مستقلين ما لم يوجد اتصال مؤمّن بقرين موثوق. عند الخلاف يجد العميل أول اختلاف ويتحقق من المرشح بالكتلة وبيانات المخرجات السابقة اللازمة. تفترض ضمانة المرشحات الصحيحة قرينًا صادقًا واحدًا على الأقل. بعد إعادة التنظيم يجب ربط المرشحات بالفرع الجديد وإعادة حساب حالة المحفظة ذات الصلة. [BIP 157 — Client Side Block Filtering] [BIP 158 — Compact Block Filters for Light Clients]

لا يكشف الاختبار المحلي قائمة النصوص المراقبة للقرين. لكن طلبات الكتل الكاملة اللاحقة تكشف الاهتمام وقد ترتبط بعنوان IP أو طلبات متكررة. يوصي BIP 157 باختيار مصادر الكتل عشوائيًا من الأقران ذوي الاتصالات الصادرة؛ ولا يلزم أن يقدم مصدر الكتلة مرشحات. هذا لا يضمن إخفاء الهوية. [BIP 157 — Client Side Block Filtering]

يتعلق المرشح بكتلة مؤكدة، لا بـMempool الحالي. التطابق لا يثبت الدفع أو صلاحية الإنفاق؛ تحدد ذلك المعاملات والتحققات اللازمة. قد تحتفظ العقدة بالمرشحات بعد تقليم الكتل لكنه قد لا يوفر كتلة قديمة كاملة. توفير موارد العميل الخفيف لا يستبدل نموذج أمان Full Node. [BIP 157 — Client Side Block Filtering]

في Bitcoin Core 29.0 ينشئ -blockfilterindex الفهرس؛ ويتيح -peerblockfilters تقديمه للأقران ويتطلب فهرس basic. يشير NODE_COMPACT_FILTERS إلى الخدمة. يعيد RPC ‏getblockfilter حقلي filter وheader للكتلة المختارة. وجود RPC أو الفهرس وحده لا يعني تقديم المرشحات عبر P2P؛ لا تغير هذه المادة إعدادات العقدة. [Bitcoin Core 29.0 — getblockfilter RPC] [Bitcoin Core 29.0 — Filter service configuration]

للحصول على صورة أوضح، اقرأ هذا المدخل مع Neutrino, Full Node, Pruned node, خصوصية Bitcoin, Compact block relay. تشير إلى هذا المدخل أيضًا Compact Block Filters, Neutrino.

DOC · 001BIP 157 — Client Side Block Filteringمواصفة ↗DOC · 002BIP 158 — Compact Block Filters for Light Clientsمواصفة ↗DOC · 003Bitcoin Core 29.0 — getblockfilter RPCتوثيق ↗DOC · 004Bitcoin Core 29.0 — Filter service configurationمصدر أولي ↗
المصادر أولًا · ليست نصيحة استثمارية