FIP-06: التعدين المدمج (Merge Mining)
المؤلف: Izimmerma <izimer@ohstr.com>
الحالة: نهائي
تاريخ الإنشاء: 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_version | 1 بايت | إصدار حمولة 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 ، متبوعًا مباشرة بـ:
chain_root— جذر double-SHA256 الناتج عن دمجchain_branchمع هاش كتلة Lokichain الحالية، مشفر بنظام little-endian في السكربت.tree_size— قيمةuint32بنظام little-endian يجب أن تساوي1 << chain_branch.Size().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المهجور أو التي لا تتطابق مع التسلسل المتوقع.
التنشيط (على الشبكة الرئيسية): الكتلة رقم 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 المتسلسلة والمبنية من قالب الكتلة الرئيسي.