50 / 691NONCE

Nonce

عداد التعدين في ترويسة الكتلة

Nonce في تعدين Bitcoin هو حقل من 32 بت في ترويسة كتلة من 80 بايت. يغيّره المعدّنون بحثًا عن تجزئة double-SHA-256 تكون قيمتها العددية أصغر من أو مساوية لقيمة target الخاصة بـ Proof of Work.

Nonce الخاص بالتعدين معامل بحث علني من النوع uint32، وليس سرًا ولا nonce خاصًا بالتوقيع. عند تثبيت سائر حقول الترويسة يتيح 2^32 قيمة تستنفدها أجهزة ASIC الحديثة بسرعة. لذا يجدّد برنامج التعدين فضاء البحث بتغيير Extranonce داخل معاملة coinbase ومن ثم Merkle root، أو بتغيير nTime وبتات version المسموح بها.

تتكون ترويسة Bitcoin من 80 بايت: version وتجزئة الكتلة السابقة وMerkle root وtime وnBits وNonce من أربعة بايتات. Nonce عدد صحيح غير سالب من 32 بت، يُسلسل بترتيب little-endian. يغيّر تعديل هذا الحقل الترويسة المسلسلة وتجزئتها double-SHA-256 من دون أن يغيّر بذاته قائمة المعاملات. [Bitcoin Developer Reference — Block headers]

لا تتيح التغييرات الصغيرة في مدخل SHA-256 اتجاهًا مفيدًا نحو النجاح. زيادة Nonce بمقدار واحد تنتج تجزئة من 256 بت لا ترتبط عمليًا بسابقتها، لذا يمكن نمذجة الترويسات المختلفة كمحاولات احتمالية مستقلة. أما تكرار الترويسة نفسها تمامًا فيعيد التجزئة نفسها دائمًا؛ ولا يوجد تدرّج مفيد يقود إلى القيمة الناجحة. [Bitcoin Developer Reference — Block headers] [Bitcoin Developer Guide — Mining]

يتيح Nonce ذو الأربعة بايتات بالضبط 4,294,967,296 قيمة، أي 2^32، إذا بقيت بقية حقول الترويسة ثابتة. يستطيع ASIC حديث اجتياز هذا المجال مرات عديدة في الثانية، لذلك لا يكفي حقل Nonce وحده للتعدين الحديث. استنفاد المجال لا يضمن العثور على Proof of Work صالح. [Bitcoin Developer Reference — Block headers] [BIP 320 — nVersion bits for general purpose use]

يستخدم Mining Pool وبرنامج التعدين Extranonce داخل معاملة coinbase. رغم تشابه الاسم، فإنه ليس حقلًا آخر في الترويسة. يغيّر تعديل Extranonce قيمة coinbase txid ثم Merkle root في الترويسة، فيفتح فضاء جديدًا من 2^32 قيمة لـ Nonce التعدين. [Bitcoin Developer Guide — Mining] [Bitcoin Developer Reference — Transactions]

تشكّل معاملة coinbase ورقة في شجرة Merkle. عند إعادة حساب الشجرة ينتقل أثر تغيير txid إلى Merkle root في الترويسة. يحصل المعدّن على ترويسة جديدة مع تجزئة الكتلة السابقة نفسها ومحتوى يكاد يطابق السابق؛ ولا يلزمه تغيير المعاملات الأخرى لهذا الغرض. [Bitcoin Developer Reference — Block headers] [Bitcoin Developer Guide — Mining]

يمكن توسيع فضاء البحث بتغيير nTime ضمن الحدود المسموحة أو بتغيير بتات version المسموح بها، وهو ما يسمى version rolling. يقترح BIP320 استخدام بعض بتات nVersion لأغراض عامة؛ ولا يعني الاقتراح وحده جواز تغيير جميع البتات اعتباطيًا. تبقى قواعد الإجماع ومهمة التعدين واجبة، وعلى التجزئة النهائية استيفاء target. [BIP 23 — getblocktemplate pooled mining] [BIP 320 — nVersion bits for general purpose use]

في التعدين المشترك يخصص Mining Pool أو منسق المهام معاملات coinbase/Extranonce مختلفة أو غيرها لكل worker، كي لا تهدر الأجهزة العمل على ترويسات متطابقة. يصف BIP23 كذلك المعامل الاختياري noncerange. توزّع بروتوكولات Stratum فضاء البحث بين أجهزة ASIC كثيرة. [BIP 23 — getblocktemplate pooled mining] [Bitcoin Developer Guide — Mining]

القيمة العددية لـ Nonce ليست جيدة أو سيئة بذاتها. يحسب Full Node تجزئة الترويسة المعينة بأكملها ويقارنها بقيمة target صالحة مشتقة من nBits. انخفاض Nonce لا يثبت شيئًا؛ المطلوب أن تكون تجزئة الترويسة الكاملة أصغر من أو مساوية لـ target. استيفاء هذا الشرط لا يغني عن التحقق من سائر قواعد صلاحية الكتلة. [Bitcoin Developer Reference — Block headers] [Bitcoin Core v30.0 — Proof of Work validation]

يُستخدم nonce أيضًا في التوقيعات التشفيرية. قد يكشف تكرار استخدام القيمة القياسية السرية للتوقيع على نحو خاطئ لرسائل مختلفة عن Private Key. أما Nonce التعدين فهو بيانات علنية في الترويسة ولا يحتاج إلى السرية. يجب عدم الخلط بين بيانات التوقيع العلنية وقيمته القياسية السرية أو عداد التعدين. [BIP 340 — Schnorr Signatures]

يعيد Bitcoin Core عبر getblockheader حقول nonce وbits وtime وغيرها في الخرج التفصيلي الافتراضي. ضبط المعامل verbose على false يعيد الترويسة المسلسلة بالصيغة الست عشرية. للتحقق المستقل، كوّن أو فك ترميز بايتاتها الثمانين، أي 80 بايت، بدقة واحسب double-SHA-256، ثم قارن القيمة العددية للتجزئة بقيمة target صالحة مع مراعاة ترتيب بايتات Bitcoin. [Bitcoin Developer Reference — Block headers] [Bitcoin Core RPC — getblockheader] [Bitcoin Core v30.0 — Proof of Work validation]

للحصول على صورة أوضح، اقرأ هذا المدخل مع رأس الكتلة, تعدين بيتكوين, Proof of Work, Mining Target, معاملة كوينبيس, Bitcoin. تشير إلى هذا المدخل أيضًا رأس الكتلة, معاملة كوينبيس, ASIC Miner, Mining Target.

DOC · 001Bitcoin Developer Reference — Block headersتوثيق ↗DOC · 002Bitcoin Developer Guide — Miningتوثيق ↗DOC · 003Bitcoin Developer Reference — Transactionsتوثيق ↗DOC · 004BIP 23 — getblocktemplate pooled miningمواصفة ↗DOC · 005BIP 320 — nVersion bits for general purpose useمواصفة ↗DOC · 006Bitcoin Core RPC — getblockheaderتوثيق ↗DOC · 007Bitcoin Core RPC — getblocktemplateتوثيق ↗DOC · 008Bitcoin Core v30.0 — Proof of Work validationمصدر أولي ↗DOC · 009BIP 340 — Schnorr Signaturesمواصفة ↗
المصادر أولًا · ليست نصيحة استثمارية