45 / 736REORG

Reorg

إعادة تنظيم السلسلة

حتى الدفعة المؤكدة قد تفقد تأكيدها مؤقتًا. يحدث Reorg عندما تعتمد العقدة فرعًا صالحًا آخر من سجل Bitcoin، وتستبدل به آخر الكتل التي كانت تتبعها.

عقدة Bitcoin هي برنامج يتحقق من الكتل والمعاملات. Reorg هو انتقال عقدة Bitcoin إلى فرع صالح آخر يملك قدرًا أكبر من Proof of Work المتراكم، أي العمل المثبت بالتعدين. تعيد العقدة تقييم الكتل الأخيرة ودفعاتها. لا يغيّر ذلك قواعد Bitcoin، ولا يمنح أحدًا زرًا لإلغاء دفعات الآخرين.

تستلم آنا 20,000 ساتوشي، وهي وحدات صغيرة من البيتكوين. تعرض محفظتها تأكيدًا واحدًا: الدفعة موجودة في كتلة قبلتها عقدتها. ثم تكتشف العقدة فرعًا منافسًا صالحًا لا يحتوي تلك الدفعة بعد. حين يمثل هذا الفرع عمل تعدين متراكمًا أكبر، تنتقل العقدة إليه. يسمى استبدال جزء من السجل بهذه الطريقة Reorg. وقد تعود دفعة آنا إلى انتظار التأكيد من دون أن يسرق أحد مفاتيحها أو يغيّر توقيعها. لا يحسم الأمر تصويت ولا مجرد عدد الكتل، بل chainwork: مجموع العمل الذي تثبته كل كتلة وفق صعوبتها. وترفض العقدة الفرع غير الصالح حتى لو كان عمله أكبر. [1] [4]

ما تراه آنا بعد ذلك يعتمد على الفرع الجديد. إن كان يتضمن دفعتها أيضًا، تظل مؤكدة، وإن كان عدد تأكيداتها قد يتغير. وإن لم يتضمنها، فقد يحاول Bitcoin Core إعادتها إلى Mempool، قائمته المؤقتة للمعاملات غير المؤكدة التي تنتظر إدراجها في كتلة. لكن العودة غير مضمونة. فمخرج المعاملة السابقة يسجّل المبلغ والشروط التي تسمح بإنفاقه. فقد يكون الفرع الجديد أنفق الأموال نفسها في معاملة أخرى، أو قد يغيب مخرج سابق يُراد إنفاقه، أو لا تتحقق شروط زمنية أو شروط قبول أخرى. لذلك تختلف الدفعة التي تنتظر مجددًا عن دفعة لم يعد السجل الجديد يسمح بها. [1]

التأكيد الواحد يعني الكتلة التي تحتوي الدفعة. تضيف كل كتلة بعدها تأكيدًا آخر، وعملًا إضافيًا يجب على فرع منافس تجاوزه. لذا تملك الدفعة في أحدث كتلة تأكيدًا واحدًا؛ وكلما تعمقت في السجل المعتمد، صار استبدال ذلك الجزء أصعب عادةً. لكن لا يوجد عدد محدود من التأكيدات يضمن رياضيًا استحالة الاستبدال. ولذلك يحدد التجار ومنصات التداول مدة الانتظار وفق قيمة الدفعة والمخاطرة التي يقبلونها. [3] [5]

لا يثبت Reorg وحده وقوع هجوم. قد يعثر معدّنان في وقت متقارب جدًا على كتلتين لهما السلف نفسه. ولا تنتشر معلومات الكتل في الشبكة فورًا، فتتبع العقد مؤقتًا نهايات مختلفة للسلسلة. وعندما يراكم فرع صالح عملًا أكبر، تنتقل إليه العقد؛ وتصبح الكتلة المتروكة Stale Block. لكن يمكن استغلال الآلية نفسها في هجوم Double Spend: يحاول المهاجم فرض سجل دُفعت فيه الأموال نفسها إلى جهة أخرى. لذلك ينبغي فهم سبب الانتقال والدفعات التي تغيّرت بسببه. [4] [5]

أثناء Reorg، تحتفظ العقدة بالقواعد نفسها وتختار بين سجلات تستوفيها. أما Hard Fork فيغيّر قواعد الصلاحية، بحيث قد يحكم البرنامج القديم والجديد على الكتلة نفسها بصورة مختلفة. وبالتالي لا تنشئ إعادة التنظيم وحدها عملة جديدة ولا تعيد كتابة قواعد Bitcoin. تشرح الفصول التالية كيف تنفذ العقدة هذا التغيير في السجل تقنيًا. [4]

Tip هو آخر كتلة في الفرع المعتمد حاليًا. نقطة التفرع هي آخر كتلة مشتركة بين السلسلة النشطة الحالية والفرع البديل. يُوصف عمق Reorg عادة بعدد كتل الطرف النشط التي يجب فصلها للعودة إلى ذلك السلف المشترك. تستبدل إعادة التنظيم بعمق كتلة واحدة الطرف الحالي، بينما تتراجع إعادة التنظيم الأعمق عن عدة كتل مؤكدة. ويتحدد العمق من منظور العقدة المعنية. [1]

تتحقق Full Node من القواعد بنفسها. وتصف أسماء الدوال التالية تنفيذها في Bitcoin Core. لا يختار Bitcoin Core مجرد الفرع الأعلى أو الأكثر شعبية. يجب أن تستوفي السلسلة المرشحة قواعد إجماع العقدة عند التفعيل؛ فزيادة chainwork لا تجعل كتلة غير صالحة صالحة. يختار FindMostWorkChain المرشح ذا أكبر عمل من بين المرشحين الذين لم يثبت أنهم غير صالحين. هذا لا يعني اكتمال التحقق بعد: تُجرى فحوص إضافية عند توصيل الكتل في ActivateBestChain. وتُستبعد الفروع المعروفة بعدم صلاحيتها. [1]

UTXO هو مخرج معاملة لم يُنفق بعد؛ ومجموعة UTXO تجمع هذه المخرجات المتاحة. تحفظ بيانات undo المعلومات اللازمة لعكس آثار كتلة. يتراجع DisconnectTip ومنطق التحقق المرتبط به عن آثار الكتل المفصولة بترتيب عكسي. تُستعاد UTXO التي أُنفقت، وتفقد المخرجات التي أنشأتها الكتلة المُزالة حالة التأكيد. لذلك يحتفظ Bitcoin Core ببيانات التراجع، كي يتمكن من إعادة بناء مجموعة UTXO بدقة عند نقطة التفرع. [1]

يعني rollback هنا العودة إلى الحالة السابقة للكتل المفصولة؛ أما chainstate فهو حالة عمل العقدة الموافقة للسجل المعتمد. بعد التراجع، يوصل ConnectTip كتل الفرع ذي chainwork الأكبر بالترتيب الأمامي. ويُعاد التحقق من كل معاملة مقابل مجموعة UTXO المعاد بناؤها والقواعد السارية عند الارتفاع المعني. وتكون النتيجة chainstate مطابقًا لتاريخ محدد واحد، لا مزيجًا من معاملات الفرعين. [1]

Coinbase Transaction هي أول معاملة في الكتلة، وتخصّص المكافأة للمعدّن. ويشير الارتفاع h إلى موضع الكتلة في السلسلة. معاملة coinbase استثناء: لا تعود إلى mempool بعد الفصل. وفق قواعد الإجماع، يمكن إنفاق مخرج coinbase المنشأ عند الارتفاع h لأول مرة في الكتلة h + 100. عندما يكون الطرف عند h + 99، تكون لكتلة المصدر 100 تأكيد، ويسمح شرط النضج بإدراج معاملة الإنفاق في الكتلة التالية. إذا أزال Reorg الكتلة التي تتضمن coinbase، تختفي مكافأتها من chainstate النشط. وقد تصبح المعاملات التابعة التي اعتمدت على التاريخ المُزال غير صالحة أيضًا. [1] [2] [3]

فيما يلي أسماء دوال في إصدار محدد من البرنامج، وليست خطوات إضافية على مستخدم المحفظة تنفيذها. في Bitcoin Core v29.0، الخطوات واضحة: يجد FindMostWorkChain المرشح ذا أعلى chainwork من بين المرشحين الذين لم يثبت أنهم غير صالحين، وقد يفصل ActivateBestChainStep الطرف الحالي، ويتحقق ConnectTip من الكتل البديلة ويوصلها، ويعيد MaybeUpdateMempoolForReorg فحص معاملات الكتل المفصولة. قد يكشف التفعيل عدم صلاحية المرشح ويواصل البحث عن فرع آخر. تتطلب إعادة التنظيم الكبيرة معالجة عدد أكبر من الكتل المفصولة والموصولة، ولذلك قد تطيل تنفيذ ActivateBestChain. [1]

للحصول على صورة أوضح، اقرأ هذا المدخل مع التأكيد, Proof of Work, Stale Block, الإنفاق المزدوج, Full Node, UTXO. تشير إلى هذا المدخل أيضًا التأكيد, الإنفاق المزدوج, معاملة كوينبيس, Soft Fork.

DOC · 001Bitcoin Core v29.0 — chain activation and mempool reconciliationمصدر أولي DOC · 002Bitcoin Core v29.0 — coinbase maturity validationمصدر أولي DOC · 003Bitcoin Core v29.0 — confirmation depthمصدر أولي DOC · 004Bitcoin Developer Guide — Block Chainتوثيق DOC · 005Bitcoin whitepaper — Sections 5 and 11مصدر أولي
تمت المراجعة: المصادر أولًا · ليست نصيحة استثمارية