Tartalomjegyzék:

ESP8266 Bitcoin Miner: 3 lépés
ESP8266 Bitcoin Miner: 3 lépés

Videó: ESP8266 Bitcoin Miner: 3 lépés

Videó: ESP8266 Bitcoin Miner: 3 lépés
Videó: MINING DuCo dengan nodemcu esp8266. . 2024, November
Anonim
ESP8266 Bitcoin Miner
ESP8266 Bitcoin Miner

Mivel a Bitcoin ára tovább emelkedett, és néhány ESP8266 mindig csatlakoztatva van, de nem igazán tesz sokat, gondoltam, miért nem próbálom meg megvalósítani a Solo Bitcoin Miner -t. Egy kis kísérletezés után megkaptam az ESP8266 -ot ~ 1200 hash/sec -ig, és 2017 decemberében a Bitcoin hálózat másodpercenként körülbelül 12 000 000 tera hash -t teljesített (a blockchaininfo oldalon ellenőrizheti a legújabb számokat).

Tehát ezen számok alapján 1 az 1e16 esélyünk lenne arra, hogy tízpercenként sikeresen kitermeljünk egy blokkot, ahol egy blokk jelenleg 212 000 dollárt ér. Persze ez olyan, mint egy lottójegy vásárlása, csak sokkal kisebb esélye van a nyerésre, de ismered a régi mondást: valakinek meg kell nyernie. Mind a Gate Mate, mind a Super Squirter ESP8266 projektek legtöbbször nem végeznek semmilyen munkát, csak csatlakoztatva vannak, és várják a kéréseket vagy bemeneteket, miért ne tegye rá őket, és nyerjen némi pénzverést. Az első lépés az volt, hogy megpróbáljuk kitalálni, hogy egyáltalán lehetséges -e dupla SHA256 végrehajtása a Blockheaderen ESP8266 -on. A Bitcoin világában a „hash” valójában dupla SHA256, de csak hash -ként hivatkozunk rá. Mindenesetre egy kis googling után találtam ezt a két oldalt, amelyek minden információt tartalmaztak a hash eléréséhez.

1. Blokk hash algoritmus

2. A Bitcoin bányászása a nehéz úton: az algoritmusok, protokollok és bájtok

Érdemes megjegyezni, hogy a getwork protokoll, amint azt a fenti linkek részletezik, elavult. Ezt a getblocktemplate protokoll váltotta fel, ami egy kicsit bonyolultabbá teszi a blokkfejléc létrehozását, különösen a saját merkle gyökér létrehozását. Ha minden rosszra kíváncsi, nézze meg a getblocktemplate wikit.

1. lépés: Az algoritmus

Az algoritmus
Az algoritmus

Ugorjunk bele, az ESP8266 kód az ESP8266BitcoinMiner GitHub repóban található. Nem fogom újból összefoglalni a fenti linkekből származó információkat, hanem csak kiemelni a főbb pontokat.

char header_hex = "0100000081cd02ab7e569e8bcd9317e2fe99f2de44d49ab2b8851ba4a308000000000000e320b6c2fffc8d750423db8b1eb942ae710e951ed79f4ffb" f7bfbfbbbbdb3b7b7b7b7b7b7b7b7b3b3b7b3b7b3b7b3b7b3b3b3b3b3b3b3b1b1c1c1c3a5a3a5a5a5a2a7a5a5a5a5a5a5a5a7a7a7a - - -

A char header_hex a blokkfejléc, és hat mezőből épül fel: Version, hashPrevBlock, hashMerkleRoot, Time, Bits és a Nonce. Ezt csak a fenti linkről másolták le, de egy teljes értékű bányászban ezeket a mezőket egy json objektumban kapná meg, majd rendeznie kell a végleteket, és 10 percenként menet közben össze kell raknia.

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

előjel nélküli int i, mg, ng, rg; for (mg = 0, i = 0; i '9'? in - 'a' + 10: in - '0'; rg = in [i + 1]> '9'? in [i+1] - 'a'+10: [i+1] - '0'; ki [mg] = (ng << 4) | rg;} visszatér;}

A hex_decode felveszi a header_hex karakterláncot, amely hexadecimális ascii karaktereket tartalmaz, és feltölti az uint8_t hashbyte -kat [80] a megfelelő bájtértékekkel az SHA256 hasher számára.

void hash () {

hex_decode (header_hex, strlen (header_hex), hashbyte); előjel nélküli hosszú kezdés = micros (); hasher.doUpdate (hashbyte, sizeof (hashbytes)); bájt hash [SHA256_SIZE]; hasher.doFinal (hash); hashagain.doUpdate (hash, sizeof (hash)); bájt hash2 [SHA256_SIZE]; hashagain.doFinal (hash2); előjel nélküli hosszú végű = micros (); előjel nélküli hosszú delta = véget ért - kezdés; Soros.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); } Sorozat.println (); Serial.print ("Little Endian:"); for (byte i = 0; i <SHA256_SIZE; i ++) {if (hash2 <0x10) {Serial.print ('0'); } Serial.print (hash2 , HEX); }}

a hash egyszerűen kétszer kivonatolja a hashbyte -ot (dupla SHA256), kinyomtatja a felhasznált köteteket, és kinyomtatja a kapott hash -t nagy endiánként és kis endiánként. Ha a kivonatokat csak egy SHA256 -os hash -be ágyazták be, akkor valószínűleg egy kicsit gyorsabb lenne, de a fenti kóddal mégis 832 használati másodperc szükséges a kettős kivonat végrehajtásához, és a képernyőképen láthatjuk, hogy a megfelelő kivonatot kapjuk.

2. lépés: Falnak ütés és egy igazán nagy blokk

Ütés a falnak és egy igazán nagy blokknak
Ütés a falnak és egy igazán nagy blokknak

Tehát ha egy hash elvégzéséhez 832 használati másodpercre van szükség, akkor 1 /0,000834 = 1201 kivonatot /sec hajthatunk végre.

Az egyértelműség kedvéért az információkat a 125552 -es blokkból vettük, ahol ismertük a nonce -t, azt már kitermeltük, és ezt az információt tesztesetként használtuk annak biztosítására, hogy ugyanazt a hash -t kapjuk az ESP8266 -tal. Tehát ha egy nyereség egy teljesen kiteljesedett bányásznál, akkor véletlenszerűen találgat egy nonce -t, kivonja vele a blokkfejlécet, majd összehasonlítja az eredményt az adott blokk nehézségével. Ha a hash megfelel a nehézségnek, akkor azt a hálózathoz küldjük ellenőrzésre.

Rendben, tehát nagyszerű, hogy végrehajthatjuk a hash -t, persze az arány szörnyű, de ha lottónak tekintjük, a találgatás csak találgatás. Itt van, de ha alaposabban megvizsgáljuk, hamar kiderül, hogy teljes csomópontot kell futtatnia ahhoz, hogy kommunikálni tudjon a hálózattal, ami nyilvánvaló, amikor megáll, és elgondolkodik azon, mi is valójában a bányászat.

Tehát, ha megnézi a diagramot, láthatja, hogy a bitcoin démon, amely a bitcoin mag része, gondoskodik a hálózat és a bányász közötti kommunikációról. Ez valójában azt jelenti, hogy futtatnia kell a Bitcoin magját egy kiszolgálón, hogy az ESP8266 10 percenként új blokkfejlécet kaphasson, majd vissza tudjon küldeni a hálózatnak.

Még nem próbáltam, de úgy tűnik, hogy a teljes blokkláncot szinkronizálnia kell körülbelül 130 koncerten, mielőtt megfelelően kommunikálna a hálózattal, a wikiben megemlítik, hogy bizonyos lépéseket el kell végezni, mielőtt minden funkció elérhetővé válik. ezt jelentik.

Kutatási szempontból ez az egész nagyon érdekes volt, és nagyon jó volt látni, hogy a kis ESP8266 sikeresen kivonatolja a tesztesetet, de gyakorlatilag nem látom, hogy sokan letöltenék a magot, szinkronizálva az egészet blokklánc, mindent naprakészen tartva, lépést tartva a biztonsági kérdésekkel, hogy 1 az 1e16 -ban megnyerje a blokkot. Híd a messzi számomra.

Kezdettől fogva tudtam, hogy a hash arány szörnyű lesz, de a kíváncsiság úrrá lett rajtam, és muszáj volt kipróbálnom. Az egyéni bányászat helyett lehet, hogy van egy bányászati medence, amelyhez monumentális erőfeszítés nélkül közvetlenül az ESP8266 -ról lehet csatlakozni, vagy lehet egy másik megfelelőbb kriptovaluta. Ha megtalálja bármelyiket, kérem jelezze.

3. lépés: Hivatkozások

1. ESP8266 Bitcoin Miner GitHub adattár

2. ESP8266 Crypto GitHub adattár

3. A bitcoin bányászása kemény úton: az algoritmusok, protokollok és bájtok

4. Blokk hash algoritmus

5. 125552 blokk

Ajánlott: