تلتزم Stale Block بقواعد Bitcoin، لكنها لا تنتمي إلى السلسلة النشطة. هذه السلسلة هي السجل الذي تستخدمه العقدة لحساب التأكيدات وتحديد الأموال القابلة للإنفاق. والعقدة حاسوب يتحقق من الكتل والمعاملات. ويحسم عمل التعدين المتراكم الاختيار بين الفروع الصالحة. بالنسبة إلى متلقي دفعة، قد يعني ذلك فقدان تأكيد والانتظار مجددًا، وليس فقدان البيتكوين تلقائيًا.
لنتخيل المعدّنين آنا وبافل. يعمل كلاهما على إضافة كتلة بعد آخر كتلة معروفة. تجد آنا كتلة جديدة، لكن بافل يجد كتلته أيضًا قبل أن يصله الخبر. قد تكون الكتلتان صالحتين، مع اختلاف بسيط في المعاملات التي تتضمنانها. تتحقق العقد من الكتل والمعاملات، وتتلقى المعلومات عن الكتلتين بترتيب مختلف. لذلك تتبع مؤقتًا نهايات مختلفة للسلسلة. عندما يتراكم عمل أكبر في أحد الفروع الصالحة وتتحقق العقد منه، تنتقل إليه. أما الكتلة التي بقيت على الفرع المتروك فتُسمى Stale Block. [1]
يحتاج Bitcoin إلى سجل واحد حتى لا تُنفق الأموال نفسها مرتين بنجاح. لذلك لا يكفي التأكد من التزام كل كتلة بالقواعد على حدة؛ على العقدة أيضًا اختيار الفرع الصالح الذي ستتبعه. صلاحية الكتلة واختيار السلسلة مسألتان مختلفتان. قد تتضمن Stale Block إثبات عمل تعدين صحيحًا (Proof of Work) ومعاملات وتوقيعات صالحة، ومع ذلك تبقى خارج السجل المختار. هذا لا يجعلها معيبة أو احتيالية. [1] [2]
لنفترض أن كتلة بافل تضمنت دفعتك وأن المحفظة أظهرت تأكيدًا واحدًا. إذا فاز فرع آنا، فالنتيجة تعتمد على محتواه. قد تكون المعاملة نفسها موجودة فيه أيضًا، وعندئذ تبقى مؤكدة. وإلا فقد تعود إلى Mempool، وهي القائمة المحلية للمعاملات غير المؤكدة لدى العقدة، لتنتظر كتلة أخرى. لكن العودة ليست مضمونة: يجب أن تظل المعاملة مقبولة وألا تتعارض مع السجل الجديد. إذا تضمن ذلك السجل معاملة أخرى تنفق الأموال نفسها، فلا يمكن تأكيد الدفعة الأصلية فيه في الوقت نفسه. [2]
ينبغي التمييز بين الدفعة العادية وCoinbase Transaction، وهي أول معاملة في الكتلة وتخصص المكافأة للمعدّن. تشمل المكافأة بيتكوين مُصدرًا حديثًا ورسوم المعاملات. إذا بقيت كتلة بافل خارج السلسلة النشطة، فلا يمكن إنفاق مكافأة coinbase الخاصة بها في ذلك السجل. وهي لا تنتقل إلى Mempool كدفعة عادية. وفي المقابل لن يسترد بافل الكهرباء التي استهلكها. لذلك يهتم المعدّنون بإيجاد الكتلة وبإيصال خبرها إلى الآخرين بسرعة أيضًا. [1] [2]
قد تجد في المقالات ومستكشفات الكتل اسم Orphan Block مستخدمًا بدلًا من Stale Block. كثيرًا ما يُعامل الاسمان كمترادفين، لكن بين معنييهما الدقيقين فرقٌ. Orphan Block هي كتلة لا تعرف العقدة سابقتها بعد، ولذلك لا تستطيع ربطها بالسلسلة حتى الآن. أما Stale Block فقد تكون سابقتها معروفة وتكون هي صالحة؛ لكنها تقع خارج الفرع المختار. وتُستخدم كلمة orphan أيضًا للمعاملات عندما تفتقر العقدة إلى معاملات سابقة لازمة للتحقق من مدخلاتها. لذا يجب الانتباه إلى المعنى الذي يقصده المصدر. [1]
إذا كانت العقدة تستخدم كتلة بافل ثم استبدلت بها فرع آنا، فإنها تنفذ Reorg: تغيّر جزءًا من السجل الذي تعتبره نشطًا. لهذا قد يتغير عدد التأكيدات في المحفظة. يمكن أن يحدث السباق القصير في مثالنا حتى مع تعدين نزيه. لكن مهاجمًا قد يحاول استغلال تغيير السجل لتنفيذ Double Spend، أي تمرير دفعة أخرى تنفق الأموال نفسها. لا تثبت Stale Block وحدها تلك النية. ينبغي فحص تسلسل الحدث وأي معاملات متعارضة. [1] [2]
لا يصل خبر الكتلة الجديدة إلى العالم كله فورًا. وكلما استغرق الانتشار وقتًا أطول، أمكن لمعدّنين آخرين مواصلة العمل على السلف نفسه دون علمهم بالكتلة الجديدة. تؤثر سرعة النقل وروابط العقد وزمن الانتشار مقارنة بالفاصل بين الكتل. تشير Stale Rate إلى نسبة الكتل الصالحة المكتشفة التي لا تبقى في السلسلة النشطة. وهي ليست نسبة ثابتة تحددها قواعد Bitcoin. وعند مقارنة الأرقام، يجب مراعاة فترة الرصد والكتل التي رصدها المراقب فعلًا. [1] [3]
تشرح مواصفة BIP152 آلية Compact Block Relay. غالبًا ما تعرف العقدة معظم معاملات الكتلة الجديدة من Mempool لديها، فلا حاجة لإرسال محتواها كاملًا مرة أخرى. تسمح معرّفات قصيرة بإعادة بناء الكتلة من البيانات المتاحة، ثم طلب المعاملات الناقصة. يوفر ذلك بيانات النقل وقد يساعد العقد، في الظروف المناسبة، على معرفة الكتلة الجديدة أسرع. إنه تحسين للنقل وليس تغييرًا لقواعد الصلاحية. ولا يمكنه منع العثور على كتلتين في وقت متقارب منعًا تامًا. [3]
يُسمى العمل المتراكم في الفرع تقنيًا chainwork. لا يقيس الكهرباء المستهلكة فعلًا ولا يحسب أصواتًا بعدد الحواسيب. تضيف كل كتلة قيمة مشتقة من صعوبة Proof of Work الخاص بها، أي إثبات عمل التعدين. لذلك فإن عبارة «تفوز السلسلة الأطول» أقل دقة من «يفوز الفرع الصالح ذو chainwork الأكبر». يجب أن تتحقق العقدة من الالتزام بالقواعد؛ فلا تجعل كمية كبيرة من العمل معاملة غير صالحة تصبح صالحة. كذلك تصف كلمة stale علاقة الكتلة بالسجل الذي اختارته عقدة معينة في تلك اللحظة. [1] [2]
يوفر مستكشف الكتل عرضًا مفيدًا، لكنه يعكس رؤية الخدمة التي تشغله. أما Full Node الخاصة بك، وهي عقدة تتحقق من القواعد، فتتيح فحص السجل الذي قبلته بشكل مستقل. إذا كانت العقدة تحتفظ ببيانات الكتلة، يعيد الأمر getblock في Bitcoin Core القيمة confirmations: -1 لكتلة تقع خارج السلسلة النشطة. وإذا كانت البيانات مفقودة، مثلًا بسبب حذف بيانات الكتل القديمة لتوفير مساحة التخزين في وضع pruning، يعيد الأمر خطأً. لا تثبت هذه القيمة وحدها أن الكتلة اجتازت جميع فحوص الصلاحية. ولتحديد موقعها بدقة، افحص أيضًا hash، أي معرّفها، والكتلة السابقة والارتفاع (عدد الكتل التي تسبقها) وchainwork؛ ثم تحقق من مصير كل دفعة على حدة. قد تكون لكتلتين القيمة نفسها للارتفاع مع hash مختلف لكل منهما. [4] [5]
للحصول على صورة أوضح، اقرأ هذا المدخل مع Reorg, التأكيد, Block, Block Header, Proof of Work, التعدين. تشير إلى هذا المدخل أيضًا Reorg, Mining Pool, Hashrate, Selfish Mining.