جدول المحتويات:

جهاز تعدين البيتكوين ESP8266: 3 خطوات
جهاز تعدين البيتكوين ESP8266: 3 خطوات

فيديو: جهاز تعدين البيتكوين ESP8266: 3 خطوات

فيديو: جهاز تعدين البيتكوين ESP8266: 3 خطوات
فيديو: The Bitmain S19J Pro | جهاز تعدين البيتكوين الأكثر شهرة | شرح التركيب والتشغيل والبرمجة 2024, يوليو
Anonim
جهاز تعدين البيتكوين ESP8266
جهاز تعدين البيتكوين ESP8266

مع استمرار ارتفاع سعر Bitcoin ومع توصيل زوج من ESP8266 دائمًا ولكنني لا أفعل الكثير ، فكرت في سبب عدم محاولة تطبيق Solo Bitcoin Miner. بعد قليل من التجربة ، حصلت على ESP8266 حتى 1200 تجزئة / ثانية ، واعتبارًا من ديسمبر 2017 ، كانت شبكة Bitcoin تؤدي حوالي 12.000.000 تيرا تجزئة في الثانية (يمكنك التحقق من blockchaininfo للحصول على أحدث الأرقام).

بناءً على هذه الأرقام ، ستكون لدينا فرصة 1 في 1e16 لتعدين كتلة بنجاح كل عشر دقائق حيث تبلغ قيمة الكتلة حاليًا 212 ألف دولار. بالتأكيد الأمر يشبه إلى حد كبير شراء تذكرة لوتو ، ولكن مع فرصة أقل بكثير للفوز ، لكنك تعلم المقولة القديمة ، يجب على شخص ما الفوز بها. مع كل من مشاريع Gate Mate و Super Squirter ESP8266 في معظم الأوقات لا يقومون بأي عمل ، يتم توصيلهم فقط وينتظرون الطلبات أو المدخلات ، فلماذا لا تضعهم في ذلك وربما تكسب بعض العملات المعدنية. كانت الخطوة الأولى هي محاولة اكتشاف ما إذا كان من الممكن إجراء SHA256 مزدوج على Blockheader على ESP8266. في عالم Bitcoin ، فإن "التجزئة" هي في الواقع عبارة عن SHA256 مزدوج ، لكننا سنشير إليها فقط باسم التجزئة. على أي حال ، بعد قليل من البحث في googling ، وجدت هاتين الصفحتين اللتين قدمتا جميع المعلومات اللازمة للحصول على التجزئة.

1. كتلة خوارزمية التجزئة

2. تعدين البيتكوين بالطريقة الصعبة: الخوارزميات والبروتوكولات والبايت

تجدر الإشارة إلى أن بروتوكول getwork ، كما هو مفصل في الروابط أعلاه ، قد تم إهماله. لقد تم استبداله ببروتوكول getblocktemplate مما يجعل الأمر أكثر تعقيدًا قليلاً لإنشاء رأس كتلة ، وتحديداً عليك إنشاء جذر Merkle الخاص بك. لجميع التفاصيل الجوهرية ، تحقق من getblocktemplate wiki.

الخطوة 1: الخوارزمية

الخوارزمية
الخوارزمية

دعنا ننتقل مباشرة ، رمز ESP8266 موجود في ESP8266BitcoinMiner GitHub repo. لن أقوم بإعادة صياغة جميع المعلومات الواردة من الروابط أعلاه ، بل سأقوم فقط بتسليط الضوء على النقاط الرئيسية.

char header_hex = 0100000081cd02ab7e569e8bcd9317e2fe99f2de44d49ab2b8851ba4a308000000000000e320b6c2fffc8d750423db8b1eb942ae710e951ed797f7affc8892b2b2f1f146

char header_hex هو رأس الكتلة وهو مبني من ستة حقول ، الإصدار ، hashPrevBlock ، hashMerkleRoot ، والوقت ، والبتات ، و Nonce كلها متسلسلة كقيم صغيرة في تدوين سداسي عشري. تم نسخ ذلك للتو من الرابط أعلاه ، ولكن في عامل منجم فعلي كامل ، ستحصل على كل حقل من هذه الحقول في كائن json ثم يتعين عليك فرز endianness ووضعه معًا أثناء التنقل كل 10 دقائق.

uint8_t * hex_decode (const char * in، size_t len، uint8_t * out) {

غير موقعة int i ، mg ، ng ، rg ؛ لـ (mg = 0، i = 0؛ i '9'؟ in - 'a' + 10: in - '0'؛ rg = in [i + 1]> '9'؟ in [i + 1] - 'a' + 10: in [i + 1] - '0'؛ out [mg] = (ng << 4) | rg؛} العودة ؛}

تأخذ hex_decode سلسلة header_hex ، التي تحتوي على أحرف ascii سداسية عشرية ، وتعبئ uint8_t hashbytes [80] بقيم البايت الخاصة بها الجاهزة لتجزئة SHA256.

تجزئة باطلة () {

hex_decode (header_hex، strlen (header_hex)، hashbytes) ؛ بداية طويلة بدون توقيع = ميكرو () ؛ hasher.doUpdate (hashbytes، sizeof (hashbytes)) ؛ تجزئة البايت [SHA256_SIZE] ؛ hasher.doFinal (تجزئة) ؛ hashagain.doUpdate (hash، sizeof (hash)) ؛ بايت تجزئة 2 [SHA256_SIZE] ؛ hashagain.doFinal (hash2) ؛ نهايات طويلة بدون توقيع = ميكرو () ؛ دلتا طويلة بدون توقيع = منتهية - بداية ؛ Serial.println (دلتا) ؛ Serial.print ("Big Endian:") ؛ لـ (byte i = 32؛ i> 0؛ i -) {if (hash2 [i-1] <0x10) {Serial.print ('0')؛ } Serial.print (hash2 [i-1]، HEX) ، } Serial.println () ، Serial.print ("Little Endian:") ؛ لـ (بايت i = 0 ؛ i <SHA256_SIZE ؛ i ++) {if (hash2 <0x10) {Serial.print ('0') ؛ } Serial.print (hash2 ، HEX) ، }}

تجزئة التجزئة ببساطة تجزئة الهاشبايت مرتين (مزدوج SHA256) ، وتطبع الثواني التي استغرقتها وتطبع التجزئة الناتجة باعتبارها endian كبيرة و endian صغيرة. إذا تم دمج التجزئات في تجزئة SHA256 واحدة فقط ، فمن المحتمل أن يكون ذلك أسرع قليلاً ولكن على أي حال مع الكود أعلاه ، يستغرق الأمر 832 ثانية لأداء التجزئة المزدوجة ويمكنك أن ترى من لقطة الشاشة نحصل على التجزئة الصحيحة.

الخطوة 2: الاصطدام بجدار وكتلة كبيرة حقًا

الاصطدام بجدار وكتلة كبيرة حقًا
الاصطدام بجدار وكتلة كبيرة حقًا

لذلك إذا استغرق الأمر 832 ثانية لإجراء تجزئة واحدة ، فيمكننا إجراء 1 / 0.000834 = 1201 تجزئة / ثانية.

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

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

لذلك إذا نظرت إلى الرسم التخطيطي ، يمكنك أن ترى أن شيطان البيتكوين الذي يعد جزءًا من نواة البيتكوين يعتني بالاتصال بين الشبكة وعامل التعدين. ما يعنيه هذا حقًا هو أنك بحاجة إلى تشغيل Bitcoin core على خادم حتى يتمكن ESP8266 من الحصول على رأس كتلة جديد كل 10 دقائق ثم يكون قادرًا على الإرسال مرة أخرى إلى الشبكة.

لم أجربها ولكن يبدو أنه سيتعين عليك مزامنة blockchain بالكامل في حوالي 130 Gigs قبل أن تتواصل بشكل صحيح مع الشبكة ، في الويكي يذكرون خطوات معينة يجب إكمالها قبل أن تتوفر جميع الوظائف ، لذلك متأكد تمامًا هذا ما يقصدونه.

لقد جذبني ذلك إلى هناك ، من وجهة نظر بحثية ، كان الأمر ممتعًا للغاية وكان من الرائع جدًا رؤية ESP8266 الصغير بنجاح في تجزئة حالة الاختبار ، لكن من الناحية العملية ، لا أرى الكثير من الأشخاص يقومون بتنزيل النواة ، ومزامنة الكل blockchain ، والحفاظ على كل شيء محدثًا ، ومواكبة مشكلات الأمان ، كل ذلك للحصول على فرصة 1 في 1e16 للفوز بالكتلة. جسر بعيد بالنسبة لي.

منذ البداية ، علمت أن معدل التجزئة سيكون فظيعًا ولكن الفضول كان أفضل مني واضطررت إلى تجربته. بدلاً من التعدين الفردي ، قد يكون هناك تجمع تعدين يمكن توصيله مباشرة من ESP8266 دون جهد هائل أو قد يكون هناك عملة مشفرة أخرى أكثر ملاءمة. إذا وجدت أيًا منهما من فضلك أعلمني.

الخطوة 3: المراجع

1. مستودع جيثب لمعدن البيتكوين ESP8266

2. مستودع تشفير جيثب ESP8266

3. تعدين البيتكوين بالطريقة الصعبة: الخوارزميات والبروتوكولات والبايت

4. كتلة خوارزمية التجزئة

5. مجمع 125552

موصى به: