Sadržaj:

ESP8266 Bitcoin rudar: 3 koraka
ESP8266 Bitcoin rudar: 3 koraka

Video: ESP8266 Bitcoin rudar: 3 koraka

Video: ESP8266 Bitcoin rudar: 3 koraka
Video: Bamboo Coin Web miner Pakai Laptop, PC Komputer & HP Android 2024, Studeni
Anonim
ESP8266 Bitcoin rudar
ESP8266 Bitcoin rudar

Budući da je cijena Bitcoina i dalje rasla te da je nekoliko ESP8266 uvijek uključeno, ali ne radi puno, pomislio sam zašto ne bih pokušao implementirati Solo Bitcoin Miner. Nakon malo eksperimentiranja, dobio sam ESP8266 do ~ 1200 raspršivača u sekundi, a od prosinca 2017. Bitcoin mreža je izvodila oko 12 000 000 tera raspršivanja u sekundi (možete provjeriti najnovije brojeve u blockchaininfo -u).

Dakle, na temelju tih brojeva imali bismo 1 u 1e16 šanse za uspješno rudarenje bloka svakih deset minuta gdje blok trenutno vrijedi 212 000 USD., ali znate staru izreku, netko to mora pobijediti. S projektima Gate Mate i Super Squirter ESP8266 većinu vremena ne rade ništa, samo su uključeni i čekaju zahtjeve ili unose, pa zašto ih ne biste stavili na to i možda osvojili nešto novca. Prvi korak bio je pokušati shvatiti je li uopće moguće izvesti dvostruki SHA256 na Blockheaderu na ESP8266. U svijetu bitcoina 'hash' je zapravo dvostruki SHA256, ali mi ćemo ga nazvati samo hash. U svakom slučaju, nakon malo googlanja, pronašao sam ove dvije stranice koje pružaju sve potrebne podatke za raspršivanje.

1. Algoritam blokiranja blokova

2. Bitcoin Rudarstvo na teži način: algoritmi, protokoli i bajtovi

Vrijedi napomenuti da je getwork protokol, kako je detaljno opisano u gornjim vezama, zastario. Zamijenjen je protokolom getblocktemplate koji malo komplicira izradu zaglavlja bloka, posebno morate izgraditi vlastiti korijen merkle. Za sve gluposti provjerite getblocktemplate wiki.

Korak 1: Algoritam

Algoritam
Algoritam

Idemo odmah, kod ESP8266 nalazi se na ESP8266BitcoinMiner GitHub repo. Neću ponavljati sve podatke s gornjih veza, nego samo istaknuti glavne točke.

char header_hex = 0100000081cd02ab7e569e8bcd9317e2fe99f2de44d49ab2b8851ba4a308000000000000e320b6c2fffc8d750423db8b1eb942ae710e951ed797f7a42c7b7c7b7c7c7c7c7c8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa! '

char header_hex je zaglavlje bloka i izgrađeno je od šest polja, Version, hashPrevBlock, hashMerkleRoot, Time, Bits i Nonce koji su međusobno povezani kao male endijanske vrijednosti u heksadecimalnom zapisu. To je upravo kopirano s gornje veze, ali u stvarnom potpuno razvijenom rudaru primili biste svako od tih polja u json objekt, a zatim morali riješiti endianness i sastaviti ga u hodu svakih 10 minuta.

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

bez potpisa int i, mg, ng, rg; za (mg = 0, i = 0; i '9'? u - 'a' + 10: u - '0'; rg = u [i + 1]> '9'? u [i+1] - 'a'+10: in [i+1] - '0'; out [mg] = (ng << 4) | rg;} povratak van;}

hex_decode uzima niz header_hex, koji sadrži heksadecimalne ascii znakove, i popunjava hashbajte uint8_t [80] s njihovim odgovarajućim bajtnim vrijednostima spremnim za raspršivač SHA256.

void hash () {

hex_decode (header_hex, strlen (header_hex), hashbytes); dug potpis bez potpisa = mikro ((); hasher.doUpdate (hashbytes, sizeof (hashbytes)); bajt hash [SHA256_SIZE]; hasher.doFinal (hash); hashagain.doUpdate (hash, sizeof (hash)); bajt hash2 [SHA256_SIZE]; hashagain.doFinal (hash2); bez potpisa dugotrajno = micros (); bez potpisa duga delta = završeno - početak; Serijski.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 (bajt i = 0; i <SHA256_SIZE; i ++) {if (hash2 <0x10) {Serial.print ('0'); } Serial.print (hash2 , HEX); }}

hash jednostavno dvaput raspršuje hashbajte (dvostruki SHA256), ispisuje potrebne sekunde upotrebe i ispisuje rezultirajući hash kao veliki endian i mali endian. Da su raspršivači ugniježđeni samo u jednom hasheru SHA256, to bi vjerojatno bilo malo brže, ali u svakom slučaju s gornjim kodom potrebno je 832 sekunde za izvođenje dvostrukog raspršivanja, a sa snimke zaslona možete vidjeti ispravni raspršivač.

Korak 2: Udar u zid i stvarno veliki blok

Udar u zid i stvarno veliki blok
Udar u zid i stvarno veliki blok

Dakle, ako je potrebno 832 sekunde korištenja za jedno raspršivanje, možemo izvesti 1 /0.000834 = 1201 raspršivanje /sek.

Da budemo jasni, uzeli smo podatke iz bloka #125552 gdje smo znali da nema, oni su već minirani i korišteni su ti podaci kao testni slučaj kako bismo bili sigurni da možemo dobiti isti raspršivač s ESP8266. Dakle, jednom kad dobitak dobijete s potpuno iscrtanim rudarom, slučajno ćete u jednom trenutku naslutiti, raspršiti zaglavlje bloka i usporediti rezultat s teškoćom tog bloka. Ako raspršivanje naiđe na poteškoće, tada se šalje na provjeru mreži.

U redu pa super je što možemo izvesti raspršivanje, naravno da je stopa užasna, ali kad se gleda kao lutrija, nagađanje je nagađanje. Evo, ali nakon pomnijeg pregleda uskoro postaje jasno da morate imati puni čvor da biste mogli komunicirati s mrežom, što je očito kad se zaustavite i razmislite o tome što je zapravo rudarstvo.

Dakle, ako pogledate dijagram, možete vidjeti da se bitcoin demon koji je dio jezgre bitcoina brine o komunikaciji između mreže i rudara. To doista znači da morate pokrenuti Bitcoin jezgru na poslužitelju kako bi ESP8266 mogao dobiti novi blokheader svakih 10 minuta, a zatim se moći vratiti na mrežu.

Nisam probao, ali izgleda da biste morali sinkronizirati cijeli blockchain na oko 130 koncerata prije nego što bi ispravno komunicirao s mrežom, na wikiju spominju da se određeni koraci moraju dovršiti prije nego što sve funkcije budu dostupne, tako da sam siguran to oni misle.

Tako da me to povuklo gore, sa istraživačkog stajališta sve je to bilo jako zanimljivo i bilo je jako cool vidjeti kako mali ESP8266 uspješno raspršuje testni slučaj, ali praktički govoreći ne vidim mnogo ljudi koji preuzimaju jezgru, sinkronizirajući cijelu blockchain, ažuriranje svega, praćenje sigurnosnih pitanja za šanse 1 u 1e16 za osvajanje bloka. Za mene je to daleki most.

Od početka sam znao da će stopa raspršivanja biti užasna, ali znatiželja me obuzela i morao sam to pokušati. Umjesto samostalnog rudarstva, vani bi mogao postojati rudarski bazen na koji se može spojiti izravno s ESP8266 bez velikih napora, ili bi mogla postojati druga prikladnija kriptovaluta. Ako nađete bilo koji, javite mi.

Korak 3: Reference

1. ESP8266 Bitcoin Miner GitHub spremište

2. ESP8266 Crypto GitHub spremište

3. Rukovanje bitcoina na teži način: algoritmi, protokoli i bajtovi

4. Algoritam blokiranja blokova

5. Blok 125552

Preporučeni: