Sisällysluettelo:

ESP8266 Bitcoin Miner: 3 vaihetta
ESP8266 Bitcoin Miner: 3 vaihetta

Video: ESP8266 Bitcoin Miner: 3 vaihetta

Video: ESP8266 Bitcoin Miner: 3 vaihetta
Video: How To Chia GPU Plotting and Farming Guide for WINDOWS UPDATED - Gigahorse Start to Finish - 2023 2024, Heinäkuu
Anonim
ESP8266 Bitcoin Miner
ESP8266 Bitcoin Miner

Bitcoinin hinnan nousun jatkuessa ja muutaman ESP8266: n ollessa aina kytkettynä verkkoon, mutta ei oikeastaan tee paljon, ajattelin, miksi et yritä toteuttaa Solo Bitcoin Miner. Pienen kokeilun jälkeen sain ESP8266: n jopa 1200 hajautusta sekunnissa, ja joulukuussa 2017 Bitcoin -verkko suoritti noin 12 000 000 tera -tiivistettä sekunnissa (voit tarkistaa blockchaininfo uusimmat numerot).

Näiden lukujen perusteella meillä olisi siis 1 in 1e16 mahdollisuus louhia lohko kymmenen minuutin välein, jos lohkon arvo on tällä hetkellä 212 000 dollaria. Toki se on paljon kuin lotto -lipun ostaminen, mutta vain paljon pienempi mahdollisuus voittaa mutta tiedät vanhan sanonnan, että jonkun on voitettava se. Sekä Gate Mate- että Super Squirter ESP8266 -projekteilla useimmiten he eivät tee mitään, he ovat vain kytkettyinä ja odottavat pyyntöjä tai tuloja, joten miksi et laittaisi niitä siihen ja voitaisi ehkä kolikoita. Ensimmäinen askel oli yrittää selvittää, olisiko edes mahdollista suorittaa kaksinkertainen SHA256 Blockheaderilla ESP8266: lla. Bitcoin -maailmassa 'hash' on itse asiassa kaksinkertainen SHA256, mutta me kutsumme sitä vain hashiksi. Joka tapauksessa pienen googlaamisen jälkeen löysin nämä kaksi sivua, jotka sisälsivät kaikki tarvittavat tiedot hajauttamiseen.

1. Lohkon hajautusalgoritmi

2. Bitcoin Kaivos kovalla tiellä: algoritmit, protokollat ja tavut

On syytä huomata, että yllä olevien linkkien yksityiskohtainen getwork -protokolla on poistettu käytöstä. Se on korvattu getblocktemplate -protokollalla, mikä tekee lohkootsikon rakentamisesta hieman monimutkaisempaa, erityisesti sinun on rakennettava oma merkle -juuri. Jos haluat tietää kaiken, saat getblocktemplate -wikin.

Vaihe 1: Algoritmi

Algoritmi
Algoritmi

Hyppäämme suoraan sisään, ESP8266 -koodi on ESP8266BitcoinMiner GitHub repossa. En aio korostaa kaikkia yllä olevien linkkien tietoja, vaan korostaa vain tärkeimpiä kohtia.

char header_hex = "0100000081cd02ab7e569e8bcd9317e2fe99f2de44d49ab2b8851ba4a308000000000000e320b6c2fffc8d750423db8b1eb942ae710e951ed797ffbfb" bbbbbbbdbbdb3b7b7b7b7b7b7b7b3a57a57a57a57a07a07a07a07a07a7

char header_hex on lohkon otsikko ja se koostuu kuudesta kentästä, Versio, hashPrevBlock, hashMerkleRoot, Time, Bits ja Nonce, jotka on yhdistetty toherheriksi pieninä endiaaniarvoina heksadesimaalimuodossa. Se kopioitiin juuri yllä olevasta linkistä, mutta varsinaisessa täysimittaisessa kaivosmiehessä saisit kukin näistä kentistä json -objektiin ja sitten sinun olisi selvitettävä endianiteetti ja koottava se lennossa 10 minuutin välein.

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

allekirjoittamaton 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: sisään [i+1] - '0'; ulos [mg] = (ng << 4) | rg;} palaa ulos;}

hex_decode ottaa header_hex -merkkijonon, joka sisältää heksadesimaalisia ascii -merkkejä, ja täyttää uint8_t -hash -tavut [80] vastaavilla tavuarvoillaan valmiina SHA256 -tiivisteeseen.

void hash () {

hex_decode (header_hex, strlen (header_hex), hashbytes); allekirjoittamaton pitkä aloitus = micros (); hasher.doUpdate (hashbytes, sizeof (hashbytes)); tavu tiiviste [SHA256_SIZE]; hasher.doFinal (hajautus); hashagain.doUpdate (hash, sizeof (hash)); tavu tiiviste2 [SHA256_SIZE]; hashagain.doFinal (hash2); allekirjoittamaton pitkä pää = micros (); allekirjoittamaton pitkä delta = päättynyt - alku; Sarja.println (delta); Serial.print ("Big Endian:"); for (tavu i = 32; i> 0; i-) {if (hash2 [i-1] <0x10) {Serial.print ('0'); } Serial.print (tiiviste2 [i-1], HEX); } Sarja.println (); Serial.print ("Little Endian:"); for (tavu i = 0; i <SHA256_SIZE; i ++) {if (hash2 <0x10) {Serial.print ('0'); } Serial.print (hash2 , HEX); }}

hash yksinkertaisesti tiivistää hashbytejä kahdesti (kaksinkertainen SHA256), tulostaa käyttämänsä sekunnit ja tulostaa tuloksena olevan tiivisteen suurena endiaanina ja pienenä endiaanina. Jos hajautukset olisi sisäkkäin vain yhteen SHA256 -tiivisteeseen, se olisi luultavasti hieman nopeampaa, mutta joka tapauksessa yllä olevan koodin kanssa kaksinkertaisen hajautuksen suorittaminen kestää 832 käyttö sekuntia ja näet kuvakaappauksesta oikean tiivistelmän.

Vaihe 2: Osuminen seinään ja todella iso lohko

Osuminen seinään ja todella iso lohko
Osuminen seinään ja todella iso lohko

Joten jos yhden hajautuksen tekeminen kestää 832 käyttösekuntia, voimme suorittaa 1 /0,000834 = 1201 hajautusta sekunnissa.

Selvyyden vuoksi otimme tiedot lohkosta #125552, jossa tiesimme nonce: n, se on jo louhittu ja käytimme tätä tietoa testitapauksena varmistaaksemme, että saisimme saman tiivisteen ESP8266: n kanssa. Joten kun voitto täydellisesti täytetyllä kaivosmiehellä, otat satunnaisesti arvauksen noncesta, tiivistä lohkon otsikko sen kanssa ja vertaa sitten tulosta kyseisen lohkon vaikeuteen. Jos tiiviste täyttää ongelman, se lähetetään sitten verkolle tarkistettavaksi.

Ok, joten on hienoa, että voimme suorittaa hajautuksen, varmasti korko on kauhea, mutta kun sitä tarkastellaan arpajaisena, arvaus on arvaus. Tässä on, mutta kun tarkemmin tarkastellaan, pian tulee selväksi, että sinun on suoritettava täysi solmu kommunikoidaksesi verkon kanssa, mikä on selvää, kun lopetat ja mietit mitä kaivostoiminta todellisuudessa on.

Joten jos katsot kaaviota, näet, että bitcoin -demoni, joka on osa bitcoin -ydintä, huolehtii verkon ja kaivosmiehen välisestä viestinnästä. Tämä todella tarkoittaa sitä, että sinun on käytettävä Bitcoin -ydintä palvelimella, jotta ESP8266 voi saada uuden lohkootsikon 10 minuutin välein ja sitten lähettää sen takaisin verkkoon.

En ole kokeillut sitä, mutta näyttää siltä, että sinun pitäisi synkronoida koko lohkoketju noin 130 keikalla, ennen kuin se kommunikoi oikein verkon kanssa, wikissä mainitaan, että tietyt vaiheet on suoritettava ennen kuin kaikki toiminnot ovat käytettävissä, joten melko varma sitä ne tarkoittavat.

Joten se vei minut sinne, tutkimusnäkökulmasta se oli kaikki erittäin mielenkiintoista ja oli melko siistiä nähdä pieni ESP8266 onnistuneesti tiivistämään testitapauksen, mutta käytännössä en näe, että monet ihmiset lataavat ytimen, synkronoivat koko blockchain, pitäen kaiken ajan tasalla, pitämällä ajan tasalla tietoturvaongelmista, jotta 1: 1e16 mahdollisuus voittaa lohko. Silta kauas minulle.

Alusta asti tiesin, että hajautusprosentti olisi kauhea, mutta uteliaisuus sai minut voimaan ja minun piti antaa sille mahdollisuus. Yksinlouhinnan sijaan siellä saattaa olla kaivosallas, joka voidaan yhdistää suoraan ESP8266 -laitteesta ilman monumentaalista työtä, tai saattaa olla toinen sopivampi kryptovaluutta. Jos löydät kumman tahansa, ilmoita siitä minulle.

Vaihe 3: Viitteet

1. ESP8266 Bitcoin Miner GitHub -varasto

2. ESP8266 Crypto GitHub -varasto

3. Bitcoinin louhinta vaikealla tavalla: algoritmit, protokollat ja tavut

4. Lohkon hajautusalgoritmi

5. Lohko 125552

Suositeltava: