إنتقل إلى المحتوى الرئيسي

FIP-06: التعدين المدمج (Merge Mining)

المؤلف: Izimmerma <[email protected]>
الحالة: نهائي
تاريخ الإنشاء: 15-08-2025

الملخص

تعتمد Lokichain آلية إثبات العمل المساعد (Auxiliary Proof-of-Work - AuxPoW) حتى يتمكن المعدنون من إعادة استخدام العمل الذي تم إنجازه في سلسلة إثبات عمل رئيسية (parent). يوفر غلاف AuxPoW ترويسة الكتلة الرئيسية، والتزام coinbase، وبراهين ميركل (merkle proofs) اللازمة لإثبات أن ترويسة كتلة Lokichain قد تم تضمينها في عمل الكتلة الرئيسية.

الدوافع

يسمح التعدين المدمج لـ Lokichain بوراثة معدل التجزئة (hashrate) لشبكة أكبر دون مطالبة المعدنين بتقسيم جهودهم. إن اتباع اتفاقيات AuxPoW الراسخة يقلل من عبء التكامل لمجمعات التعدين مع الحفاظ على وضوح الإجماع.

المصطلحات

  • البلوكشين الرئيسي (Parent blockchain): الشبكة التي يعيد Lokichain استخدام ترويسة كتلتها الصالحة وإثبات العمل الخاص بها (على سبيل المثال، أي سلسلة PoW من عائلة scrypt).
  • البلوكشين المساعد (Auxiliary blockchain): Lokichain، الذي يتحقق من بيانات AuxPoW ويقبل عمل السلسلة الرئيسية كأنه عمله الخاص.
  • كتلة AuxPoW: كتلة في Lokichain قد لا تحقق هدف الصعوبة الفرعي (child) بمفردها، ولكنها تتضمن براهين على أن عمل الكتلة الرئيسية يحقق ذلك.
  • شجرة ميركل للعمل المساعد (Aux work merkle tree): هيكل الالتزام المتجذر في coinbase السلسلة الرئيسية والذي ينتج عنه كل من فرع coinbase (في جذر ميركل الرئيسي) وفرع السلسلة (وصولاً إلى التزام ترويسة Lokichain)، مما يسمح لعدة سلاسل مساعدة بمشاركة كتلة رئيسية واحدة.

المواصفات

يميز Lokichain الترويسة بأنها تدعم AuxPoW عن طريق تعيين البت الثامن في حقل الإصدار (VersionAuxPow) وكتابة معرف السلسلة المكون من ستة بتات في البتات [16..21]. عند وجود هذه العلامة، تلحق العقدة الحمولة التالية مباشرة بعد الترويسة الأساسية المكونة من 80 بايت وقبل سجل المعاملات (transaction vector):

الحقلالنوعالغرض
aux_version1 بايتإصدار حمولة AuxPoW. يستخدم Lokichain القيمة 0x00.
parent_coinbase_txمعاملة متسلسلةمعاملة coinbase الرئيسية الكاملة التي تحتوي على التزام التعدين المدمج.
coinbase_branchفرع ميركل (طول var_int ، هاش 32 بايت، قناع جانبي 32 بت)يثبت إدراج معاملة coinbase في جذر ميركل الرئيسي.
chain_branchفرع ميركل (اختياري)يثبت التزام Lokichain داخل شجرة ميركل للعمل المساعد؛ يكون فارغًا عندما تخدم الكتلة الرئيسية Lokichain فقط.
parent_headerترويسة متسلسلة 80 بايتترويسة السلسلة الرئيسية التي سيتم التحقق من إثبات عملها مقابل متطلبات Lokichain.

كتلة إثبات العمل المساعد (Aux PoW Block)

يتم تسلسل الحقول بالترتيب الموضح في الجدول أعلاه. يتم تثبيت aux_version عند 0x00؛ يجب أن يكون لـ coinbase_branch قناع جانبي وقدره 0 لأن الـ coinbase تقع في الفهرس 0؛ قد يكون chain_branch بطول صفر عندما يكون Lokichain هو السلسلة المساعدة الوحيدة. يتجاهل Lokichain عنصر block_hash القيدم والمستقل — حيث تعيد العقد حسابه من الترويسة وبيانات ميركل المقدمة.

التزام coinbase السلسلة الرئيسية

يضع المعدنون علامة التعدين المدمج 0xfa 0xbe 'm' 'm' في حقل scriptSig الخاص بـ parent_coinbase_tx ، متبوعًا مباشرة بـ:

  1. chain_root — جذر double-SHA256 الناتج عن دمج chain_branch مع هاش كتلة Lokichain الحالية، مشفر بنظام little-endian في السكربت.
  2. tree_size — قيمة uint32 بنظام little-endian يجب أن تساوي 1 << chain_branch.Size().
  3. merkle_nonce — قيمة uint32 بنظام little-endian مختلطة مع chain_id لـ AuxPoW لاختيار المكان المحدد لـ Lokichain في شجرة العمل المساعد.
تلميح

يستخدم Lokichain القيمة 0x21 كمعرف chain_id لـ AuxPoW.

عندما يشارك Lokichain فقط، يكون طول chain_branch صفرًا ويكون chain_root هو مجرد هاش كتلة Lokichain الحالية. ومع وجود سلاسل مساعدة متعددة، يقدم المعدنون الفرع الذي يحقق ورقة Lokichain داخل شجرة العمل المساعد المشتركة.

قواعد التحقق

يتحقق إجماع Lokichain من كتل AuxPoW كما يلي:

  • يتطلب تعيين بت ترويسة AuxPoW والترميز الصحيح لـ ChainID لمعاملات الشبكة الحالية.
  • عمل هاش لـ parent_header والتأكد من أن إثبات العمل الناتج يحقق أو يتجاوز هدف صعوبة Lokichain لارتفاع الكتلة.
  • إعادة حساب جذر ميركل الرئيسي باستخدام parent_coinbase_tx و coinbase_branch ، والتأكد من مطابقته للجذر في parent_header.
  • التحقق من أن coinbase_branch.SideMask هو صفر وأن حجم معاملة coinbase يبقى ضمن حدود الإجماع.
  • دمج هاش كتلة Lokichain الحالية مع chain_branch (إن وجد) لاستخلاص chain_root ، والتحقق من ظهور بايتات little-endian في coinbase السلسلة الرئيسية مباشرة بعد علامة التعدين المدمج.
  • التأكد من أن tree_size يساوي 1 << chain_branch.Size() وأن الـ SideMask من chain_branch يطابق الفهرس المتوقع getExpectedIndex(merkle_nonce, chain_id, branch_size).
  • تأكيد قواعد إجماع Lokichain القياسية في ترويسة الكتلة الحالية (ارتباط الهاش السابق، بتات الصعوبة، متوسط الوقت، والتحقق من السياق).
  • رفض حمولات AuxPoW التي تتضمن حقل block_hash المهجور أو التي لا تتطابق مع التسلسل المتوقع.
important

التنشيط (على الشبكة الرئيسية): الكتلة رقم 115,840.

الأسس المنطقية

إن إعادة استخدام هيكل التعدين المدمج المتبع منذ فترة طويلة يحافظ على دلالات متوافقة مع BIP، بينما يوفر حذف حقل block_hash الزائد تحسينًا متواضعًا في عرض النطاق الترددي والتخزين. هذا الهيكل متوافق مع برمجيات مجمعات التعدين الحالية التي تدعم بالفعل شبكات AuxPoW.

التنفيذ المرجعي

تم تنفيذه في go-flokicoin (الربط + الإجماع). انظر الإصدار 0.25.7-beta لمعرفة معاملات التنشيط وهياكل الربط.

دعم RPC

يتم عرض تعدين AuxPoW عبر واجهة RPC القياسية:

createauxblock <payout_address>

إرجاع كائن يحتوي على:

  • hash — المعرف الذي يجب على المعدنين عمل هاش له في coinbase السلسلة الرئيسية.
  • chainid — معرف سلسلة Lokichain (عشري 33 ، سداسي عشري 0x21).
  • previousblockhash, height, bits, target — سياق السلسلة الفرعية وهدف العمل.
  • coinbasevalue — دفع coinbase السلسلة الفرعية بالوحدات الأساسية.

مثال على الاستجابة:

{
"hash": "0c63598bf66646ee9bf80797a40d607d12db9a6bc97fd4b98da70c904dd250c8",
"chainid": 33,
"previousblockhash": "94f1f588f620713ef99dfb1b2f3079a0f4545d4e15035e8227c5534dea965f33",
"coinbasevalue": 100000000000,
"bits": "202f725e",
"height": 13,
"target": "2f725e0000000000000000000000000000000000000000000000000000000000"
}

يقوم المعدنون باستدعاء:

submitauxblock <hash> <auxpow_hex>

حيث أن auxpow_hex هي حمولة AuxPoW المتسلسلة والمبنية من قالب الكتلة الرئيسي.