Mundarija:

ESP8266 Bitcoin Miner: 3 qadam
ESP8266 Bitcoin Miner: 3 qadam

Video: ESP8266 Bitcoin Miner: 3 qadam

Video: ESP8266 Bitcoin Miner: 3 qadam
Video: MINING DuCo dengan nodemcu esp8266. . 2024, Noyabr
Anonim
ESP8266 Bitcoin konchi
ESP8266 Bitcoin konchi

Bitcoin narxi ko'tarilishda va ESP8266 -ning har doim ulanishi bilan, lekin unchalik ko'p ish qilmasa ham, nima uchun yakka Bitcoin -konchini sinab ko'rmaslik kerak deb o'yladim. Bir oz tajriba o'tkazgandan so'ng, men ESP8266 ni ~ 1200 xesh/soniyagacha oldim va 2017 yil dekabr holatiga ko'ra, Bitcoin tarmog'i sekundiga 12 000 000 tera xeshni bajardi (siz oxirgi raqamlar uchun blockchaininfo -ni tekshirishingiz mumkin).

Shunday qilib, bu raqamlarga asoslanib, biz har 10 daqiqada blokni muvaffaqiyatli qazib olish imkoniyatiga ega bo'lamiz, chunki har bir blok 212 000 dollarga teng. Albatta, bu lotereya chiptasini sotib olishga o'xshaydi, faqat yutish ehtimoli ancha past bo'ladi., lekin siz eski so'zni bilasiz, kimdir uni yutishi kerak. Gate Mate va Super Squirter ESP8266 loyihalarida ko'pincha ular hech qanday ish qilmaydilar, ular faqat rozetkaga ulangan va so'rovlar yoki kirishni kutishgan. Birinchi qadam, ESP8266 -da Blockheader -da SHA256 -ni ikki marta bajarish mumkinmi yoki yo'qligini aniqlash edi. Bitcoin dunyosida "hash" aslida ikkita SHA256, lekin biz uni xash deb ataymiz. Yaxshiyamki, bir oz googlingdan so'ng, men xesh qilish uchun zarur bo'lgan barcha ma'lumotlarni o'z ichiga olgan ikkita sahifani topdim.

1. Hashing algoritmini blokirovka qilish

2. Bitcoin Mining qiyin yo'li: algoritmlar, protokollar va baytlar

Ta'kidlash joizki, yuqoridagi havolalarda batafsil ko'rsatilgandek, ish protokoli eskirgan. U getblocktemplate protokoli bilan almashtirildi, bu blok sarlavhasini yaratishni biroz murakkablashtiradi, xususan siz o'zingizning merkle ildizini yaratishingiz kerak. Hamma jirkanchlar uchun getblocktemplate wiki -ni tekshiring.

1 -qadam: Algoritm

Algoritm
Algoritm

Keling, darhol kiraylik, ESP8266 kodi ESP8266BitcoinMiner GitHub repo -da. Men yuqoridagi havolalardagi barcha ma'lumotlarni qayta tiklamoqchi emasman, faqat asosiy fikrlarni ajratib ko'rsataman.

char header_hex = 0100000081cd02ab7e569e8bcd9317e2fe99f2de44d49ab2b8851ba4a30a

char header_hex - bu blok sarlavhasi va oltita maydondan qurilgan: Versiya, hashPrevBlock, hashMerkleRoot, Time, Bits va Nonce. Bu faqat yuqoridagi havoladan ko'chirilgan edi, lekin haqiqiy konchilarda siz ushbu maydonlarning har birini json ob'ektida olasiz va keyin har bir 10 daqiqada endiannessni tartibga solib qo'yishingiz kerak bo'ladi.

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

imzosiz int i, mg, ng, rg; uchun (mg = 0, i = 0; i '9'? ichida - 'a' + 10: - '0' da; rg = in [i + 1]> '9'? in [i+1] - 'a'+10: [i+1] - '0' ichida; chiqish [mg] = (ng << 4) | rg;} qaytish;}

hex_decode, hexadecimal ascii belgilarini o'z ichiga olgan header_hex mag'lubiyatini oladi va SHA256 xesh uchun tayyor bayt qiymatlari bilan uint8_t hashbytes [80] ni to'ldiradi.

bekor xesh () {

hex_decode (header_hex, strlen (header_hex), hashbytes); imzosiz uzoq boshlanish = micros (); hasher.doUpdate (hashbytes, sizeof (hashbytes)); bayt xesh [SHA256_SIZE]; hasher.doFinal (xash); hashagain.doUpdate (hash, sizeof (hash)); bayt xash2 [SHA256_SIZE]; hashagain.doFinal (hash2); imzosiz uzun tugagan = micros (); imzosiz uzun delta = tugadi - boshlash; Serial.println (delta); Serial.print ("Big Endian:"); uchun (bayt i = 32; i> 0; i-) {if (hash2 [i-1] <0x10) {Serial.print ('0'); } Serial.print (hash2 [i-1], HEX); } Serial.println (); Serial.print ("Kichkina Endian:"); uchun (bayt i = 0; i <SHA256_SIZE; i ++) {if (hash2 <0x10) {Serial.print ('0'); } Serial.print (hash2 , HEX); }}

hash faqat ikki marta hashtaytlarni xeshlaydi (SHA256 dubli), ishlatilgan soniyalarini bosib chiqaradi va natijada paydo bo'lgan xeshni katta endian va kichik endian sifatida chiqaradi. Agar xeshlar faqat bitta SHA256 xasheriga joylashtirilgan bo'lsa, bu biroz tezroq bo'lishi mumkin edi, lekin baribir yuqoridagi kodga ko'ra, er -xotin xeshni bajarish uchun 832 soniya kerak bo'ladi va ekran tasviridan ko'rsangiz, biz to'g'ri xeshni olamiz.

2 -qadam: Devorga va haqiqatan ham katta blokka urish

Devorga va haqiqatan ham katta blokka urish
Devorga va haqiqatan ham katta blokka urish

Shunday qilib, agar bitta xeshni bajarish uchun 832 soniya kerak bo'lsa, biz 1/0.000834 = 1201 xesh /sek.

Aniq bo'lish uchun, biz ma'lumotni 125552 -blokdan olganmiz, u erda biz nonce bilgan edik, u allaqachon qazib olingan va bu ma'lumotni ESP8266 bilan bir xil xash olishimizga ishonch hosil qilish uchun sinov ishi sifatida ishlatgan. Shunday qilib, to'liq qazib olingan konchi bilan siz tasodifan nonce haqida taxmin qilasiz, blok -boshni xashga tortasiz va natijani bu blokning qiyinchiliklari bilan solishtirasiz. Agar xesh qiyinchiliklarga javob bersa, u tekshirish uchun tarmoqqa yuboriladi.

Yaxshi, biz xeshni bajarishimiz mumkin, albatta, bu juda dahshatli, lekin lotereya sifatida qaralganda, bu taxmin. Mana, lekin yaqinroq tekshirilgandan so'ng, siz tarmoq bilan bog'lanish uchun to'liq tugunni ishga tushirishingiz kerakligi aniq bo'ladi, agar siz tog' -kon nima ekanligini o'ylab ko'rsangiz.

Shunday qilib, agar siz diagramaga qarasangiz, bitcoin yadrosining bir qismi bo'lgan daemon tarmoq va konchilar o'rtasidagi aloqaga g'amxo'rlik qilayotganini ko'rishingiz mumkin. Bu shuni anglatadiki, siz ESP8266 har 10 daqiqada yangi blok -sarlavhani olishi va keyin tarmoqqa qaytishi uchun serverda Bitcoin yadrosini ishga tushirishingiz kerak.

Men buni sinab ko'rmadim, lekin tarmoq bilan to'g'ri muloqot qilishdan oldin siz butun blokkainni taxminan 130 konsertda sinxronlashtirishingiz kerak edi, vikida ular ma'lum funktsiyalar mavjud bo'lgunga qadar bajarilishi kerakligi aytilgan. bu ular nimani anglatadi.

Bu meni o'sha erga olib bordi, tadqiqot nuqtai nazaridan, hamma narsa juda qiziq edi va kichik ESP8266 -ning test qutisini muvaffaqiyatli xesh qilganini ko'rish juda zo'r edi, lekin amalda aytganda, men yadroni yuklab olayotganlarni ko'rmayapman. blokcheyn, hamma narsani yangilab turish, xavfsizlik masalalarini kuzatib borish, 1dan 16gacha 1da blokni yutish imkoniyati. Men uchun uzoqqa ko'prik.

Ishga tushganimdan so'ng, men xash darajasi dahshatli bo'lishini bilardim, lekin qiziquvchanlik menda yaxshiroq bo'ldi va men uni qo'yib yuborishga majbur bo'ldim. Yakkaxon qazib olish o'rniga, ESP8266 -dan monumental harakatlarsiz to'g'ridan -to'g'ri ulanadigan kon hovuzi bo'lishi mumkin yoki boshqa kriptovalyuta mos bo'lishi mumkin. Agar siz ham topsangiz, menga xabar bering.

3 -qadam: Adabiyotlar

1. ESP8266 Bitcoin Miner GitHub ombori

2. ESP8266 Crypto GitHub ombori

3. Bitcoin qazib olish qiyin yo'l: algoritmlar, protokollar va baytlar

4. Hashing algoritmini blokirovka qilish

5. 125552 -blok

Tavsiya: