يُعد الإصدار Zebra 6.4.0 إصداراً أمنياً يضيف أيضاً خادم gRPC تجريبياً متوافقاً مع lightwalletd، ويخفض رسوم ZIP 317 التقليدية، ويسرّع تسليم قوالب الكتل (block templates) للمعدّنين، ويُقدّم موعد التوقف النهائي للدعم (end-of-support halt) تحضيراً لترقية NU7، والمقرر مبدئياً في 5 نوفمبر 2026. أما الإصدار Zebra 6.4.1، والذي صدر في نفس اليوم، فيعمل على إصلاح تعليق محتمل للمزامنة بالقرب من طرف السلسلة (chain tip). يُنصح مشغلو العقد (Node operators) بشدة بالترقية مباشرة إلى الإصدار 6.4.1. وقبل أن يتوقف الإصدار 6.4.1 عن العمل في 2M نوفمبر تقريباً، يجب على المشغلين أيضاً الاستعداد للتحديث إلى الإصدار القادم المخطط له الأسبوع المقبل، والذي سيتميز بدعم ترقية NU7.
الإشعارات الأمنية (Security Advisories)
- GHSA-3c94-hf7p-g5mf: أجسام الكتل المُزوّرة قد تؤدي إلى تعليق المزامنة
يمكن لأحد الأقران (peer) تقديم كتلة ذات تجزئة قانونية (canonical hash) ولكن بجسم مُزوّر لا تتطابق بيانات تفويضه (authorizing data) مع التزام الترويسة (header commitment). كان Zebra يتعامل مع هذا على أنه كتلة غير صالحة عادية، ولذلك كان يلغي جولة المزامنة بأكملها، ويؤقت أداة المزامنة حتى انتهاء تأخير إعادة التشغيل، ويُسقط تجزئة الكتلة بدلاً من إعادة طلبها، مما يسمح لنظير خبيث بتعليق مزامنة العقدة مراراً وتكراراً. أصبح Zebra الآن يواصل جولة المزامنة ويعيد طلب الجسم من نظير آخر (حتى عدد محدود من محاولات إعادة المحاولة)، ويعيد طلب الكتل المرفوضة فقط لأنها كانت موجودة في طابور الانتظار خلف جسم مُزوّرة، وذلك دون معاقبة الأقران الذين قدموا تلك الكتل (#11502).
شكراً لـ@ouicateعلى الإبلاغ عن هذه المشكلة. - GHSA-4f6v-mj46-gxg3: إعادة كتابة scriptSig الخاصة بـ Coinbase لا تُعاقب في مسار الإدخال الوارد
لم يكن يتم معاقبة الأقران الذين يقومون بترحيل كتل تحتوي على حقلscriptSigمعاد كتابته لعملية كوينبيس (coinbase) على مسار الإدخال الوارد. أصبح Zebra الآن يسجل نقاط سوء السلوك للأقران الذين يقومون بذلك (#11502).
شكراً لـ@craftsoldier(جوليان أبراهام) على الإبلاغ عن هذه المشكلة. - GHSA-jhpp-8h75-7pv5: تطبيق حدود الأقران والحظر لكل شبكة فرعية IPv6 /64
أصبح تحديد الاتصالات ضمن إعدادnetwork.max_connections_per_ipوحظر الأقران ينطبق الآن على شبكة فرعية IPv6 /64 بالكامل بدلاً من كل عنوان على حدة، بحيث لم يعد بإمكان جهاز واحد تجاوز الحد أو الإفلات من الحظر عن طريق الاتصال من عناوين متعددة ضمن نفس النطاق المخصص. تظل اتصالات IPv4 محدودة لكل عنوان على حدة (#11256).
تحسينات أمنية أخرى
- انتهاء صلاحية حظر الأقران بعد 24 ساعة: أصبحت عمليات الحظر تنتهي صلاحيتها الآن بعد 24 ساعة بدلاً من الاستمرار حتى إعادة تشغيل Zebra، لضمان عدم استبعاد النظير الذي تم حظره عن طريق الخطأ، أو النظير الذي يتشارك شبكة فرعية IPv6 /64 مع نظير سيء السلوك، بشكل دائم (#11256).
- تسجيل نقاط سوء السلوك للكتل التي تحتوي على معاملات مكررة: أصبح يتم تسجيل نقاط سوء السلوك للأقران الذين يعلنون عن كتلة تحتوي على معاملات مكررة، مما يتطابق مع طريقة تعامل Zebra مع انتهاكات صلاحية الكتل القاطعة الأخرى (#11157).
التغييرات الكاسرة (Breaking Changes)
- تقديم موعد توقف انتهاء الدعم تمهيداً لترقية NU7: أصبحت نافذة انتهاء الدعم الآن 12 أسبوعاً بدلاً من 15، ونتيجة لذلك يتوقف إصدار Zebra 6.4.x في أوائل نوفمبر 2026، حوالي 2 نوفمبر، قبيل التفعيل التجريبي لترقية NU7 في 5 نوفمبر. ندرك أن تقصير هذه النافذة ليس مثالياً ولا ننوي جعلها ممارسة شائعة، ولكنها تضمن انتقال العقد إلى الإصدار الداعم لـ NU7 في الوقت المناسب. يمكن للمشغلين التحقق من ارتفاع توقف العقدة بدقة والوقت المقدر باستخدام أمر RPC
getdeprecationinfo(#11491). - حد حجم نص استجابة RPC: أصبح خيار
rpc.max_response_body_sizeمحدوداً الآن بـ 4,294,967,295 بايت. يجب تقليص التكوينات ذات القيم الأكبر؛ حيث أصبحت تُرْفَض الآن عند تحميل التكوين بدلاً من التسبب في حدوث انهيار (panic) لخادم RPC عند بدء التشغيل (#11259).
الميزات الجديدة
- خادم gRPC تجريبي متوافق مع Lightwalletd: أصبح بإمكان Zebra خدمة عملاء Zcash الخفيفين مباشرة. ينفذ خادم gRPC تجريبي جديد واجهة
lightwalletd CompactTxStreamer، ويتم تفعيله عن طريق ضبطrpc.lightwalletd_listen_addrفي ملف التكوين (#10953). - خفض رسوم ZIP 317 التقليدية: بناءً على المقترح
zcash/zips#1352، أصبحت ذاكرة التخزين المؤقت للمعاملات (mempool) تقبل الآن المعاملات التي تدفع ما لا يقل عن 1,000 زاتوشي (zatoshis) لكل إجراء منطقي في ZIP 317 بدلاً من 5,000 (2,000 بدلاً من 10,000 للمعاملة الدنيا)، ويُبلغ الأمرgetstandardfeeعن 1,000. يتبع إنشاء قوالب الكتل الرسوم التقليدية الجديدة ويرفع الحد الأقصى لنِسب وزن الرسوم من 4 إلى 10، مما يوسع نطاق الأولوية للمعاملات التي تدفع أكثر من الرسوم التقليدية (#11290). - قوالب كتل محسوبة مسبقاً للمعدّنين: عند تكوين عنوان معدّن وتفعيل خادم RPC أو المعدّن الداخلي، يقوم Zebra الآن بحساب قوالب الكتل مسبقاً، وتحديثها عند تغير طرف السلسلة وكل بضع ثوانٍ، بحيث يمكن للأمر
getblocktemplateالاستجابة فوراً. قد يتأخر القالب عن الـ mempool ببضع ثوانٍ، ولكن يتم التحقق من كل قالب مقابل الطرف المُعتمد (#11371). - ذاكرة التخزين المؤقت للتحقق المحصن (Shielded Verification Cache): أصبح Zebra يقوم الآن بتخزين نتائج التحقق من حزم Orchard وIronwood وSapling مؤقتاً، بحيث لا تُعاد إثباتات والتوقيعات التي يتم التحقق منها عند دخول المعاملة إلى الـ mempool عند وصول الكتلة التي تقوم بتعدينها. يتم الإبلاغ عن ذاكرة التخزين المؤقت عبر مقاييس
zebra.consensus.cache.*الجديدة (#11380). - مقاييس مجمعات القيمة (Value Pool Metrics): تُبلغ مقاييس
zcash.pool.value.zatoshisوzcash.pool.notes.createdالجديدة -المُصنفة حسب المجمع- عن أرصدة مجمعات القيمة وعدد التزامات الملاحظات (note commitments) عند طرف السلسلة (#11391).
إصلاحات الأخطاء (Bug Fixes)
- تعليق المزامنة بعد إعادة التشغيل بالقرب من الطرف (مُصلح في 6.4.1): كان Zebra يتعرض لتعليق دائم بعد إعادة تشغيل المزامنة بالقرب من طرف السلسلة، مسجلاً مراراً وتكراراً رسالة "queued download of hash behind our chain tip" حتى يتم إعادة تشغيل العقدة. يقوم الإصدار Zebra 6.4.1 بإصلاح هذه المشكلة (#11510).
- حلقة إعادة تشغيل المزامنة عند انتهاء مهلة الاتصال العابرة: لم تعد أداة المزامنة تعيد التشغيل عند انتهاء مهلة البحث عن إدخال شفاف (transparent input lookup) بالقرب من الطرف، أو عند تفعيل مهلة التحقق القصيرة التي تلي نقطة التحقق (checkpoint). كلاهما يُعدان سباقين عابرين (transient races)، وكانت إعادة التشغيل تؤدي إلى إلغاء كتلة الأصل قيد الإرسال، مما قد يتسبب في حلقة إعادة تشغيل (#11377).
- اختيار السلسلة عند تساوي العمل المُنجز (Equal-Work Ties): عندما تحتوي سلسلتان متنافستان على عمل تراكمي متساوٍ، أصبح Zebra يفضل الآن السلسلة التي تلقى طرفها أولاً، وفقاً لما يحدده بروتوكول Zcash، بدلاً من السلسلة ذات تجزئة الطرف الأكبر (#11341).
- تحرير فتحات أقران الـ Mempool عند انتهاء المهلة: أصبح الـ mempool يحرر الآن فتحة التنزيل الخاصة بالنظير عندما تنتهي مهلة إحدى معاملاته أثناء التحقق. سابقاً، كانت كل مهلة تستحوذ بشكل دائم على فتحة حتى يرفض الـ mempool جميع المعاملات اللاحقة من هذا النظير (#11229).
- اتساق الأمر
z_gettreestateأثناء إعادة التنظيم (Reorgs): لم يعد الأمرz_gettreestateيعيد التزامات فارغة (null) لكتلة ينقلها إعادة تنظيم متزامن إلى سلسلة جانبية (#10820). - ملحق التوافق
zcashd-compatيتعامل مع عمليات إعادة تنظيم أعمق: تم تثبيت ملحقzcashd-compatالمدمج على الإصدارzebra-compat-v1.2.0، مما يرفع حد إعادة التنظيم الخاص به من 99 إلى 1,000 كتلة ليتطابق مع Zebra. كان الملحق السابق يتوقف تلقائياً عند عمليات إعادة تنظيم أعمق من 99 كتلة. يجب على المحافظ التي تحتوي على ملاحظات محصنة (shielded notes) توقع نمو ذاكرة التخزين المؤقت للشاهد (witness cache) وملفwallet.datبنحو عشرة أضعاف، تدريجياً على مدار حوالي 900 كتلة. كما أصبح وضع حاوية Docker المنفصلة الخاص بالمثبّت يطبع أمراً صالحاً لحاوية zcashd (#11413).
تغييرات أخرى
- تنظيف التبعيات والبناء: استغنى Zebra عن حزمة
ordered-mapغير المُصانة مع تبعاتها القديمة (#11321)، وحدّث مكتبةnixإلى الإصدار 0.31 (#11267)، وقام ببناءlibrocksdb-sysبحيث يتم تحميلlibclangبشكل صحيح عند وجود أكثر من إصدار لـbindgen(#11444).
الترقية (Upgrading)
يتوفر الإصدار Zebra 6.4.1 عبر GitHub، وcrates.io، وDocker Hub تحت الوسم zfnd/zebra:6.4.1. يجب على مستخدمي المكتبات ملاحظة أن zebra-rpc و zebra-state تتضمنان تغييرات كاسرة في واجهة برمجة التطبيقات (API) في هذا الإصدار.
شكراً للمساهمين
أُنجز هذا الإصدار بفضل جهود كل من:@alchemydc, @andres-pcg, @aphelionz, @arya2, @Bortlesboat, @CodeMongerrr, @conradoplg, @craftsoldier, @evan-forbes, @gustavovalverde, @jiehuo100net, @john-lawniczak, @LarryRuane, @mpguerra, @natalieesk, @oxarbitrage, @questfever, @robustfengbin, @str4d, @syszery, و @upbqdn.
شكراً لمساهماتكم المستمرة في تطوير Zebra.
Zebra هو تطبيق مستقل لبروتوكول Zcash مبني بلغة Rust ومقدم من مؤسسة Zcash (Zcash Foundation). لمعرفة المزيد، تفضل بزيارة [github.com/ZcashFoundation/zebra](https://github.com/ZcashFoundation/zebra).
