Indholdsfortegnelse:

ESP8266 Bitcoin Miner: 3 trin
ESP8266 Bitcoin Miner: 3 trin

Video: ESP8266 Bitcoin Miner: 3 trin

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

Da prisen på Bitcoin fortsatte med at stige og med et par ESP8266'er altid tilsluttet, men ikke rigtig gjorde meget, tænkte jeg, hvorfor ikke prøve at implementere en Solo Bitcoin Miner. Efter lidt eksperimentering fik jeg ESP8266 op til ~ 1200 hash/sek, og fra december 2017 udførte Bitcoin -netværket omkring 12.000.000 tera -hash i sekundet (du kan tjekke blockchaininfo for de nyeste tal).

Så baseret på disse tal ville vi have en 1 i 1e16 chance for med succes at udvinde en blok hvert tiende minut, hvor en blok i øjeblikket er $ 212.000 værd. Sikker på, at det er meget som at købe en lotto -billet, kun med en meget meget mindre chance for at vinde, men du kender det gamle ordsprog, nogen skal vinde det. Med både Gate Mate og Super Squirter ESP8266 -projekterne gør de det meste af tiden ikke noget arbejde, de er bare tilsluttet og venter på anmodninger eller input, så hvorfor ikke sætte dem til det og måske vinde noget mønt. Det første trin var at prøve at finde ud af, om det overhovedet var muligt at udføre en dobbelt SHA256 på Blockheader på en ESP8266. I Bitcoin verden er 'hash' faktisk en dobbelt SHA256, men vi vil bare omtale det som hash. Anyways efter lidt googling fandt jeg disse to sider, som gav al den information, der er nødvendig for at få hash.

1. Bloker hash -algoritme

2. Bitcoin Mining den hårde måde: algoritmerne, protokoller og bytes

Det er værd at bemærke, at getwork -protokollen, som beskrevet i ovenstående links, er blevet forældet. Det er blevet erstattet med getblocktemplate -protokollen, hvilket gør det lidt mere kompliceret at bygge et blokhoved, specifikt skal du bygge din egen merkle -root. For alle de nitty gritty tjek getblocktemplate wiki.

Trin 1: Algoritmen

Algoritmen
Algoritmen

Lad os springe lige ind, ESP8266 -koden er på ESP8266BitcoinMiner GitHub -repoen. Jeg vil ikke gentage alle oplysninger fra ovenstående links, men snarere blot fremhæve hovedpunkterne.

char header_hex = 0100000081cd02ab7e569e8bcd9317e2fe99f2de44d49ab2b8851ba4a308000000000000e320b6c2fffc8d750423db8b1eb942ae710e951ed797f7affc8892b0fbfc892b0fbfcfbfcbfcfbfcfbfcfbfcfbfcfbfcfdcfbfbfcfdcfbfcfdcfbfcfdcfbfcfbfcfdcfdcfcfcfcfcfbfdcfcfdcfcfdcfdcfdcfdcfdcfdcf)

char header_hex er blokhovedet og er opbygget af seks felter, Version, hashPrevBlock, hashMerkleRoot, Time, Bits og Nonce alle sammenkædet sammen som små endianværdier i hexnotation. Det blev lige kopieret fra linket ovenfor, men i en egentlig fuldt udbygget minearbejder ville du modtage hvert af disse felter i et json -objekt og derefter skulle sortere endiessen ud og sætte den sammen på farten hvert 10. minut.

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

usigneret int i, mg, ng, rg; for (mg = 0, i = 0; i '9'? i - 'a' + 10: i - '0'; rg = i [i + 1]> '9'? i [i+1] - 'a'+10: in [i+1] - '0'; ud [mg] = (ng << 4) | rg;} vende tilbage;}

hex_decode tager header_hex -strengen, som indeholder hexadecimale ascii -tegn, og udfylder uint8_t hashbytes [80] med deres respektive byteværdier klar til SHA256 -hasheren.

ugyldig hash () {

hex_decode (header_hex, strlen (header_hex), hashbytes); usigneret lang 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); usigneret lang ende = micros (); usigneret langt delta = slut - start; Serial.println (delta); Serial.print ("Big Endian:"); for (byte i = 32; i> 0; i-) {if (hash2 [i-1] <0x10) {Serial.print ('0'); } Serial.print (hash2 [i-1], HEX); } Serial.println (); Serial.print ("Little Endian:"); for (byte i = 0; i <SHA256_SIZE; i ++) {if (hash2 <0x10) {Serial.print ('0'); } Serial.print (hash2 , HEX); }}

hash hasher simpelthen hashbytes to gange (dobbelt SHA256), udskriver de brugte sekunder og udskriver den resulterende hash som en stor endian og lille endian. Hvis hashene kun var indlejret i en SHA256 -hasher, ville det sandsynligvis være lidt hurtigere, men alligevel med ovenstående kode tager det 832 sekunder at udføre den dobbelte hash, og du kan se fra skærmbilledet, at vi får den korrekte hash.

Trin 2: At ramme en væg og en virkelig stor blok

At ramme en mur og en virkelig stor blok
At ramme en mur og en virkelig stor blok

Så hvis det tager 832 usekunder at lave en hash, kan vi udføre 1 /0,000834 = 1201 hash /sek.

For at være klar tog vi oplysningerne fra blok #125552, hvor vi kendte nonce, det er allerede blevet udvundet og brugt disse oplysninger som en test sag for at sikre, at vi kunne få den samme hash med ESP8266. Så når en gevinst med en fuldt udbygget minearbejder ville du tilfældigt gætte på nonce, hash blokhovedet med det og derefter sammenligne resultatet med vanskeligheden for den blok. Hvis hash opfylder vanskeligheden, sendes den derefter til netværket til verifikation.

Ok, så det er fantastisk, vi kan udføre hash, sikker på at prisen er forfærdelig, men når man ser på det som et lotteri, er et gæt et gæt. Her er det, men ved nærmere eftersyn bliver det snart klart, at du skal køre en fuld knude for at kunne kommunikere med netværket, lidt tydeligt, når du stopper og tænker over, hvad minedrift egentlig er.

Så hvis du ser på diagrammet, kan du se, at bitcoin -dæmonen, som er en del af bitcoin -kernen, tager sig af kommunikationen mellem netværket og minearbejderen. Hvad dette virkelig betyder, er, at du skal køre Bitcoin -kernen på en server, så ESP8266 kan få et nyt blokhoved hvert 10. minut og derefter kunne sende tilbage til netværket.

Jeg har ikke prøvet det, men det ser ud til, at du skulle synkronisere hele blockchain på omkring 130 koncerter, før det ville kommunikere korrekt med netværket, i wiki nævner de, at visse trin skal udføres, før al funktionalitet er tilgængelig, så ret sikker det er hvad de mener.

Så det trak mig derop, fra et forskningssynspunkt var det hele meget interessant, og det var ret fedt at se den lille ESP8266 med succes hash testkassen, men praktisk talt ser jeg ikke mange mennesker, der downloader kernen og synkroniserer hele blockchain, holde alt opdateret, følge med i sikkerhedsproblemer alt sammen for en 1 i 1e16 chance for at vinde blokken. En bro for langt for mig.

Fra begyndelsen vidste jeg, at hashfrekvensen ville være forfærdelig, men nysgerrigheden fik mig bedre, og jeg måtte prøve det. I stedet for solo -minedrift kan der være en minepulje derude, som kan tilsluttes direkte fra ESP8266 uden en monumental indsats, eller der kan være en anden kryptokurrency, der er mere egnet. Hvis du finder det, så lad mig det vide.

Trin 3: Referencer

1. ESP8266 Bitcoin Miner GitHub -depot

2. ESP8266 Crypto GitHub -depot

3. Bitcoin minedrift på den hårde måde: algoritmerne, protokoller og bytes

4. Bloker hash -algoritme

5. Blok 125552

Anbefalede: