226 / 736XNONCE

Extranonce

كيف يجد المعدّن مجالًا لمحاولات جديدة

تتعلم ألينا كيف تُنشأ كتلة جديدة. يغيّر المعدّن بيانات الإدخال ويحسب هاشًا، أي بصمة موجزة يجب أن تحقق قيمتها العددية شرط الشبكة. لكن ماذا يحدث عندما يجرب كل قيم أحد الحقول القابلة للتغيير دون نجاح؟ يتيح Extranonce إعداد تنويعات جديدة ومواصلة البحث. فهو لا يخفف قواعد Bitcoin ولا يعد بمكافأة، بل يساعد الأجهزة على تجنب تكرار المحاولات نفسها.

Extranonce بيانات إضافية متغيرة يضعها برنامج التعدين عادة في coinbase، المعاملة الأولى الخاصة في الكتلة التي تخصص مكافأة التعدين. تغيير هذه البيانات يغيّر البصمة المجمعة للمعاملات في ترويسة الكتلة، فيوفر مدخلات جديدة للبحث. أما حقل nonce المنفصل في الترويسة فلا يزداد حجمه.

الترويسة ملخص موجز لبيانات الكتلة. يمثل البت صفرًا أو واحدًا، وتكوّن ثمانية بتات بايتًا. وتضم الترويسة حقل ⁦nonce⁩ بطول ⁦32⁩ بتًا، يتيح ⁦2^32⁩ قيمة إذا بقيت بقية البيانات ثابتة. تجربة الترويسة نفسها مع قيمة ⁦nonce⁩ نفسها تعطي الهاش نفسه، ومن ثم النتيجة نفسها. لا يطيل Extranonce هذا الحقل؛ بل يغيّر بيانات أخرى تُعدّ منها ترويسة جديدة. يمكن لألينا أن تتخيل تكليفًا جديدًا يسمح بإعادة المرور على قيم العداد. وعمليًا، يمكن أيضًا تغيير أجزاء أخرى من الترويسة ضمن القواعد المسموح بها. [1] [5]

تعني coinbase هنا أول معاملة في كل كتلة، لا منصة التداول. عندما يغيّر البرنامج extranonce فيها، تتغير بيانات المعاملة المكتوبة بصيغتها الرقمية ومُعرّفها المحسوب ⁦TXID⁩. تقود شجرة تجمع البصمات تدريجيًا إلى ⁦Merkle root⁩، أي بصمة المعاملات المجمعة المخزنة في الترويسة. يجب على البرنامج إعادة حساب الفرع المتأثر. يمكن أن تبقى المعاملات الأخرى كما هي، لكن لا يمكن الاحتفاظ بالجذر القديم دون إعادة الحساب. هذا الترابط هو ما يمنح الترويسة الجديدة مدخلات مختلفة للتعدين. [1]

في نموذج مبسط، نثبت كل شيء آخر ونسمح ببايتين حُرّين تمامًا في extranonce. يتيحان ⁦2^16⁩ تنويعًا؛ ومع ⁦nonce⁩ بطول ⁦32⁩ بتًا يصبح لدينا ⁦2^48⁩ تركيبًا للمدخلات. هذه محاولات ممكنة، وليست عدد الكتل التي عُثر عليها. لا تحصل ألينا على شرط أسهل أو يقين بالنجاح ضمن هذه المجموعة. الفائدة عملية: ما زال هناك مجال جديد للبحث. وإضافة مساحة حرة لا تسرّع بحد ذاتها الجهاز الذي يجب أن ينفذ الحسابات فعلًا. [1]

المساحة المخصصة لـ extranonce ليست نموذجًا فارغًا بلا قواعد. تتطلب ⁦BIP 34⁩، وهي قاعدة محددة في Bitcoin، ترميز ارتفاع الكتلة الصحيح، أي موقعها في السلسلة، في بداية حقل بيانات مدخل coinbase المسمى ⁦scriptSig⁩. حد ⁦100⁩ بايت يخص ⁦coinbase scriptSig⁩ كاملًا، لا extranonce وحده. يجب أن يترك البرنامج مكانًا للبيانات الإلزامية ويحافظ على الصيغة الصحيحة. لو كتبت ألينا فوقها، لبحثت الحسابات اللاحقة عن حل لكتلة غير صالحة. [3] [4]

في التعدين الجماعي ضمن مجمّع، يفيد أن تبحث الأجهزة المختلفة في تنويعات مختلفة. يستخدم ⁦Stratum V2⁩، وهو بروتوكول لتوزيع مهام التعدين، تقسيم extranonce للمساعدة في ذلك. يخصص الخادم الأعلى، ⁦upstream⁩، بادئة ثابتة هي ⁦extranonce_prefix⁩، أي الجزء الأول من هذه البيانات. ويمكن لوسيط محلي حجز جزء آخر لعملائه وتمرير الباقي إلى الأسفل، ⁦downstream⁩. هذه اتجاهات نسبية للاتصال المعني. البادئة المخصصة ليست تلقائيًا مساحة يجوز للمعدّن النهائي تغييرها؛ فثباتها يساعد على فصل أعمال المشاركين. [2]

في قناة موسعة من ⁦Stratum V2⁩، يرسل ⁦SubmitSharesExtended⁩ البايتات المتغيرة مع النتيجة. تُجمع coinbase بالترتيب ⁦coinbase_tx_prefix⁩ ثم ⁦extranonce_prefix⁩ ثم ⁦extranonce⁩ ثم ⁦coinbase_tx_suffix⁩. هذه أسماء أجزاء البيانات التي تتبادلها برامج التعدين. يجب أن يكون لحقل ⁦extranonce⁩ الطول المتفق عليه. وحتى إن بدا الترميز الأقصر كأنه العدد نفسه، فقد تعني سلسلة بايتات مختلفة معاملة مختلفة. تقارن الحواسيب بيانات دقيقة، لا تفسيرًا بشريًا تقريبيًا لها. [2]

تكون ⁦Standard Job⁩ في ⁦Stratum V2⁩ مهمة ذات ⁦Merkle root⁩ ثابت. لا يغيّر الجهاز النهائي إلا الأجزاء المسموح بها من ⁦version⁩ و⁦nonce⁩ و⁦nTime⁩: إصدار الترويسة وعدادها ووقتها. لذلك لا يرسل extranonce خاصًا به كما في القناة الموسعة. يستطيع البرنامج الأعلى إعداد coinbase جديدة وجذر جديد ثم توفير مهمة أخرى. وقد لا تجد ألينا إعدادًا لـ extranonce على جهازها، مع أن المنظومة ككل تستخدم هذه الآلية. [2]

لنتخيل وصول بادئة جديدة أثناء معالجة نتيجة عمل سابق. تنطبق ⁦SetExtranoncePrefix⁩ في ⁦Stratum V2⁩ على المهام المرسلة بعدها في القناة المعنية، أي جلسة التعدين ذات الصلة. يجب أن تبقى النتيجة مرتبطة بـ ⁦job_id⁩ الصحيح، وهو معرّف المهمة، وبالمساحة المخصصة لها. إحلال أحدث بادئة في كل موضع قد يغيّر البيانات التي بُنيت عليها نتيجة قديمة. الغرض من extranonce إنشاء محاولات مختلفة وتتبع ارتباطها بمهامها، لا إعادة كتابة التكليف بعد إنجازه. [2]

للحصول على صورة أوضح، اقرأ هذا المدخل مع Nonce, Merkle Tree, Mining Share, Block Template, Bitcoin. تشير إلى هذا المدخل أيضًا ASIC Miner, Stratum V1, Stratum V2, Block Template.

DOC · 001Bitcoin Developer Guide — Mining and nonce spaceتوثيق DOC · 002Stratum V2 — Extended extranonce and jobsمواصفة DOC · 003BIP 34 — Height in coinbaseمواصفة DOC · 004Bitcoin Developer Reference — Coinbase inputتوثيق DOC · 005NIST — Binary data unitsتوثيق
تمت المراجعة: المصادر أولًا · ليست نصيحة استثمارية