INHOUDSOPGAWE:

ESP8266 Bitcoin Miner: 3 stappe
ESP8266 Bitcoin Miner: 3 stappe

Video: ESP8266 Bitcoin Miner: 3 stappe

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

Terwyl die prys van Bitcoin aanhou klim en met 'n paar ESP8266's altyd ingeprop het, maar nie regtig veel doen nie, het ek gedink, waarom nie 'n Solo Bitcoin Miner probeer implementeer nie. Na 'n bietjie eksperimenteer het ek die ESP8266 tot ~ 1200 hashes/sec gekry, en vanaf Desember 2017 het die Bitcoin -netwerk ongeveer 12 000 000 tera -hashes per sekonde uitgevoer (u kan die blokkettinginligting nagaan vir die nuutste getalle).

Op grond van die getalle het ons dus 'n 1 in 1e16 -kans om elke tien minute 'n blok suksesvol te ontgin, waar 'n blok $ 212 000 werd is., maar jy ken die ou gesegde, iemand moet dit wen. Met beide die Gate Mate- en Super Squirter ESP8266 -projekte doen hulle meestal geen werk nie; hulle is net ingeprop en wag op versoeke of insette, so waarom sit u dit nie en wen u miskien muntstukke? Die eerste stap was om te probeer uitvind of dit selfs moontlik is om 'n dubbele SHA256 op die Blockheader op 'n ESP8266 uit te voer. In die Bitcoin -wêreld is die 'hash' eintlik 'n dubbele SHA256, maar ons sal dit net as die hash noem. In elk geval, nadat ek 'n bietjie rondgekuier het, het ek hierdie twee bladsye gevind wat al die nodige inligting bevat om hashing te kry.

1. Blokkeer hash -algoritme

2. Bitcoin Mynbou op die harde manier: die algoritmes, protokolle en grepe

Dit is opmerklik dat die getwork -protokol, soos uiteengesit in die bogenoemde skakels, beëindig is. Dit is vervang met die getblocktemplate -protokol, wat dit 'n bietjie ingewikkelder maak om 'n blokopskrif te bou, spesifiek dat u u eie merkle -wortel moet bou. Kyk na die getblocktemplate wiki vir al die snaakse dinge.

Stap 1: Die algoritme

Die algoritme
Die algoritme

Kom ons spring dadelik in, die ESP8266 -kode is by die ESP8266BitcoinMiner GitHub -repo. Ek gaan nie al die inligting uit die bogenoemde skakels herhaal nie, maar eerder die belangrikste punte beklemtoon.

char header_hex = 0100000081cd02ab7e569e8bcd9317e2fe99f2de44d49ab2b8851ba4a308000000000000e320b6c2fffc8d750423db8b1eb942ae710e951ed797f7affc8892b0fb8c9f2fcfcbcbcbfcbfcfbfcfbfcfbfcfbfcfbfcfbfcfbfcfbfcfbfcfbfcfbfcfbfcfdcfbfcfdfcfbfcfdfcfbcfcfbcfc892bfcfbcfc892b0fbcfcfbcfdfcfbcdcfdcfdcfcfdcfdcfdcf

char header_hex is die blokopskrif en is opgebou uit ses velde, Version, hashPrevBlock, hashMerkleRoot, Time, Bits en die Nonce, wat almal saamgevoeg is as klein endiaanse waardes in hex -notasie. Dit is pas vanaf die skakel hierbo gekopieer, maar in 'n werklike volwaardige mynwerker ontvang u elk van die velde in 'n json -voorwerp en moet u die eindelikheid uitsorteer en elke 10 minute aanmekaar sit.

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

ongetekende int i, mg, ng, rg; vir (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'; uit [mg] = (ng << 4) | rg;} terugkeer;}

hex_decode neem die header_hex string, wat heksadesimale ascii karakters bevat, en vul die uint8_t hashbytes [80] met hul onderskeie byte waardes gereed vir die SHA256 hasher.

ongeldig hash () {

hex_decode (header_hex, strlen (header_hex), hashbytes); ongetekende lang begin = 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); ongetekende lang einde = micros (); ongetekende lang delta = geëindig - begin; Serial.println (delta); Serial.print ("Big Endian:"); vir (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:"); vir (byte i = 0; i <SHA256_SIZE; i ++) {if (hash2 <0x10) {Serial.print ('0'); } Serial.print (hash2 , HEX); }}

hash haas eenvoudig die hashbytes twee keer (dubbel SHA256), druk die gebruikte sekondes af en druk die gevolglike hash uit as 'n groot endiaan en klein endiaan. As die hashes slegs in een SHA256 -hasher vasgemaak is, sou dit waarskynlik 'n bietjie vinniger wees, maar in elk geval met die kode hierbo, neem dit 832 sekondes om die dubbele hash uit te voer, en u kan op die skermkiekie sien dat ons die regte hash kry.

Stap 2: slaan 'n muur en 'n baie groot blok

'N Muur en 'n baie groot blok raak
'N Muur en 'n baie groot blok raak

Dus, as dit 832 sekondes neem om een hash te doen, kan ons 1 /0,000834 = 1201 hashes /sek.

Net om duidelik te wees, ons het die inligting uit blok #125552 geneem, waar ons die nonce ken, dit is reeds ontgin en het die inligting as 'n toets gebruik om seker te maak dat ons dieselfde hash met die ESP8266 kan kry. Dus, sodra u 'n wins met 'n volledig uitgevoerde mynwerker verkry het, sou u willekeurig 'n raaiskoot oor die nonce maak, die blokkop daarmee sny en die resultaat dan vergelyk met die moeilikheidsgraad van die blok. As die hash die probleem ondervind, word dit dan aan die netwerk voorgelê vir verifikasie.

Ok, dit is wonderlik dat ons die hash kan uitvoer, die koers is beslis aaklig, maar as u dit as 'n lotery beskou, is 'n raaiskoot. Dit is die volgende, maar by nadere ondersoek word dit gou duidelik dat u 'n volledige knoop moet gebruik om met die netwerk te kan kommunikeer, maar dit is duidelik dat u stop en nadink oor wat mynbou eintlik is.

As u dus na die diagram kyk, kan u sien dat die bitcoin -demoon wat deel uitmaak van die bitcoin -kern sorg vir die kommunikasie tussen die netwerk en die mynwerker. Wat dit regtig beteken, is dat u die Bitcoin -kern op 'n bediener moet bestuur, sodat die ESP8266 elke 10 minute 'n nuwe blokkop kan kry en dan weer by die netwerk kan inhandig.

Ek het dit nie probeer nie, maar dit lyk asof u die hele blockchain met ongeveer 130 optredes moet sinkroniseer voordat dit behoorlik met die netwerk sou kommunikeer; in die wiki noem hulle dat sekere stappe voltooi moet word voordat alle funksies beskikbaar is, so redelik seker dit is wat hulle bedoel.

So dit het my daarnatoe gebring, vanuit 'n navorsingsoogpunt was dit alles baie interessant en dit was nogal gaaf om te sien hoe die klein ESP8266 die toetskas suksesvol slaan, maar prakties gesproke sien ek nie baie mense wat die kern aflaai nie, wat die hele sinchroniseer blockchain, hou alles op datum, hou tred met veiligheidskwessies, alles vir 'n 1 in 1e16 kans om die blok te wen. 'N Brug te ver vir my.

Ek het van die begin af geweet dat die hash -koers vreeslik sou wees, maar nuuskierigheid het my onderkry en ek moes dit probeer. In plaas van solo -mynbou is daar moontlik 'n mynpoel wat direk vanaf die ESP8266 verbind kan word sonder 'n monumentale poging, of daar is moontlik 'n ander kripto -geldeenheid wat meer geskik is. Laat weet my as u dit vind.

Stap 3: Verwysings

1. ESP8266 Bitcoin Miner GitHub -bewaarplek

2. ESP8266 Crypto GitHub -bewaarplek

3. Bitcoin ontgin op die harde manier: die algoritmes, protokolle en grepe

4. Blokkeer hash -algoritme

5. Blok 125552

Aanbeveel: