يحسب المعدّن تجزئة، أي بصمة رقمية لترويسة الكتلة. ولتحقيق Proof of Work (أي إثبات العمل الحسابي) يجب أن تكون النتيجة أصغر من حد مقرر يُسمى target أو مساوية له. Nonce إحدى القيم التي يمكن تغييرها لإعداد محاولة جديدة. وهو ليس كلمة مرور ولا مفتاحًا سريًا: يستطيع الجميع رؤيته بعد نشر الكتلة.
لدى آنا جهاز تعدين يحاول إنشاء كتلة جديدة من المعاملات. يأخذ الجهاز الترويسة، وهي مجموعة موجزة من معلومات الكتلة، ويحسب باستخدام SHA-256 بصمة رقمية تُسمى التجزئة. يطبق Bitcoin الحساب مرتين، ولذلك يسمى double-SHA-256. إذا تجاوزت النتيجة الحد المسموح، يغيّر الجهاز مثلًا Nonce من 10 إلى 11 ثم يحاول مجددًا. لا تخمّن آنا الأرقام يدويًا؛ فالجهاز ينفذ عددًا هائلًا من المحاولات تلقائيًا. لكن زيادة Nonce لا تعني تجزئة أصغر أو اقترابًا من الهدف. والترويسة المطابقة تمامًا تعطي التجزئة نفسها دائمًا، لذا لا يضيف تكرار حسابها فرصة جديدة. [1] [2]
تُخصص لـ Nonce أربعة بايتات، أي 32 بت. وهي تتسع للأعداد الصحيحة من 0 إلى 4,294,967,295 شاملًا الطرفين: مجموعها 4,294,967,296 احتمالًا، ويُكتب العدد 2^32. يبدو ذلك كثيرًا لنا، لكن جهاز التعدين المتخصص ASIC يستطيع استعراض هذا النطاق بسرعة كبيرة. وتجربة جميع القيم لا تضمن النجاح. إذا لم تتغير بقية بيانات الترويسة، فإن العودة إلى البداية تكرر النتائج السابقة فحسب. لذلك يحتاج البرنامج أيضًا إلى إعداد ترويسات مختلفة. [1] [5]
إحدى الطرق هي تغيير Extranonce. قد يسبب تشابه الاسمين التباسًا: Extranonce ليست خانة إضافية في الترويسة، بل بيانات داخل معاملة coinbase، أول معاملة في الكتلة، التي تخصص مكافأة التعدين. يؤدي تغييرها إلى تغيير معرّف المعاملة txid، ثم Merkle root، البصمة المشتركة للمعاملات المخزنة في الترويسة. بذلك يحصل الجهاز على مدخل مختلف. ويمكنه استخدام قيم Nonce نفسها مجددًا، لكنه يحسب هذه المرة تجزئات ترويسات أخرى. ومجموعة جديدة من 2^32 احتمالًا لا تضمن العثور على كتلة أيضًا. [2] [3]
قد يعرض مستكشف الكتل قيمة Nonce صغيرة لكتلة وكبيرة لأخرى. لا يخبرك الرقم وحده بمدى صعوبة العثور على الكتلة أو بأنها أفضل. Full Node برنامج يتحقق بنفسه من الكتل والمعاملات وفق قواعد Bitcoin. ويحسب تجزئة الترويسة كاملة ويقارنها بحد target صالح، ويحتوي الحقل nBits على تمثيله المختصر. المهم أن تكون التجزئة أصغر من هذا الحد أو مساوية له، لا حجم Nonce. ولا تنتهي المراجعة هنا: على العقدة التحقق أيضًا من المعاملات وسائر قواعد صلاحية الكتلة. [1] [8]
ستصادف nonce أيضًا عند قراءة شرح توقيع المعاملات. وقد تعني هناك رقمًا مساعدًا سريًا، يسمى تقنيًا قيمة قياسية، تستخدمه الخوارزمية مع Private Key، أي المفتاح الخاص الذي يجيز إنفاق الأموال. إعادة استخدام ذلك الرقم خطأً لرسائل مختلفة قد تكشف المفتاح. أما Nonce التعدين فهو علني، ويجوز أن يظهر الرقم نفسه في ترويسات مختلفة. كذلك فإن الأجزاء العلنية من التوقيع ليست ذلك الرقم المساعد السري. لذا لا يصح نقل قواعد أحد الاستخدامين إلى الآخر دون مراعاة السياق. [9]
عندما تعمل أجهزة كثيرة معًا في Mining Pool، لا ينبغي أن تحسب كلها تجزئات الترويسات نفسها؛ فالتكرار لا يضيف محاولات جديدة. يخصص المنسق لذلك بيانات مختلفة، مثل بيانات coinbase وExtranonce. تنقل بروتوكولات مثل Stratum المهام، وتُسمى وحدات التعدين المتصلة أيضًا workers. ويصف BIP23 المعامل الاختياري noncerange لتحديد نطاق Nonce. لا يعني هذا أن كل تجمع ملزم باستخدامه أو أنه يستطيع تغيير قواعد صلاحية الكتل. [4] [2]
تجمع Merkle Tree بصمات المعاملات على مراحل وصولًا إلى بصمة مشتركة واحدة هي Merkle root. يدخل معرّف معاملة coinbase، أي txid، في الحساب بوصفه ورقة من أوراق الشجرة. لذلك ينتج عن تغيير Extranonce معرّف txid جديد، ثم Merkle root جديدة. يستطيع المعدّن الإبقاء على بقية المعاملات والإشارة إلى الكتلة السابقة والحصول مع ذلك على ترويسة مختلفة. هذا ليس تعديلًا لكتلة مؤكدة، بل تغيير لمسودة كتلة جديدة ما زال البحث عن Proof of Work صالح لها جاريًا. [1] [2]
يمكن للبرنامج إعداد ترويسات إضافية بتغيير الوقت nTime ضمن الحدود المسموحة أو بتغيير بتات الإصدار المصرح بها. تُسمى الطريقة الثانية version rolling. يقترح BIP320 استخدام بعض بتات nVersion لأغراض عامة؛ لكن الاقتراح نفسه لا يجيز تغيير جميع البتات اعتباطيًا. تظل قواعد الشبكة ومهمة التعدين المسندة سارية. ولا يعفي أي من هذه الخيارات التجزئة النهائية من استيفاء target صالح. يقترح BIP323 الأحدث استخدام مزيد من البتات، وما زال في حالة Draft، أي مسودة. [4] [5] [10]
تفيد معرفة الصيغة عند قراءة الوثائق التقنية. تتكون الترويسة من 80 بايت: الإصدار، وتجزئة الكتلة السابقة، وMerkle root، والوقت، وnBits، وNonce من أربعة بايتات. Nonce عدد صحيح غير سالب من 32 بت، ونوعه uint32. يُكتب بترتيب little-endian، أي البايت الذي يمثل الخانات الأقل وزنًا أولًا. تغيير Nonce وحده يغيّر الترويسة وتجزئتها double-SHA-256، ولا يغيّر قائمة المعاملات. يحتاج البرنامج إلى هذا التمثيل الدقيق، لكن فهم غرض التعدين لا يتطلب تركيبه يدويًا. [1]
يمكن للقارئ المتقدم استخدام أمر getblockheader في Bitcoin Core مع تجزئة كتلة محددة. يعرض الخرج التفصيلي الافتراضي حقولًا منها nonce وbits وtime. وضبط المعامل verbose على false يعيد بايتات الترويسة الثمانين، أي 80 بايت، بدقة في صيغة ست عشرية. يمكن حساب double-SHA-256 منها ومقارنة النتيجة العددية بحد target صالح. ويجب على التنفيذ البرمجي الخاص الالتزام بترتيب بايتات Bitcoin؛ فعكسها بصورة خاطئة يغيّر المقارنة. مجرد قراءة Nonce في المستكشف لا يغني عن هذا التحقق. [1] [6] [8]
للحصول على صورة أوضح، اقرأ هذا المدخل مع Block Header, التعدين, Proof of Work, Mining Target, معاملة كوينبيس, Bitcoin. تشير إلى هذا المدخل أيضًا Block Header, معاملة كوينبيس, ASIC Miner, Stratum V1.