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.