Satura rādītājs:

ESP8266 Bitcoin Miner: 3 soļi
ESP8266 Bitcoin Miner: 3 soļi

Video: ESP8266 Bitcoin Miner: 3 soļi

Video: ESP8266 Bitcoin Miner: 3 soļi
Video: MINING DuCo dengan nodemcu esp8266. . 2024, Jūlijs
Anonim
ESP8266 Bitcoin Miner
ESP8266 Bitcoin Miner

Turpinot pieaugt Bitcoin cenai un ar pāris ESP8266 vienmēr pievienojot, bet īsti neko nedarot, es domāju, kāpēc gan neizmēģināt un īstenot Solo Bitcoin Miner. Pēc neliela eksperimenta es ieguvu ESP8266 līdz ~ 1200 jaucējus sekundē, un 2017. gada decembrī Bitcoin tīkls veica aptuveni 12 000 000 tera jaucējus sekundē (jaunākos skaitļus varat pārbaudīt vietnē blockchaininfo).

Tātad, pamatojoties uz šiem skaitļiem, mums būtu 1 pret 1e16 iespēja veiksmīgi iegūt bloku ik pēc desmit minūtēm, kur bloka vērtība pašlaik ir 212 000 ASV dolāru. Protams, tas ir līdzīgi kā loterijas biļetes iegāde, tikai ar daudz mazāku iespēju uzvarēt, bet jūs zināt veco teicienu, kādam tas ir jāuzvar. Ar Gate Mate un Super Squirter ESP8266 projektiem viņi lielākoties nedara nekādu darbu, viņi vienkārši ir pievienoti elektrotīklam un gaida pieprasījumus vai ievades datus, tad kāpēc gan tos neizlikt un varbūt laimēt monētas. Pirmais solis bija mēģināt izdomāt, vai vispār ir iespējams veikt dubultā SHA256 uz Blockheader ar ESP8266. Bitcoin pasaulē “hash” patiesībā ir dubultā SHA256, bet mēs to vienkārši dēvēsim par hash. Jebkurā gadījumā pēc nelielas googlēšanas es atradu šīs divas lapas, kurās tika sniegta visa informācija, kas nepieciešama jaukšanai.

1. Bloķēt jaukšanas algoritmu

2. Bitcoin Mining cietais ceļš: algoritmi, protokoli un baiti

Ir vērts atzīmēt, ka getwork protokols, kā aprakstīts iepriekš minētajās saitēs, ir novecojis. Tas ir aizstāts ar protokolu getblocktemplate, kas padara bloka galvenes izveidi nedaudz sarežģītāku, īpaši jums ir jāizveido sava merkle sakne. Lai uzzinātu visu smieklīgo, pārbaudiet wiki getblocktemplate.

1. solis: algoritms

Algoritms
Algoritms

Lecam uzreiz, ESP8266 kods ir ESP8266BitcoinMiner GitHub repo. Es negrasos atkārtoti uzsvērt visu informāciju no iepriekš minētajām saitēm, bet tikai izcelt galvenos punktus.

char header_hex = 0100000081cd02ab7e569e8bcd9317e2fe99f2de44d49ab2b8851ba4a308000000000000e320b6c2fffc8d750423db8b1eb942ae710e951ed797ffbfbfbfbf2b7b3f0f2b7b7b7b7b3b7b3b7b7b7b7b7b3b3a57a57a51a57a57a57a57a7a7

char header_hex ir bloka galvene, un tā ir veidota no sešiem laukiem - Versija, hashPrevBlock, hashMerkleRoot, Time, Bits un Nonce - visi ir savienoti kopā kā mazas endianas vērtības heksadecimālā apzīmējumā. Tas tikko tika nokopēts no iepriekš minētās saites, bet patiesībā pilnvērtīgā kalnračī jūs katru no šiem laukiem saņemtu json objektā un pēc tam ik pēc 10 minūtēm vajadzētu sakārtot galotni un salikt to kopā.

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

neparakstīts int i, mg, ng, rg; par (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;} atgriezties;}

hex_decode ņem virkni header_hex, kurā ir heksadecimālās ascii rakstzīmes, un aizpilda uint8_t hashbytes [80] ar attiecīgajām baitu vērtībām, kas ir gatavas SHA256 jaukšanai.

void hash () {

hex_decode (header_hex, strlen (header_hex), hashbytes); neparakstīts garais sākums = micros (); hasher.doUpdate (hashbytes, sizeof (hashbytes)); baitu jaukšana [SHA256_SIZE]; hasher.doFinal (hash); hashagain.doUpdate (hash, sizeof (hash)); baitu hash2 [SHA256_SIZE]; hashagain.doFinal (hash2); neparakstīts garais gals = micros (); neparakstīts garš delta = beidzies - sākums; Serial.println (delta); Serial.print ("Big Endian:"); par (baits i = 32; i> 0; i-) {ja (hash2 [i-1] <0x10) {Serial.print ('0'); } Sērijas nospiedums (hash2 [i-1], HEX); } Sērijas.println (); Serial.print ("Mazais Endians:"); par (baits i = 0; i <SHA256_SIZE; i ++) {if (hash2 <0x10) {Serial.print ('0'); } Sērijas nospiedums (hash2 , HEX); }}

hash vienkārši jauc hashbytes divreiz (dubultā SHA256), izdrukā izmantotās lietošanas sekundes un izdrukā iegūto hash kā lielu endianu un mazo endianu. Ja jaucējkodas būtu ligzdotas tikai vienā SHA256 jaucējkrānā, tas, iespējams, būtu nedaudz ātrāk, taču jebkurā gadījumā, izmantojot iepriekš minēto kodu, dubultās jaukšanas veikšanai nepieciešamas 832 lietošanas sekundes, un no ekrānuzņēmuma redzat, ka mēs iegūstam pareizo jaucējkrānu.

2. solis: sitiens pret sienu un patiešām liels bloks

Sitiens pret sienu un patiešām liels bloks
Sitiens pret sienu un patiešām liels bloks

Tātad, ja vienas jaukšanas veikšanai ir nepieciešamas 832 lietošanas sekundes, mēs varam veikt 1 /0,000834 = 1201 jaukšanas sekundē.

Lai būtu skaidrs, mēs paņēmām informāciju no bloka #125552, kur mēs zinājām nonce, tā jau ir iegūta un izmantojām šo informāciju kā pārbaudes gadījumu, lai pārliecinātos, ka mēs varam iegūt tādu pašu jauktu ar ESP8266. Tātad, kad ieguvums ar pilnībā izkoptu kalnraču, jūs nejauši uzminēsit nonce, sajauciet ar to bloka virsrakstu un pēc tam salīdziniet rezultātu ar šī bloka grūtībām. Ja jaukšana atbilst grūtībām, tā tiek iesniegta tīklam pārbaudei.

Labi, tāpēc mēs varam veikt jaukšanu, protams, likme ir šausmīga, bet, aplūkojot to kā loteriju, minējums ir minējums. Lūk, bet, rūpīgāk pārbaudot, drīz vien kļūst skaidrs, ka jums ir jādarbojas pilnam mezglam, lai varētu sazināties ar tīklu.

Tātad, ja paskatās uz diagrammu, jūs varat redzēt, ka Bitcoin dēmons, kas ir daļa no bitcoin kodola, rūpējas par saziņu starp tīklu un kalnraču. Tas patiesībā nozīmē, ka serverī ir jādarbina Bitcoin kodols, lai ESP8266 ik pēc 10 minūtēm varētu iegūt jaunu bloka galviņu un pēc tam varētu iesniegt atpakaļ tīklā.

Es to neesmu izmēģinājis, bet izskatās, ka jums vajadzētu sinhronizēt visu blokķēdi aptuveni 130 koncertu laikā, pirms tā pareizi sazināsies ar tīklu, wiki viņi min, ka dažas darbības ir jāpabeidz, pirms ir pieejama visa funkcionalitāte, tāpēc ir diezgan skaidrs to viņi domā.

No pētījuma viedokļa tas viss bija ļoti interesanti, un bija diezgan forši redzēt, kā mazais ESP8266 veiksmīgi sajauc testa gadījumu, bet praktiski runājot, es neredzu, ka daudzi lejupielādētu kodolu, sinhronizējot visu bloka ķēde, visu atjauninot, sekojot līdzi drošības jautājumiem, lai iegūtu 1 pret 1e16 iespēju uzvarēt blokā. Man tilts uz tālu.

Jau no paša sākuma es zināju, ka jaukšanas ātrums būs briesmīgs, taču zinātkāre mani pārņēma, un man vajadzēja to izmēģināt. Tā vietā, lai veiktu solo ieguvi, tur varētu būt ieguves baseins, kuram var pieslēgties tieši no ESP8266 bez monumentālām pūlēm, vai arī var būt cita piemērotāka kriptovalūta. Ja atrodat kādu, lūdzu, dariet man to zināmu.

3. darbība: atsauces

1. ESP8266 Bitcoin Miner GitHub krātuve

2. ESP8266 kriptogrāfijas GitHub krātuve

3. Bitcoin ieguves grūti veids: algoritmi, protokoli un baiti

4. Bloķēt jaukšanas algoritmu

5. Bloks 125552

Ieteicams: