Indholdsfortegnelse:
Video: ESP8266 Bitcoin Miner: 3 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:29
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
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
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:
FÅ BITCOIN LIVE PRIS TTGO ESP32: 10 trin
FÅ BITCOIN LIVE PRIS TTGO ESP32: I denne vejledning lærer vi, hvordan du får en aktuel Bitcoin -pris i USD og EUR ved hjælp af en TTGO ESP32 og Visuino. Se videoen. (Ny opdateret fil til download herunder!)
Bitcoin Ticker med graf: 8 trin
Bitcoin Ticker With Graph: Jeg lavede dette baseret på et projekt for en BTC -pristicker, som får prisoplysninger fra coinmarketcap.com, der oprindeligt blev skrevet af Brian Lough. Han brugte ESP8266, som er et Arduino -kompatibelt kort, der leveres med indbygget WiFi. Som han beskriver
Bitcoin-lignende krypto kører på Raspberry Pi: 5 trin
Bitcoin-lignende Crypto Running på Raspberry Pi: Instruktioner til at køre en node. OS-OS-operativsystemet er lavet af raspbian, der kører us-cryptoplatform-pakken. Du behøver ikke bede om tilladelse til at deltage. Følg bare disse enkle instruktioner og køre en node, der tjener kryptokurrency hvert minut
Visualiser din Bitcoin gevinst og tab med Arduino & Python: 6 trin
Visualiser din Bitcoin gevinst og tab med Arduino & Python: Grundidé Personligt er jeg en kryptovaluta -investor. Men jeg har også en kæmpe belastning med arbejde. Så jeg kan ikke blive ved med at spore bitcoin -prisen som 10 gange i minuttet. Jeg vil dog stadig vide, om jeg tjener eller taber penge. Dermed
Miner's Pie - RoboPasty - Pasties: 4 trin
Miner's Pie - RoboPasty - Pasties: Denne form for pasties er malmgravende Miner -slags, ikke disse pasties (seerne taber), en gryde -tærte uden gryden (og flere seere taber), et håndholdt komplet måltid, der blev udviklet til minearbejdere at tage med dem dybt nede i alle slags miner overalt