Sisukord:

ESP8266 Bitcoin Miner: 3 sammu
ESP8266 Bitcoin Miner: 3 sammu

Video: ESP8266 Bitcoin Miner: 3 sammu

Video: ESP8266 Bitcoin Miner: 3 sammu
Video: Сборка майнинг фермы на ардуино/ duino coin arduino mining 2024, Juuli
Anonim
ESP8266 Bitcoin Miner
ESP8266 Bitcoin Miner

Kuna Bitcoini hind jätkuvalt tõusis ja paar ESP8266 -d oli alati ühendatud, kuid ei teinud tegelikult palju, mõtlesin, miks mitte proovida rakendada Solo Bitcoin Miner. Pärast väikest katsetamist sain ESP8266 kuni ~ 1200 räsi sekundis ja 2017. aasta detsembri seisuga töötas Bitcoini võrk umbes 12 000 000 tera räsi sekundis (viimaste numbrite kohta saate vaadata blockchaininfo).

Nii et nende numbrite põhjal oleks meil 1: 1e16 võimalus iga kümne minuti tagant plokki edukalt kaevandada, kus ploki väärtus on praegu 212 000 dollarit. Muidugi on see palju nagu lotopileti ostmine, ainult palju väiksema võiduvõimalusega, aga teate vana ütlust, keegi peab selle võitma. Nii Gate Mate'i kui ka Super Squirter ESP8266 projektide puhul ei tee nad enamasti tööd, vaid on lihtsalt vooluvõrku ühendatud ja ootavad taotlusi või sisendeid. Esimene samm oli proovida välja selgitada, kas ESP8266 -l on Blockheaderil võimalik isegi topelt SHA256 esitada. Bitcoini maailmas on räsi tegelikult kahekordne SHA256, kuid me nimetame seda lihtsalt räsiks. Igatahes pärast väikest guugeldamist leidsin need kaks lehte, kus oli kogu räsimise saamiseks vajalik teave.

1. Blokeeri räsimise algoritm

2. Bitcoin Mining hard way: algoritmid, protokollid ja baidid

Väärib märkimist, et ülaltoodud linkidel kirjeldatud getwork -protokoll on aegunud. See on asendatud protokolliga getblocktemplate, mis muudab ploki päise koostamise natuke keerulisemaks, eriti peate looma oma merkle root. Vaadake kõigi nõmedate asjade jaoks wiki getblocktemplate.

Samm: algoritm

Algoritm
Algoritm

Hüppame kohe sisse, ESP8266 kood on ESP8266BitcoinMiner GitHubi repos. Ma ei kavatse kogu teavet ülaltoodud linkidelt uuesti esile tõsta, vaid toon lihtsalt välja peamised punktid.

char header_hex = "0100000081cd02ab7e569e8bcd9317e2fe99f2de44d49ab2b8851ba4a308000000000000e320b6c2fffc8d750423db8b1eb942ae710e951ed797ffb" f97b7b07b07b7b7b7b

char header_hex on ploki päis ja see koosneb kuuest väljast Versioon, hashPrevBlock, hashMerkleRoot, Time, Bits ja Nonce, mis on omavahel ühendatud heksikujuliste märkidena. See kopeeriti just ülaltoodud lingilt, kuid tegelikul täieõiguslikul kaevuril võtaksite kõik need väljad json -objekti sisse ja seejärel peate lõplikkuse lahendama ja iga 10 minuti järel lennult kokku panema.

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

allkirjastamata int i, mg, ng, rg; jaoks (mg = 0, i = 0; i '9'? in - 'a' + 10: in - '0'; rg = in [i + 1]> '9'? in [i+1] - 'a'+10: [i+1] - '0'; väljas [mg] = (ng << 4) | rg;} tagasitulek;}

hex_decode võtab stringi header_hex, mis sisaldab kuueteistkümnendsüsteemi ascii märke, ja täidab uint8_t hashbyytes [80] nende baitväärtustega, mis on SHA256 räsimiseks valmis.

tühine räsi () {

hex_decode (päise_heks, strlen (päise_heks), räsimärgid); allkirjata pikk algus = micros (); hasher.doUpdate (hashbyte, sizeof (hashbyte)); baitide räsimine [SHA256_SIZE]; hasher.doFinal (hash); hashagain.doUpdate (hash, sizeof (hash)); baitide räsi2 [SHA256_SIZE]; hashagain.doFinal (hash2); allkirjastamata pika otsaga = micros (); allkirjata pikk delta = lõppenud - algus; Serial.println (delta); Serial.print ("Big Endian:"); jaoks (bait i = 32; i> 0; i-) {kui (räsi2 [i-1] <0x10) {Serial.print ('0'); } Serial.print (räsi2 [i-1], HEX); } Serial.println (); Serial.print ("Väike Endian:"); jaoks (bait i = 0; i <SHA256_SIZE; i ++) {if (hash2 <0x10) {Serial.print ('0'); } Serial.print (hash2 , HEX); }}

hash lihtsalt räsib hashbyte kaks korda (topelt SHA256), prindib kasutatud kasutustingimused ja prindib saadud räsi välja suure ja väikese endiaanina. Kui räsid oleks pesastatud ainult ühte SHA256 räsi, oleks see tõenäoliselt veidi kiirem, kuid igal juhul kulub ülaltoodud koodiga topelträssi tegemiseks 832 kasutusaega ja ekraanipildilt näeme, et saame õige räsi.

2. samm: löömine seinale ja tõeliselt suur plokk

Löök seinale ja tõeliselt suur plokk
Löök seinale ja tõeliselt suur plokk

Seega, kui ühe räsi tegemiseks kulub 832 kasutusaega, saame teostada 1 /0,000834 = 1201 räsi sekundis.

Selguse huvides võtsime teabe plokist #125552, kus teadsime nonce'i, see on juba kaevandatud ja kasutasime seda teavet testjuhtumina, et veenduda, kas saame ESP8266 -ga sama räsi. Nii et kui olete täielikult välja töötatud kaevuriga võitnud, arvate juhuslikult nonce'i, räsite sellega plokipea ja võrdlete tulemust selle ploki raskustega. Kui räsi vastab raskustele, esitatakse see seejärel võrgule kontrollimiseks.

Ok, nii et see on suurepärane, saame räsi teha, muidugi on see määr kohutav, kuid kui vaadata seda loteriina, on oletus oletus. Siin on, kuid lähemal vaatlusel selgub peagi, et võrguga suhtlemiseks peab teil olema täielik sõlm, mis on ilmselge, kui peatute ja mõtlete, mis kaevandamine tegelikult on.

Seega, kui vaatate diagrammi, näete, et bitcoini deemon, mis on osa bitcoini tuumast, hoolitseb võrgu ja kaevuri vahelise suhtlemise eest. See tähendab tegelikult seda, et peate Bitcoini tuuma serveris käitama, et ESP8266 saaks iga 10 minuti järel uue plokipea ja saaks seejärel võrku tagasi saata.

Ma pole seda proovinud, kuid tundub, et enne plokkide ahela sünkroonimist peaks see olema umbes 130 kontserti, enne kui see võrguga korralikult suhelda saab. Vikis mainitakse, et teatud toimingud tuleb enne kõigi funktsioonide kättesaadavust lõpule viia, nii et päris kindel seda nad tähendavad.

Nii et see tõmbas mind sinna, oli uurimistöö seisukohalt kõik väga huvitav ja päris lahe oli näha, kuidas väike ESP8266 testjuhtumit edukalt räsis, kuid praktiliselt ei näe ma, et paljud inimesed tuuma alla laadiksid, sünkroonides kogu blockchain, hoides kõike ajakohasena, pidades turvaküsimustega kursis 1 in 1e16 ploki võitmise võimalusega. Sild minu jaoks kaugele.

Algusest peale teadsin, et räsimäär on kohutav, kuid uudishimu võitis mind ja ma pidin seda proovima. Soolokaevandamise asemel võib seal olla kaevandusbassein, millega saab ilma monumentaalsete pingutusteta otse ESP8266 -ga ühenduse luua, või võib olla mõni muu sobivam krüptovaluuta. Kui leiate kummagi, palun andke mulle sellest teada.

3. samm: viited

1. ESP8266 Bitcoin Mineri GitHubi hoidla

2. ESP8266 krüpto GitHubi hoidla

3. Bitcoini kaevandamine raskel viisil: algoritmid, protokollid ja baidid

4. Blokeeri räsimise algoritm

5. Plokk 125552

Soovitan: