Innholdsfortegnelse:

ESP8266 Bitcoin Miner: 3 trinn
ESP8266 Bitcoin Miner: 3 trinn

Video: ESP8266 Bitcoin Miner: 3 trinn

Video: ESP8266 Bitcoin Miner: 3 trinn
Video: This is the largest USB Bitcoin Mining Setup in the world! |#Shorts | How Much? 2024, Juli
Anonim
ESP8266 Bitcoin Miner
ESP8266 Bitcoin Miner

Med prisen på Bitcoin som fortsetter å klatre og med et par ESP8266 -er som alltid er plugget inn, men egentlig ikke gjør så mye, tenkte jeg hvorfor ikke prøve å implementere en Solo Bitcoin Miner. Etter litt eksperimentering fikk jeg ESP8266 opp til ~ 1200 hashes/sec, og fra desember 2017 utførte Bitcoin -nettverket rundt 12 000 000 tera -hashes per sekund (du kan sjekke blockchaininfo for de siste tallene).

Så basert på disse tallene ville vi ha en 1 i 1e16 sjanse til å lykkes med å gruve en blokk hvert tiende minutt hvor en blokk for øyeblikket er verdt $ 212 000. Sikker på at det er mye som å kjøpe en lotto -billett, bare med en mye mye mindre sjanse til å vinne, men du kjenner det gamle ordtaket, noen må vinne det. Med både Gate Mate og Super Squirter ESP8266 -prosjekter de fleste ganger gjør de ikke noe arbeid, de er bare plugget inn og venter på forespørsler eller innspill, så hvorfor ikke sette dem til det og kanskje vinne litt mynt. Det første trinnet var å prøve å finne ut om det var mulig å utføre en dobbel SHA256 på Blockheader på en ESP8266. I Bitcoin -verden er 'hash' faktisk en dobbel SHA256, men vi vil bare referere til det som hash. Uansett, etter litt googling fant jeg disse to sidene som ga all informasjonen som trengs for å få hashing.

1. Blokker hash -algoritme

2. Bitcoin Mining den harde måten: algoritmene, protokollene og byte

Det er verdt å merke seg at getwork -protokollen, som beskrevet i linkene ovenfor, er blitt avskrevet. Den er erstattet med getblocktemplate -protokollen, noe som gjør det litt mer komplisert å bygge en blokkoverskrift, spesielt må du bygge din egen merkle -rot. For all den nitty gritty sjekk ut getblocktemplate wiki.

Trinn 1: Algoritmen

Algoritmen
Algoritmen

La oss hoppe rett inn, ESP8266 -koden er på ESP8266BitcoinMiner GitHub -repoen. Jeg kommer ikke til å reprodusere all informasjon fra koblingene ovenfor, men bare markere hovedpunktene.

char header_hex = 0100000081cd02ab7e569e8bcd9317e2fe99f2de44d49ab2b8851ba4a308000000000000e320b6c2fffc8d750423db8b1eb942ae710e951ed797f7affc8892b0fbfc892b0cbfcfbfcfbfbfcfbfbfcfbfcfbfbfcfbfcfdcfbfcfdcbfbfcfdcfbfcfdfcfdcfdcfdcfdcfdcfdcfdcfdcfdcfdcfdcfdcfdcfdcfdcfdcfdcfdcfdcfdfdcfdfdcf)

char header_hex er blokkoverskriften og er bygd opp fra seks felt, Version, hashPrevBlock, hashMerkleRoot, Time, Bits og Nonce alle sammenkoblet sammen som små endianverdier i hex -notasjon. Det ble nettopp kopiert fra lenken ovenfor, men i en faktisk fullverdig gruvearbeider vil du motta hvert av disse feltene i et json -objekt og deretter måtte sortere ut endianness og sette det sammen i farten hvert 10. minutt.

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

usignert 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: i [i+1] - '0'; ut [mg] = (ng << 4) | rg;} gå tilbake;}

hex_decode tar header_hex -strengen, som inneholder heksadesimale ascii -tegn, og fyller ut uint8_t hashbytes [80] med sine respektive byteverdier klare for SHA256 -hasheren.

ugyldig hash () {

hex_decode (header_hex, strlen (header_hex), hashbytes); usignert 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); usignert lang slutt = micros (); usignert langt delta = slutt - 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 bare hasher hashbytes to ganger (dobbel SHA256), skriver ut de sekundene det tok og skriver ut den resulterende hashen som en stor endian og liten endian. Hvis hasjene var nestet i bare en SHA256 -hasher, ville det sannsynligvis være litt raskere, men uansett med koden ovenfor tar det 832 sekunder å utføre dobbel hash, og du kan se fra skjermbildet at vi får riktig hash.

Trinn 2: Å treffe en vegg og en virkelig stor blokk

Treffer en vegg og en virkelig stor blokk
Treffer en vegg og en virkelig stor blokk

Så hvis det tar 832 sekunder å gjøre en hash, kan vi utføre 1 /0,000834 = 1201 hash /sek.

Bare for å være tydelig, tok vi informasjonen fra blokk #125552 der vi kjente til nonce, den er allerede blitt utvunnet og brukte denne informasjonen som et testtilfelle for å sikre at vi kunne få den samme hashen med ESP8266. Så en gang en gevinst med en fullstendig utarbeidet gruvearbeider ville du tilfeldigvis gjette på nonce, hash blockheaderen med den og deretter sammenligne resultatet med vanskeligheten for den blokken. Hvis hasjen møter vanskeligheten, blir den deretter sendt til nettverket for bekreftelse.

Ok, så det er flott vi kan utføre hashen, sikker på at prisen er forferdelig, men når du ser på det som et lotteri, er et gjetning en gjetning. Her er det, men ved nærmere inspeksjon blir det snart klart at du må kjøre en full node for å kunne kommunisere med nettverket, ganske tydelig når du stopper og tenker på hva gruvedrift egentlig er.

Så hvis du ser på diagrammet, kan du se at bitcoin -demonen som er en del av bitcoin -kjernen, tar seg av kommunikasjonen mellom nettverket og gruvearbeideren. Hva dette egentlig betyr er at du må kjøre Bitcoin -kjernen på en server, slik at ESP8266 kan få et nytt blockhead hvert 10. minutt og deretter kunne sende tilbake til nettverket.

Jeg har ikke prøvd det, men det ser ut til at du må synkronisere hele blockchain på rundt 130 spillejobber før det kommuniserer ordentlig med nettverket, i wiki nevner de at visse trinn må fullføres før all funksjonalitet er tilgjengelig, så ganske sikker det er det de mener.

Så det trakk meg opp dit, fra et forskningssynspunkt var det hele veldig interessant, og det var ganske kult å se den lille ESP8266 lykkes med å teste saken, men praktisk talt ser jeg ikke at mange mennesker laster ned kjernen og synkroniserer hele blockchain, holde alt oppdatert, følge med på sikkerhetsspørsmål alt for en 1 i 1e16 sjanse til å vinne blokken. En bro for langt for meg.

Fra begynnelsen visste jeg at hasjhastigheten ville være forferdelig, men nysgjerrigheten tok overhånd og jeg måtte prøve. I stedet for solo -gruvedrift kan det være et gruvebasseng der ute som kan kobles til direkte fra ESP8266 uten en monumental innsats, eller det kan være en annen kryptovaluta som er mer egnet. Gi meg beskjed hvis du finner det.

Trinn 3: Referanser

1. ESP8266 Bitcoin Miner GitHub -depot

2. ESP8266 Crypto GitHub -depot

3. Bitcoin -gruvedrift på den harde måten: algoritmene, protokollene og byte

4. Blokker hash -algoritme

5. Blokk 125552

Anbefalt: