Turinys:

ESP8266 „Bitcoin Miner“: 3 žingsniai
ESP8266 „Bitcoin Miner“: 3 žingsniai

Video: ESP8266 „Bitcoin Miner“: 3 žingsniai

Video: ESP8266 „Bitcoin Miner“: 3 žingsniai
Video: HOW TO BUILD A NEW DESIGN DUINO-COIN MINING RIG ESP8266 2024, Lapkritis
Anonim
ESP8266 „Bitcoin Miner“
ESP8266 „Bitcoin Miner“

Kadangi „Bitcoin“kaina ir toliau kilo, o pora ESP8266 visada buvo prijungta, bet iš tikrųjų nedaug, aš pagalvojau, kodėl nepabandžius įgyvendinti „Solo Bitcoin Miner“. Po truputį eksperimentuodamas gavau ESP8266 iki ~ 1200 maišų per sekundę, o 2017 m. Gruodžio mėn. „Bitcoin“tinklas vykdė apie 12 000 000 tera maišų per sekundę (naujausius skaičius galite patikrinti „blockchaininfo“).

Taigi, remiantis šiais skaičiais, turėtume 1 iš 1 16 galimybę sėkmingai kasti bloką kas dešimt minučių, kai bloko vertė šiuo metu yra 212 000 USD. Žinoma, tai daug kas panašu į loterijos bilieto pirkimą, tik su daug mažesne tikimybe laimėti, bet žinote seną posakį, kad kažkas turi jį laimėti. Tiek su „Gate Mate“, tiek su „Super Squirter ESP8266“projektais dažniausiai jie neatlieka jokio darbo, jie tiesiog yra prijungti ir laukia užklausų ar įvesties, tad kodėl gi ne juos įdėjus ir galbūt laimėjus monetų. Pirmasis žingsnis buvo pabandyti išsiaiškinti, ar netgi įmanoma atlikti dvigubą SHA256 „Blockheader“naudojant ESP8266. „Bitcoin“pasaulyje „maiša“iš tikrųjų yra dviguba SHA256, tačiau mes ją vadinsime tik maiša. Bet kokiu atveju, po truputį googlindamas, radau šiuos du puslapius, kuriuose buvo pateikta visa informacija, reikalinga maišai gauti.

1. Bloko maišos algoritmas

2. „Bitcoin Mining“sunkus būdas: algoritmai, protokolai ir baitai

Verta paminėti, kad „getwork“protokolas, kaip aprašyta aukščiau esančiose nuorodose, buvo nebenaudojamas. Jis buvo pakeistas „getblocktemplate“protokolu, todėl blokų antraštės kūrimas tampa šiek tiek sudėtingesnis, ypač jūs turite sukurti savo „Merkle“šaknį. Norėdami sužinoti viską, kas vyksta, apsilankykite „wiki“„getblocktemplate“.

1 žingsnis: algoritmas

Algoritmas
Algoritmas

Eikime tiesiai, ESP8266 kodas yra ESP8266BitcoinMiner GitHub atpirkimo sandoryje. Aš nesiruošiu pakartoti visos informacijos iš aukščiau pateiktų nuorodų, o tik pabrėžti pagrindinius dalykus.

char header_hex = 0100000081cd02ab7e569e8bcd9317e2fe99f2de44d49ab2b8851ba4a308000000000000e320b6c2fffc8d750423db8b1eb942ae710e951ed797ffbfbb9b7b07b07b7b7b7f07b7b7a

char header_hex yra bloko antraštė ir sudaryta iš šešių laukų: Versija, hashPrevBlock, hashMerkleRoot, Time, Bits ir Nonce - visi jie yra sujungti kaip mažos endianinės reikšmės šešiakampiu žymėjimu. Tai buvo tiesiog nukopijuota iš aukščiau esančios nuorodos, tačiau tikrame pilnavertiškame kasykloje kiekvieną iš šių laukų gautumėte „json“objekte, o tada turėsite išsiaiškinti galutiškumą ir sudėti jį kas 10 minučių.

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

nepasirašytas 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: į [i+1] - '0'; iš [mg] = (ng << 4) | rg;} grįžti;}

hex_decode paima eilutę header_hex, kurioje yra šešioliktainiai ascii simboliai, ir užpildo uint8_t hashbytes [80] atitinkamomis baitų reikšmėmis, paruoštomis SHA256 maišai.

void hash () {

hex_decode (antraštė_hex, strlen (antraštė_hex), maišos); nepasirašyta ilga pradžia = micros (); hasher.doUpdate (hashbytes, sizeof (hashbytes)); baitų maišos [SHA256_SIZE]; hasher.doFinal (maiša); hashagain.doUpdate (maišos, sizeof (maišos)); baitų maišos2 [SHA256_SIZE]; hashagain.doFinal (maiša2); nepasirašytas ilgas galas = micros (); nepasirašyta ilga delta = baigta - pradžia; Serial.println (delta); Serial.print („Big Endian:“); (baitas i = 32; i> 0; i-) {jei (maišos2 [i-1] <0x10) {Serijinis atspaudas ('0'); } Serijinis atspaudas (maiša2 [i-1], HEX); } Serial.println (); Serial.print („Mažasis Endianas:“); (baitas i = 0; i <SHA256_SIZE; i ++) {if (maiša2 <0x10) {Serial.print ('0'); } Serijinis atspaudas (maiša2 , HEX); }}

maiša paprasčiausiai maišo maišos du kartus (dvigubas SHA256), spausdina panaudotas sekundes ir spausdina gautą maišą kaip didelį endianą ir mažą endianą. Jei maišos būtų įdėtos tik į vieną SHA256 maišytuvą, tai tikriausiai būtų šiek tiek greičiau, tačiau bet kokiu atveju, naudojant aukščiau pateiktą kodą, dvigubai maišai atlikti reikia 832 naudojimo sekundžių, o iš ekrano kopijos matote, kad gauname teisingą maišą.

2 žingsnis: atsitrenkimas į sieną ir tikrai didelis blokas

Atsimušimas į sieną ir tikrai didelis blokas
Atsimušimas į sieną ir tikrai didelis blokas

Taigi, jei vienai maišai atlikti reikia 832 naudojimo sekundžių, galime atlikti 1/0 000834 = 1201 maišos per sekundę.

Kad būtų aišku, mes paėmėme informaciją iš bloko #125552, kuriame žinojome nonce, ji jau buvo išgauta ir panaudojo šią informaciją kaip bandomąjį atvejį, kad įsitikintume, jog galime gauti tą pačią maišą su ESP8266. Taigi, gavęs pelną su visiškai išbaigtu kalnakasiu, tu atsitiktinai atspėsi nonce, sumaišyk su juo blokinę antraštę ir tada palygink rezultatą su to bloko sunkumu. Jei maišos problema iškyla, ji pateikiama tinklui patikrinti.

Gerai, todėl puikiai galime atlikti maišą, žinoma, baisiai, bet kai žiūrime į tai kaip į loteriją, spėjimas yra spėjimas. Štai, tačiau, atidžiau apžiūrėjus, netrukus paaiškėja, kad turite turėti pilną mazgą, kad galėtumėte bendrauti su tinklu. Tai savaime aišku, kai sustojate ir pagalvojate, kas iš tikrųjų yra kasyba.

Taigi, jei pažvelgsite į diagramą, pamatysite, kad „Bitcoin“demonas, kuris yra „Bitcoin“branduolio dalis, rūpinasi ryšiu tarp tinklo ir kalnakasio. Tai iš tikrųjų reiškia, kad turite paleisti „Bitcoin“branduolį serveryje, kad ESP8266 kas 10 minučių galėtų gauti naują blokinę antraštę ir tada vėl pateikti ją į tinklą.

Aš to neišbandžiau, bet atrodo, kad turėsite sinchronizuoti visą „blockchain“maždaug 130 koncertų metu, kad jis tinkamai bendrautų su tinklu. „Wiki“jie nurodo, kad tam tikri veiksmai turi būti atlikti, kol bus pasiektos visos funkcijos, todėl gana tikra štai ką jie reiškia.

Taigi tai mane ištraukė iš tyrimo pusės, viskas buvo labai įdomu ir buvo gana šaunu matyti, kaip mažasis ESP8266 sėkmingai sumaišė bandymo atvejį, bet praktiškai nematau daug žmonių, kurie atsisiunčia branduolį, sinchronizuojant visą „blockchain“, nuolat atnaujindami viską, neatsilikdami nuo saugumo problemų, kad gautumėte 1 iš 1e16 galimybę laimėti bloką. Man tiltas į toli.

Nuo pat pradžių žinojau, kad maišos koeficientas bus baisus, tačiau smalsumas mane užvaldė ir turėjau tai išbandyti. Vietoj to, kad būtų kasama atskirai, gali būti kasybos baseinas, prie kurio galima prisijungti tiesiogiai iš ESP8266 be didelių pastangų, arba gali būti kita tinkamesnė kriptovaliuta. Jei radote, praneškite man.

3 žingsnis: nuorodos

1. ESP8266 „Bitcoin Miner GitHub“saugykla

2. ESP8266 „Crypto GitHub“saugykla

3. Bitcoin kasimas sunkiu keliu: algoritmai, protokolai ir baitai

4. Bloko maišos algoritmas

5. Blokas 125552

Rekomenduojamas: