فهرست مطالب:

ESP8266 استخراج کننده بیت کوین: 3 مرحله
ESP8266 استخراج کننده بیت کوین: 3 مرحله

تصویری: ESP8266 استخراج کننده بیت کوین: 3 مرحله

تصویری: ESP8266 استخراج کننده بیت کوین: 3 مرحله
تصویری: Mini Datacenter Hardware and Crypto - Q&A Weekly 2024, نوامبر
Anonim
ESP8266 استخراج کننده بیت کوین
ESP8266 استخراج کننده بیت کوین

با ادامه روند صعودی قیمت بیت کوین و با وصل شدن چند ESP8266 ، اما واقعاً چندان کار نمی کند ، من فکر کردم که چرا سعی نمی کنم یک Solo Bitcoin Miner را پیاده سازی کنم. پس از کمی آزمایش ESP8266 را تا 1200 پوند هش در ثانیه دریافت کردم و تا دسامبر 2017 شبکه بیت کوین در حدود 12000 ، 000 ترا تراش در ثانیه انجام می داد (برای آخرین اعداد می توانید blockchaininfo را بررسی کنید).

بنابراین بر اساس این اعداد ، ما شانس 1 در 1e16 را داریم که هر ده دقیقه یک بلوک را با موفقیت استخراج کنیم ، در حالی که یک بلوک در حال حاضر 212،000 دلار ارزش دارد. مطمئناً این بسیار شبیه به خرید بلیط لوتو است ، فقط با شانس بسیار کمتر برای برنده شدن اما شما ضرب المثل قدیمی را می دانید ، کسی باید برنده شود. با پروژه های Gate Mate و Super Squirter ESP8266 در اکثر مواقع هیچ کاری انجام نمی دهند ، آنها فقط به برق متصل شده و منتظر درخواست ها یا ورودی ها هستند ، بنابراین چرا آنها را در آن قرار ندهید و شاید کمی سکه برنده شوید. اولین قدم این بود که بفهمید آیا حتی می توان یک SHA256 دوگانه را در Blockheader در ESP8266 انجام داد. در دنیای بیت کوین ، "هش" در واقع یک SHA256 دوگانه است ، اما ما فقط از آن به عنوان هش یاد می کنیم. به هر حال بعد از کمی جستجوی گوگل ، این دو صفحه را پیدا کردم که تمام اطلاعات مورد نیاز برای هش کردن را ارائه می داد.

1. الگوریتم Block Hashing

2. استخراج بیت کوین به سختی: الگوریتم ها ، پروتکل ها و بایت ها

شایان ذکر است که پروتکل getwork ، همانطور که در پیوندهای بالا توضیح داده شده است ، منسوخ شده است. این پروتکل با getblocktemplate جایگزین شده است که ساخت یک header بلوک را کمی پیچیده تر می کند ، به طور خاص شما باید ریشه merkle خود را بسازید. برای همه چیزهای تند و تیز ، ویکی getblocktemplate را بررسی کنید.

مرحله 1: الگوریتم

الگوریتم
الگوریتم

بیایید سریع وارد شویم ، کد ESP8266 در repo ESP8266BitcoinMiner GitHub است. من قصد ندارم تمام اطلاعات پیوندهای بالا را مجدداً مرور کنم ، بلکه فقط نکات اصلی را برجسته می کنم.

کاراکتر header_hex = "0100000081cd02ab7e569e8bcd9317e2fe99f2de44d49ab2b8851ba4a308000000000000e320b6c2fffc8d750423db8b1eb942ae710e951ed797f7affc8892b0f1fc122bc7f5d74df2b9441a42a14695"؛

char header_hex سرصفحه بلاک است و از شش فیلد ، Version ، hashPrevBlock ، hashMerkleRoot ، Time ، Bits and the 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'؟ در - 'a' + 10: در - '0'؛ rg = در [i + 1]> '9'؟ در [i+1] - 'a'+10: در [i+1] - '0' ؛ خارج [mg] = (ng << 4) | rg؛} بازگشت به بیرون ؛}

hex_decode رشته header_hex را که شامل کاراکترهای ascii هگزا دسیمال است ، می گیرد و hashbytes uint8_t [80] را با مقادیر بایت مربوطه آماده برای هش SHA256 پر می کند.

void hash () {

hex_decode (header_hex ، strlen (header_hex) ، hashbytes) ؛ شروع طولانی بدون علامت = micros ()؛ hasher.doUpdate (hashbytes ، sizeof (hashbytes)) ؛ بایت هش [SHA256_SIZE] ؛ hasher.doFinal (هش) ؛ hashagain.doUpdate (هش ، اندازه (هش)) ؛ بایت hash2 [SHA256_SIZE] ؛ hashagain.doFinal (hash2) ؛ بدون علامت طولانی به پایان رسید = micros ()؛ دلتا طولانی بدون علامت = پایان - شروع؛ Serial.println (دلتا) ؛ Serial.print ("Big Endian:") ؛ برای (بایت i = 32؛ i> 0؛ i-) {if (hash2 [i-1] <0x10) {Serial.print ('0')؛ } Serial.print (hash2 [i-1]، HEX)؛ } Serial.println ()؛ Serial.print ("اندیان کوچک:") ؛ برای (بایت i = 0؛ i <SHA256_SIZE؛ i ++) {if (hash2 <0x10) {Serial.print ('0')؛ } Serial.print (hash2 ، HEX)؛ }}

hash به سادگی hashbytes را دوبار (SHA256 مضاعف) هش می کند ، بندهای مورد استفاده را چاپ می کند و hash حاصل را به عنوان یک endian بزرگ و اندیان کوچک چاپ می کند. اگر هش ها فقط در یک هشر SHA256 لانه شده بودند ، احتمالاً کمی سریعتر انجام می شد ، اما به هر حال انجام کد هش 832 ثانیه طول می کشد و می توانید از روی صفحه نمایش هش صحیح را دریافت کنید.

مرحله 2: برخورد با دیوار و یک بلوک واقعاً بزرگ

برخورد با دیوار و یک بلوک واقعاً بزرگ
برخورد با دیوار و یک بلوک واقعاً بزرگ

بنابراین اگر برای انجام یک هش 832 ثانیه استفاده شود ، می توانیم 1 /0.000834 = 1201 هش /ثانیه را انجام دهیم.

فقط برای روشن شدن ، ما اطلاعات را از بلوک #125552 که در آن nonce را می شناختیم ، گرفتیم ، قبلاً استخراج شده است و از این اطلاعات به عنوان یک مورد آزمایشی استفاده کرده ایم تا مطمئن شویم که می توانیم هش مشابه را با ESP8266 بدست آوریم. بنابراین هنگامی که با یک معدنچی کامل گوشت به دست می آورید ، به طور تصادفی حدس می زنید که چه چیزی است ، نهار را هش کنید ، سپس نتیجه را با مشکل آن بلوک مقایسه کنید. اگر هش با مشکل روبرو شد ، برای تأیید به شبکه ارسال می شود.

بسیار خوب ، بنابراین ما می توانیم هش را انجام دهیم ، مطمئناً نرخ وحشتناک است ، اما وقتی به آن به عنوان قرعه کشی نگاه می کنیم ، یک حدس یک حدس است. در اینجا اما ، با بازرسی دقیق تر ، به زودی مشخص می شود که برای برقراری ارتباط با شبکه باید از یک گره کامل استفاده کنید ، هنگامی که متوقف می شوید و فکر می کنید در واقع معدن چیست ، کاملاً واضح است.

بنابراین اگر به نمودار نگاه کنید می بینید که شیطان بیت کوین که بخشی از هسته بیت کوین است از ارتباط بین شبکه و ماینر مراقبت می کند. این بدان معناست که شما باید هسته بیت کوین را بر روی یک سرور اجرا کنید تا ESP8266 بتواند هر 10 دقیقه یک سر بلاک جدید دریافت کند و سپس بتواند دوباره به شبکه ارسال شود.

من آن را امتحان نکرده ام ، اما به نظر می رسد قبل از برقراری ارتباط صحیح با شبکه ، باید کل بلاک چین را در حدود 130 گیگ همگام سازی کنید ، در ویکی آنها ذکر کرده اند که قبل از در دسترس بودن همه عملکردها ، مراحل خاصی باید انجام شود ، بنابراین بسیار مطمئن منظور آنها این است

بنابراین من را به آنجا کشاند ، از نظر تحقیق همه چیز بسیار جالب بود و دیدن ESP8266 کوچک با موفقیت در مورد آزمایش بسیار جالب بود ، اما عملاً نمی بینم که بسیاری از افراد هسته را بارگیری کرده و کل را همگام سازی کنند. بلاک چین ، همه چیز را به روز نگه دارید ، با مسائل امنیتی همگام باشید و به احتمال 1 در 1e16 برنده این بلاک شوید. برای من پلی تا راه دور

از همان ابتدا می دانستم نرخ هش وحشتناک خواهد بود اما کنجکاوی بر من غلبه کرد و مجبور شدم آن را رها کنم. به جای استخراج انفرادی ، ممکن است یک استخر ماینینگ وجود داشته باشد که می تواند مستقیماً از ESP8266 بدون هیچ تلاشی بزرگ به آن متصل شود یا ممکن است ارز رمزنگاری شده دیگری مناسب تر باشد. اگر هر کدام را پیدا کردید لطفا به من اطلاع دهید.

مرحله 3: منابع

1. مخزن ESP8266 Bitcoin Miner GitHub

2. مخزن ESP8266 Crypto GitHub

3. استخراج بیت کوین به سختی: الگوریتم ها ، پروتکل ها و بایت ها

4. الگوریتم Block Hashing

5. بلوک 125552

توصیه شده: