ما يجب أن تعرفه عن nonces والصعوبة

هذه هي المقالة السادسة في سلسلة من المنشورات حيث نناقش المفاهيم الأساسية وراء Blockchain و Bitcoin و Ethereum. في Verify ، نبني بروتوكول سمعة على Ethereum blockchain ونشارك هذه المنشورات في محاولة لمشاركة معرفتنا مع مجتمع التشفير الأوسع.

في Ethereum ABC ، ​​قدمنا ​​حقول الحساب. ذكرنا الحقل nonce ، لكننا لم نوضحه مطلقًا. هذا المنشور سوف يتعمق في ذلك.

كل معاملة في Ethereum لها ما يسمى nonce . رأينا لأول مرة كلمة nonce في حديثنا عن تعدين Bitcoins ، والتي تُستخدم للعثور على دليل على العمل ؛ هل هو نفسه غير موجود في معاملات Ethereum؟ دعونا ننظر في هذا السؤال.

في Ethereum ، يوجد nonce للكتلة ، وهو مشابه لما قدمناه في Bitcoin. هناك أيضًا عملة غير رسمية لكل معاملة (في الحسابات الخارجية). هو عدد المعاملات التي تم إجراؤها أو إرسالها من عنوان معين. كلما قمت بإرسال معاملة ، تتم زيادة قيمة nonce بواحد. سبب وجود عملة غير متوقعة في المعاملة هو ضمان:

& GT. أن يتم تنفيذ المعاملات بالترتيب.

ربما تكون قد خمنت بالفعل سبب أهمية ذلك. حسنًا ، لقد خمنت بشكل صحيح: إنه لمنع الإنفاق المزدوج. ضع في اعتبارك مثالاً حيث:

هذا هو السبب في أن لديك عددًا غير محدود من معاملات Ethereum ، ولا يمكن أن يحدث الإنفاق المزدوج أبدًا. لا يمكن أبدًا استخراج معاملة nonce 2 قبل معاملة nonce 1. لاحظ أيضًا أنه لا يمكن تخطي عملة nonce. وهذا يعني أنك إذا أرسلت معاملة مع nonce 3 دون إرسال nonce 2 فلن يعمل. يجب أن تكون الأحرف الضائعة متتالية وبالترتيب ، لا عمليات التخطي .

ماذا عن العقود؟ إنها نوع من الحسابات ، لذا فهم أيضًا لديهم حق غير قانوني؟

نعم يفعلون وهو في الأساس يفعل نفس الشيء ؛ إنه عداد. في العقود ، فإن nonce هو عدد العقود التي تم إنشاؤها بواسطة العقد المذكور. تتم زيادة قيمة nonce فقط عندما يُنشئ أحد عقد عقدًا آخر . عندما يستدعي عقد طريقة ما في عقد قائم ، لن تتم زيادة القيمة غير النقدية.

يمكن الحصول على الرقم nonce على النحو التالي:

افحص السطر أعلاه لمدة ثانية. “الحصول على عدد المعاملات ” ، هل هذا يعني أنه لا يمكن استخدام هذا إلا للحصول على المعاملات غير الرسمية؟ للأسف نعم. لا توجد طريقة / وظيفة مضمنة حيث يمكن للعقد الوصول إلى حسابه الخاص أو الحساب الخارجي. ستكون طريقتك في ذلك هي تخزين عداد في العقد والقراءة / الكتابة حسب الحاجة.

الآن دعونا نتحدث عن nonce في كتلة Ethereum .

مثل Bitcoin ، تتطلب Ethereum إثباتًا للعمل (خطط الانتقال إلى إثبات الحصة قيد التنفيذ بالفعل). لقد رأينا أنه في Bitcoin ، يجب أن يتوافق إثبات العمل مع الهدف الذي يجب أن يبدأ بعدد من الأصفار. يستمر هذا الهدف في التكيف مع زيادة الصعوبة أو انخفاضها. يمكنك تتبع صعوبة عملات البيتكوين هنا.

لإنشاء دليل على العمل (PoW) ، فإن nonce مطلوب كما رأينا في الوظيفة السابقة للتعدين في Bitcoin. لقد رأينا أيضًا أن صعوبة إنشاء الكتلة تتم معايرة كل كتل 2016 ، للحفاظ على إنشاء الكتلة ضمن متوسط ​​كتلة واحدة كل 10 دقائق. ترتبط الصعوبة بمنع وقت التوليد. بمعنى أنه سيتم ضبط إما الزيادة أو النقصان وفقًا لمدى سرعة إنشاء الكتلة. نريد أساسًا كتلة كل 10 دقائق (2016 كتل في أسبوعين).

يتم حساب الصعوبة باستخدام الصيغة:

trouble_1_target هو الحد الأقصى للهدف الذي تستخدمه أجهزة التعدين SHA256 ، وهو أعلى هدف ممكن وهو أول صعوبة تُستخدم عندما كانت عملة البيتكوين قيد التكوين (أي أقل صعوبة ممكنة وهي 1 ، منذ البداية Current_target هو trouble_1_target ). يخزنها البيتكوين كنوع النقطة العائمة:

من التمثيل:

بافتراض أن هدف الكتلة الحالي هو:

لذا فإن الصعوبة هي (لاحظ التقسيم / ):

تعني Bdiff أننا قمنا بحساب الصعوبة باستخدام تنسيق الفاصلة العائمة ؛ وهو ما يعني أساسًا أن هذه الكتلة أصعب بمقدار 16307.4 مرة مما كانت عليه عندما كانت في التكوين. بافتراض أن الصعوبة الحالية تساوي أعلى هدف ممكن من أن تكون الصعوبة واحدة وهذا هو الحد الأدنى من الصعوبة الممكنة. لذلك كلما انخفض الهدف زادت الصعوبة .

دعونا نلقي نظرة سريعة على Block # 488262 التجزئة الخاصة به

من تفاصيل كتلة blockexplore ، تكون الصعوبة في 1123863285132.9668. مع وضع ذلك في الاعتبار ، دعنا نعود إلى تجزئة الكتلة # 488262 ونفحصها قليلاً ، لذا

يمثل أحد ست عشري عابرة (4 بت) ، لذا فإن كل 4 أصفار (4 أرقام سداسية عشرية) تمثل 16 بتًا (4 * 4 = 16 بت). لدينا 4 مجموعات من 4 أصفار. إذن 16 * 4 = 64 بت.

الآن لا يزال لدينا 2 أصفار (8 بت)

64 + 8 = 72 بت بادئًا الأصفار

ارجع إلى blockexplorer وافحص حقول البتات ؛ ستدرك أن القيمة الموجودة هناك هي 1800fa73 ؛ إنه في شكل مضغوط . دعونا نرى ما يمكننا الخروج منه.

النموذج المضغوط هو في الأساس مزيج من جزأين مهمين وهما: عدد البايت والجزء الآخر هو البادئة.

في 18 00fa73 لدينا 18 في النظام الست عشري ، وسيؤدي التحويل إلى الرقم العشري إلى 24 ؛ لذلك هذا يعني أن هناك 24 بايت (البايت هو 8 بتات ، لذا فإن رقمين HEX يساوي 1 بايت).

الجزء الآخر في 18 00fa73 هو البادئة. بتجميع كل ذلك معًا ، سنؤدي إلى:

00fa73 000000000000000000000000000000000000000000 (إجمالي 24 بايت). تذكر التجزئة هو رقم 256 بت ، لذا فهو رقم 32 بايت . لكي يكون رقمنا 32 بايت ، فإنه يحتاج إلى 8 بايت إضافية من الأصفار ، لذلك نضيف 16 صفراً في المقدمة (في شكل سداسي عشري):

الآن لمعرفة الصعوبة التي نواجهها (trouble_1_target / current_target):

نحصل على 1.1238633e + 12 وهو أساسًا = 1123863285132 الصعوبة التي تم الحصول عليها

لذلك نريد تجزئة الكتلة / إثبات العمل برقم أقل من الهدف الذي حصلنا عليه من حقل البتات 1800fa73 ؛ باستخدام ذلك يمكننا حساب صعوبة التجزئة. تذكر أن الصعوبة تتكيف لتتوافق مع 10 دقائق / قاعدة الحظر. في Bitcoin ، يمكنك تغيير nonce للحصول على إثبات عمل يتوافق مع الهدف.

في Ethereum الأمر مختلف قليلاً. بادئ ذي بدء ، لا يزال يمر بمراحل الإصدار. كانت في مرحلة تسمى فرونتير وهي الآن في هومستيد. لذا توقع أن تتغير الأشياء مع تقدم الأشياء. إثبات العمل في Ethereum لا يزال يستخدم nonce لإنشاء إثبات العمل ولكن بدلاً من البتات في Bitcoin ، هناك مجال صعوبة في Ethereum.

تحتوي كتلة ethereum نفسها على حقول أكثر من تلك الموجودة في Bitcoin. تحتوي كتلة Ethereum ، بصرف النظر عن المعاملات ، أيضًا على تجزئة لأحدث حالة و صعوبة ورقم الكتلة. الغرض من nonce هنا هو العثور على دليل للعمل فيما يتعلق بعتبة الصعوبة .

تُستخدم الصعوبة في كتلة Ethereum لحساب الهدف لإثبات العمل. يتم استخدامه للتحكم في مدى صعوبة إثبات العمل. تم ضبطه على إبقاء الشبكة في كتلة كل 15 ثانية (اعتادت أن تكون 12 ثانية في الإصدار الأصلي من Ethereum). قد تؤدي الكتلة كل 15 ثانية إلى صعوبة إنشاء مفترق أطول من الشبكة إلا إذا كان لديك طاقة أكبر من الشبكة.

لذلك نرى أنه بالنسبة للكتل ، فإن اللامساتي تقوم بنفس الشيء في الأساس. تختلف الأشياء في Ethereum قليلاً عن Bitcoin (بصرف النظر عن إثبات خوارزمية العمل) ، يتم أخذ الصعوبة في الاعتبار عند تحديد الكتلة المراد تضمينها في blockchain.