Obsah:

Bitcoin Miner ESP8266: 3 kroky
Bitcoin Miner ESP8266: 3 kroky

Video: Bitcoin Miner ESP8266: 3 kroky

Video: Bitcoin Miner ESP8266: 3 kroky
Video: Сроки окупаемости Arduino в майнинге #mining 2024, Červenec
Anonim
Bitcoinový miner ESP8266
Bitcoinový miner ESP8266

Vzhledem k tomu, že cena bitcoinu stále stoupá a několik ESP8266 je vždy připojeno, ale ve skutečnosti toho moc nedělá, řekl jsem si, proč nezkusit a implementovat Solo Bitcoin Miner. Po malém experimentování jsem získal ESP8266 až ~ 1200 hash/s a v prosinci 2017 síť Bitcoin prováděla přibližně 12 000 000 tera hash za sekundu (nejnovější čísla můžete zkontrolovat na blockchaininfo).

Na základě těchto čísel bychom tedy měli šanci 1 v 1e16 na úspěšnou těžbu bloku každých deset minut, kde má blok aktuálně hodnotu 212 000 $. Jistě, je to hodně podobné, jako když si koupíte loterijní lístek, jen s mnohem menší šancí na výhru, ale znáte staré přísloví, někdo to musí vyhrát. S projekty Gate Mate a Super Squirter ESP8266 většinu času nevykonávají žádnou práci, jsou pouze zapojeni a čekají na požadavky nebo vstupy, tak proč je do toho nevložit a třeba vyhrát nějaké ražení mincí. Prvním krokem bylo pokusit se zjistit, zda je vůbec možné provést dvojitý SHA256 na Blockheader na ESP8266. Ve světě bitcoinů je „hash“ve skutečnosti dvojnásobný SHA256, ale budeme jej označovat pouze jako hash. Každopádně po troše googlování jsem našel tyto dvě stránky, které poskytly všechny informace potřebné k hašování.

1. Algoritmus hashování bloků

2. Těžba bitcoinů těžkým způsobem: algoritmy, protokoly a bajty

Stojí za zmínku, že protokol getwork, jak je podrobně popsáno ve výše uvedených odkazech, byl zastaralý. Byl nahrazen protokolem getblocktemplate, což trochu komplikuje sestavení záhlaví bloku, konkrétně musíte vytvořit vlastní kořen merkle. Pro všechny odvážné věci se podívejte na wiki getblocktemplate.

Krok 1: Algoritmus

Algoritmus
Algoritmus

Pojďme hned do toho, kód ESP8266 je v repo ESP8266BitcoinMiner GitHub. Nebudu přehodnocovat všechny informace z výše uvedených odkazů, ale pouze zvýraznit hlavní body.

char header_hex = 0100000081cd02ab7e569e8bcd9317e2fe99f2de44d49ab2b8851ba4a308000000000000e320b6c2fffc8d750423db8b1eb942ae710e951ed797f7affc8892b0f

char header_hex je záhlaví bloku a je sestaveno ze šesti polí, Version, hashPrevBlock, hashMerkleRoot, Time, Bits and the Nonce, které jsou zřetězeny dohromady jako malé endianové hodnoty v hexadecimálním zápisu. To bylo zkopírováno z výše uvedeného odkazu, ale ve skutečném plnohodnotném horníkovi byste každé z těchto polí obdrželi v objektu json a poté museli vyřešit endianness a dát to dohromady za běhu každých 10 minut.

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

bez znaménka int i, mg, ng, rg; pro (mg = 0, i = 0; i '9'? v - 'a' + 10: v - '0'; rg = v [i + 1]> '9'? v [i+1] - 'a'+10: v [i+1] - '0'; ven [mg] = (ng << 4) | rg;} návrat;}

hex_decode převezme řetězec header_hex, který obsahuje hexadecimální znaky ascii, a naplní uint8_t hashbytes [80] svými příslušnými hodnotami bajtů připravenými pro hash SHA256.

neplatný hash () {

hex_decode (header_hex, strlen (header_hex), hashbytes); dlouhý bez znaménka = micros (); 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 znaménka dlouhý konec = micros (); nepodepsaná dlouhá delta = ukončena - začátek; Serial.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 (byte i = 0; i <SHA256_SIZE; i ++) {if (hash2 <0x10) {Serial.print ('0'); } Serial.print (hash2 , HEX); }}

hash jednoduše dvakrát hashuje bajty hash (double SHA256), vytiskne použitelné sekundy a vytiskne výsledný hash jako velký endian a malý endian. Pokud by byly hashe vnořeny pouze do jednoho hashe SHA256, bylo by to pravděpodobně o něco rychlejší, ale v každém případě s výše uvedeným kódem zabere dvojité hašování 832 sekund a na obrázku vidíte, že získáme správný hash.

Krok 2: Bít do zdi a opravdu velký blok

Bít do zdi a opravdu velký blok
Bít do zdi a opravdu velký blok

Pokud tedy provedení jednoho hashování zabere 832 sekund, můžeme provést 1 /0,000834 = 1201 hash /s.

Aby bylo jasné, vzali jsme informace z bloku #125552, kde jsme znali nonce, již byly vytěženy a použity jako testovací případ, abychom se ujistili, že můžeme získat stejný hash s ESP8266. Takže jakmile získáte zisk s plně rozvinutým minerem, náhodně byste uhádli nonce, hasli s ním blockheader a poté porovnali výsledek s obtížností daného bloku. Pokud hash splňuje potíže, je poté odeslán do sítě k ověření.

Dobře, takže je skvělé, že můžeme provádět hash, určitě je ta sazba strašná, ale když se na to díváme jako na loterii, hádání je hádání. Tady je to, ale po bližším prozkoumání brzy vyjde najevo, že musíte provozovat celý uzel, abyste mohli komunikovat se sítí, což je zřejmé, když se zastavíte a zamyslíte se nad tím, co vlastně těžba je.

Když se tedy podíváte na diagram, můžete vidět, že bitcoinový démon, který je součástí bitcoinového jádra, se stará o komunikaci mezi sítí a minerem. Co to ve skutečnosti znamená, je třeba spustit bitcoinové jádro na serveru, aby ESP8266 mohl každých 10 minut získat nový blockheader a poté se mohl odeslat zpět do sítě.

Nezkoušel jsem to, ale vypadá to, že budete muset synchronizovat celý blockchain kolem 130 gigů, než bude správně komunikovat se sítí, na wiki uvádějí, že určité kroky musí být dokončeny, než budou k dispozici všechny funkce, takže docela jistý to je to, co mají na mysli.

Takže to mě táhlo nahoru, z výzkumného hlediska to bylo všechno velmi zajímavé a bylo docela skvělé vidět, jak malý ESP8266 úspěšně hashuje testovací případ, ale prakticky nevidím mnoho lidí, kteří stahují jádro a synchronizují celý blockchain, udržování všeho aktuálního, držení kroku s bezpečnostními problémy vše pro šanci 1 v 1e16 na výhru bloku. Pro mě most daleko.

Od začátku jsem věděl, že míra hash bude strašná, ale zvědavost mě přemohla a musel jsem to zkusit. Spíše než sólová těžba může existovat těžební fond, ke kterému lze připojit přímo z ESP8266 bez monumentálního úsilí, nebo může existovat jiná kryptoměna, která je vhodnější. Pokud některý najdete, dejte mi prosím vědět.

Krok 3: Reference

1. Úložiště bitcoin minerů ESP8266 GitHub

2. Úložiště ESP8266 Crypto GitHub

3. Těžba bitcoinů těžkým způsobem: algoritmy, protokoly a bajty

4. Algoritmus hashování bloků

5. Blok 125552

Doporučuje: