Talaan ng mga Nilalaman:

ESP8266 Bitcoin Miner: 3 Hakbang
ESP8266 Bitcoin Miner: 3 Hakbang

Video: ESP8266 Bitcoin Miner: 3 Hakbang

Video: ESP8266 Bitcoin Miner: 3 Hakbang
Video: Сроки окупаемости Arduino в майнинге #mining 2024, Hulyo
Anonim
ESP8266 Bitcoin Miner
ESP8266 Bitcoin Miner

Sa pamamagitan ng presyo ng Bitcoin na patuloy na pag-akyat at sa isang pares ng ESP8266's laging naka-plug in ngunit hindi talaga gumagawa ng marami naisip ko kung bakit hindi subukan at magpatupad ng isang Solo Bitcoin Miner. Matapos ang kaunting pag-eksperimento nakuha ko ang ESP8266 hanggang ~ 1200 hash / sec at noong Disyembre 2017 ang Bitcoin network ay gumaganap ng humigit-kumulang 12, 000, 000 tera hashes bawat segundo (maaari mong suriin ang blockchaininfo para sa pinakabagong mga numero).

Kaya batay sa mga numerong iyon magkakaroon kami ng isang 1 sa 1e16 pagkakataon na matagumpay na pagmimina ng isang bloke bawat sampung minuto kung saan ang isang bloke ay kasalukuyang nagkakahalaga ng $ 212, 000. Siguradong katulad ito ng pagbili ng isang lotto ticket, may lamang mas maliit na pagkakataong manalo, ngunit alam mo ang lumang kasabihan, ang isang tao ay kailangang manalo dito. Sa parehong mga proyekto ng Gate Mate at Super Squirter ESP8266 sa halos lahat ng oras na hindi sila gumagawa ng anumang trabaho, naka-plug in lamang sila at naghihintay sa mga kahilingan o input, kaya't bakit hindi ilagay ang mga ito at baka manalo ng ilang coinage. Ang unang hakbang ay upang subukan at alamin kung posible pang magsagawa ng isang dobleng SHA256 sa Blockheader sa isang ESP8266. Sa mundo ng Bitcoin ang 'hash' ay talagang isang doble na SHA256, ngunit tatalakayin lamang namin ito bilang hash. Kahit papaano pagkatapos ng isang maliit na pag-googling sa paligid nakita ko ang dalawang pahina na ito na nagbigay ng lahat ng impormasyong kinakailangan upang makakuha ng pag-hash.

1. I-block ang Algorithm ng Hashing

2. Pagmimina ng Bitcoin sa mahirap na paraan: ang mga algorithm, protokol at byte

Mahalagang tandaan na ang getwork protocol, tulad ng detalyado sa mga nasa itaas na link, ay hindi na ginagamit. Pinalitan ito ng getblocktemplate na protokol na ginagawang medyo mas kumplikado upang bumuo ng isang block header, partikular na kailangan mong bumuo ng iyong sariling ugat ng merkle. Para sa lahat ng mga nitty gritty suriin ang getblocktemplate wiki.

Hakbang 1: Ang Algorithm

Ang Algorithm
Ang Algorithm

Tumalon kaagad, ang code ng ESP8266 ay nasa reporter ng ESP8266BitcoinMiner GitHub. Hindi ko ibabalik ang lahat ng impormasyon mula sa mga link sa itaas ngunit i-highlight lamang ang mga pangunahing punto.

char header_hex = 0100000081cd02ab7e569e8bcd9317e2fe99f2de44d49ab2b8851ba4a308000000000000e320b6c2fffc8d750423db8b1eb942ae710e951ed797f7affc8892b0fffffcfcfcfcfcfbfcfc8f8f8f8f7fcfbfcfcf8f8f8f8fcfbfcfcfc8f8f8f8fcffcfcfcfbcfc8f8f8fcfcf8fcf8fcf8fcf8fcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfb

Ang char header_hex ay ang header ng block at itinayo mula sa anim na mga patlang, Bersyon, hashPrevBlock, hashMerkleRoot, Oras, Mga Bits at ang Nonce lahat ay nagsama-sama sa isang maliit na bilang ng mga endian na halaga sa notasyong hex. Kinopya lamang iyon mula sa link sa itaas ngunit sa isang aktwal na ganap na minero na tatanggapin mo ang bawat isa sa mga patlang na iyon sa isang bagay na json at pagkatapos ay aayusin ang endianness at isama ito nang mabilis bawat 10 minuto.

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

unsigned int i, mg, ng, rg; para sa (mg = 0, i = 0; i '9'? in - 'a' + 10: in - '0'; rg = in [i + 1]> '9'? in [i + 1] - 'a' + 10: sa [i + 1] - '0'; out [mg] = (ng << 4) | rg;} bumalik;}

Kinukuha ng hex_decode ang header_hex string, na naglalaman ng mga hexadecimal ascii character, at pinupunan ang uint8_t hashbytes [80] kasama ang kani-kanilang mga halagang byte na handa na para sa SHA256 hasher.

walang bisa hash () {

hex_decode (header_hex, strlen (header_hex), hashbytes); unsigned long start = micros (); hasher.doUpdate (hashbytes, sizeof (hashbytes)); byte hash [SHA256_SIZE]; hasher.doFinal (hash); hashagain.doUpdate (hash, sizeof (hash)); byte hash2 [SHA256_SIZE]; hashagain.doFinal (hash2); unsigned long end = micros (); unsigned long delta = natapos - magsimula; Serial.println (delta); Serial.print ("Big Endian:"); para sa (byte i = 32; i> 0; i -) {kung (hash2 [i-1] <0x10) {Serial.print ('0'); } Serial.print (hash2 [i-1], HEX); } Serial.println (); Serial.print ("Little Endian:"); para sa (byte i = 0; i <SHA256_SIZE; i ++) {kung (hash2 <0x10) {Serial.print ('0'); } Serial.print (hash2 , HEX); }}

Ang hash ay simpleng pag-hashbytes ng dalawang beses (doble SHA256), na-print ang mga usecond na kinuha at inililimbag ang nagresultang hash bilang isang malaking endian at maliit na endian. Kung ang mga hash ay nakapugad sa isang SHA256 hasher marahil ay mas mabilis ito ngunit sa anumang paraan na may code sa itaas aabutin ng 832 useconds upang maisagawa ang dobleng hash at makikita mo mula sa screenshot makuha namin ang tamang hash.

Hakbang 2: Pagpindot sa isang Wall at isang Talagang Malaking Block

Pagpindot sa isang Wall at isang Talagang Malaking Block
Pagpindot sa isang Wall at isang Talagang Malaking Block

Kaya't kung tumatagal ng 832 useconds upang makagawa ng isang hash maaari nating maisagawa ang 1 / 0,000834 = 1201 hash / sec.

Upang maging malinaw na kinuha namin ang impormasyon mula sa block # 125552 kung saan alam namin ang nonce, na-minahan na at ginamit ang impormasyong iyon bilang isang test case upang matiyak na makakakuha kami ng parehong hash sa ESP8266. Kaya't sa sandaling ang isang pakinabang na may isang buong fleshed out na minero ay random mong kukuha ng hula sa nonce, hash ang blockheader kasama nito at pagkatapos ihambing ang resulta sa kahirapan para sa block na iyon. Kung natutugunan ng hash ang kahirapan, isinumite ito sa network para sa pagpapatunay.

Ok kaya mahusay na maaari nating maisagawa ang hash, sigurado na ang rate ay kakila-kilabot ngunit kapag tinitingnan ito bilang isang loterya isang hula ay isang hula. Narito ang ngunit, sa masusing pagsisiyasat kaagad ay magiging malinaw na kailangan mong magpatakbo ng isang buong node upang makipag-usap sa network, uri ng halata kapag huminto ka at isipin kung ano talaga ang pagmimina.

Kaya't kung titingnan mo ang diagram maaari mong makita na ang bitcoin daemon na isang bahagi ng bitcoin core ay nangangalaga sa komunikasyon sa pagitan ng network at ng minero. Ano talaga ang ibig sabihin nito ay kailangan mong patakbuhin ang core ng Bitcoin sa isang server upang ang ESP8266 ay maaaring makakuha ng isang bagong blockheader bawat 10 minuto at pagkatapos ay makapag-isinumite pabalik sa network.

Hindi ko ito nasubukan ngunit mukhang nais mong i-sync ang buong blockchain sa paligid ng 130 Gigs bago ito maayos na makipag-usap sa network, sa wiki binanggit nila ang ilang mga hakbang na kailangang makumpleto bago ang lahat ng pag-andar ay magagamit, kaya medyo sigurado yan ang ibig nilang sabihin.

Kaya't hinila ako doon, mula sa isang pananaw sa pananaliksik na ang lahat ay napaka-kagiliw-giliw at ito ay medyo cool na makita ang maliit na ESP8266 na matagumpay na na-hash ang test case ngunit praktikal na pagsasalita na hindi ko nakikita ang maraming tao na nag-download ng core, sinasabay ang buong blockchain, pinapanatiling napapanahon ang lahat, sumabay sa mga isyu sa seguridad lahat para sa isang 1 sa 1e16 na pagkakataong manalo sa bloke. Isang tulay patungo sa malayo para sa akin.

Mula sa get go alam ko na ang hash rate ay magiging kahila-hilakbot ngunit ang pag-usisa ay naging mas mahusay sa akin at kailangan ko itong bigyan. Sa halip na solo mining maaaring mayroong isang mining pool doon na maaaring konektado direkta mula sa ESP8266 nang walang isang napakalaking pagsisikap o maaaring may isa pang cryptocurrency na mas angkop. Kung makakita ka ng alinman mangyaring ipaalam sa akin.

Hakbang 3: Mga Sanggunian

1. ESP8266 Bitcoin Miner GitHub Repository

2. ESP8266 Crypto GitHub Repository

3. Ang pagmimina ng Bitcoin sa mahirap na paraan: ang mga algorithm, protokol, at byte

4. I-block ang Algorithm ng Hashing

5. Harangan ang 125552

Inirerekumendang: