Obsah:
Video: Bitcoinový miner ESP8266: 3 kroky
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 12:00
Vzhľadom na to, že cena bitcoinu stále stúpa a pár ESP8266 je vždy zapojených, ale v skutočnosti nerobí veľa, napadlo ma, prečo neskúsiť a implementovať sólo bitcoinový miner. Po troche experimentovania som dostal ESP8266 až ~ 1200 hash/s a v decembri 2017 sieť Bitcoin vykonávala približne 12 000 000 tera hash za sekundu (najnovšie čísla môžete skontrolovať na blockchaininfo).
Na základe týchto čísel by sme teda mali šancu 1 v 1e16 úspešne vyťažiť blok každých desať minút, kde má blok v súčasnosti hodnotu 212 000 dolárov. Iste, je to veľa ako kúpiť lístok na lotto, ale s oveľa menšou šancou na výhru, ale poznáte staré príslovie, niekto to musí vyhrať. Pri projektoch Gate Mate a Super Squirter ESP8266 väčšinu času nevykonávajú žiadnu prácu, iba sú zapojené a čakajú na požiadavky alebo vstupy, tak prečo ich do toho nezapojiť a možno vyhrať razenie mincí. Prvým krokom bolo pokúsiť sa zistiť, či je vôbec možné vykonať dvojitý SHA256 na Blockheader na ESP8266. Vo svete bitcoinov je „hash“v skutočnosti dvojnásobný SHA256, ale budeme ho označovať iba ako hash. Každopádne, po troche googlenia som našiel tieto dve stránky, ktoré poskytovali všetky informácie potrebné na hašovanie.
1. Algoritmus hashovania blokov
2. Ťažba bitcoinov ťažkou cestou: algoritmy, protokoly a bajty
Stojí za zmienku, že protokol getwork, ako je podrobne popísané vo vyššie uvedených odkazoch, je zastaraný. Bol nahradený protokolom getblocktemplate, čo komplikuje zostavenie hlavičky bloku, konkrétne si musíte vytvoriť vlastný koreň merkle. Všetky odvážne veci nájdete na wiki getblocktemplate.
Krok 1: Algoritmus
Vrhnime sa rovno, kód ESP8266 je v repo ESP8266BitcoinMiner GitHub. Nebudem prehodnocovať všetky informácie z vyššie uvedených odkazov, ale iba zdôrazniť hlavné body.
char header_hex = 0100000081cd02ab7e569e8bcd9317e2fe99f2de44d49ab2b8851ba4a30800000000000000320b6c2fffc8d750423db8b1eb942ae710e951ed797f7affc8892b0f
char header_hex je záhlavie bloku a je zostavené zo šiestich polí, verzia, hashPrevBlock, hashMerkleRoot, Time, Bits a Nonce, všetky spolu spojené ako malé endiánové hodnoty v hexadecimálnom zápise. To bolo skopírované z vyššie uvedeného odkazu, ale v skutočnom plnohodnotnom baníku by ste každé z týchto polí dostali do objektu json a potom by ste museli vyriešiť endianness a dať ho dohromady za behu každých 10 minút.
uint8_t *hex_decode (const char *in, size_t len, uint8_t *out) {
bez znamienka int i, mg, ng, rg; pre (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'; von [mg] = (ng << 4) | rg;} návrat;}
hex_decode vezme reťazec header_hex, ktorý obsahuje hexadecimálne znaky ascii, a naplní uint8_t hashbytes [80] s ich príslušnými bajtovými hodnotami pripravenými pre hash SHA256.
neplatný hash () {
hex_decode (header_hex, strlen (header_hex), hashbytes); nepodpísaný dlhý štart = mikro (); hasher.doUpdate (hashbytes, sizeof (hashbytes)); hash bajtov [SHA256_SIZE]; hasher.doFinal (hash); hashagain.doUpdate (hash, sizeof (hash)); bajt hash2 [SHA256_SIZE]; hashagain.doFinal (hash2); bez znamienka, dlhé konce = mikro (); nepodpísaná dlhá delta = ukončená - štart; 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 jednoducho dvakrát zahašuje bajty hash (dvojnásobok SHA256), vytlačí potrebné doby použitia a vytlačí výsledný hash ako veľký endian a malý endian. Ak by boli hashe vnorené iba do jedného hasha SHA256, bolo by to pravdepodobne o niečo rýchlejšie, ale napriek tomu s vyššie uvedeným kódom trvá 832 sekúnd na vykonanie dvojitého hashovania a zo snímky obrazovky vidíte, že získame správny hash.
Krok 2: Náraz na stenu a skutočne veľký blok
Ak teda na jeden hash trvá 832 použití, môžeme vykonať 1 /0,000834 = 1201 hash /s.
Aby bolo jasné, vzali sme informácie z bloku #125552, kde sme poznali nonce, už boli vyťažené a použili sme ich ako testovací prípad, aby sme sa uistili, že s ESP8266 môžeme získať rovnaký hash. Takže akonáhle získate s plne rozvinutým baníkom, náhodne by ste uhádli nonce, hasli s ním blockheader a potom porovnali výsledok s náročnosťou daného bloku. Ak hash spĺňa ťažkosti, potom sa odošle do siete na overenie.
Dobre, takže je skvelé, že môžeme hashovať, určite je tá sadzba strašná, ale keď sa na to pozeráme ako na lotériu, hádanie je hádanie. Tu je to, ale pri bližšom skúmaní čoskoro vyjde najavo, že musíte používať celý uzol, aby ste mohli komunikovať so sieťou, čo je zrejmé, keď sa zastavíte a zamyslíte sa nad tým, čo vlastne ťažba je.
Ak sa teda pozriete na diagram, môžete vidieť, že bitcoinový démon, ktorý je súčasťou jadra bitcoinu, sa stará o komunikáciu medzi sieťou a minerom. Čo to skutočne znamená, je potrebné spustiť bitcoinové jadro na serveri, aby ESP8266 mohol každých 10 minút získať nový záhlavie a potom sa mohol odoslať späť do siete.
Neskúšal som to, ale vyzerá to tak, že skôr, ako bude správne komunikovať so sieťou, budete musieť synchronizovať celý blockchain na približne 130 gigoch, vo wiki uvádzajú, že niektoré kroky je potrebné dokončiť skôr, ako budú k dispozícii všetky funkcie, takže celkom určite. to majú na mysli.
Takže to ma ťahalo tam hore, z výskumného hľadiska to bolo všetko veľmi zaujímavé a bolo celkom v pohode vidieť, ako malý ESP8266 úspešne hashuje testovací prípad, ale prakticky nevidím veľa ľudí, ktorí sťahujú jadro a synchronizujú celý blockchain, udržiavanie všetkého aktuálneho, dodržiavanie bezpečnostných problémov - šanca vyhrať blok 1: 1e16. Pre mňa most ďaleko.
Od začiatku som vedel, že miera hashovania bude strašná, ale zvedavosť ma premohla a musel som to skúsiť. Namiesto sólo ťažby môže existovať banský fond, ku ktorému sa dá pripojiť priamo z ESP8266 bez monumentálneho úsilia, alebo môže existovať iná kryptomena, ktorá je vhodnejšia. Ak nájdete niektorý z nich, dajte mi prosím vedieť.
Krok 3: Referencie
1. Úložisko ESP8266 Bitcoin Miner GitHub
2. Úložisko ESP8266 Crypto GitHub
3. Ťažba bitcoinov ťažkou cestou: algoritmy, protokoly a bajty
4. Algoritmus hashovania blokov
5. Blok 125552
Odporúča:
Živé streamovanie videa v rozlíšení HD 4G/5G z dronu DJI s nízkou latenciou [3 kroky]: 3 kroky
Živé streamovanie videa v rozlíšení HD 4G/5G z DJI Drone s nízkou latenciou [3 kroky]: Nasledujúci sprievodca vám pomôže získať živé video streamy v kvalite HD z takmer akéhokoľvek dronu DJI. S pomocou mobilnej aplikácie FlytOS a webovej aplikácie FlytNow môžete začať streamovať video z drona
Rekt-O-Matic Turbo S: Jednodeskový bitcoinový ticker: 12 krokov
Rekt-O-Matic Turbo S: Single Board Bitcoin Ticker: Zmeškali ste 25. októbra 2019 jednodňové zvýšenie ceny bitcoinov zo 7500 na 10300 dolárov? Tak som to urobil. Také veci sa stávajú v kryptosvete. Ľudia, čo potrebujete, je Rekt-O-Matic Turbo S Toto je ukazovateľ ceny bitcoinu s pekným OLED
Jednoduchý bitcoinový ticker: 6 krokov
Jednoduchý bitcoinový ticker: Jedná sa o jednoduchý bitcoinový alebo iný ALT coin coin. Zobrazenie ceny jednej mince na 8 x 7 segmentovom displeji. Displej je veľký, jasný a ľahko čitateľný. Cenová ponuka z bezplatného rozhrania API coinmarketcap.com sa aktualizuje každých 5 minút. Jednoduchá tlač a zostavenie. Základné ID kódu
Bitcoinový sledovač pomocou Raspberry Pi: 14 krokov (s obrázkami)
Bitcoin Tracker pomocou Raspberry Pi: Pamätáte si bitcoin? …. decentralizovaná mena novej doby, ktorá sa kedysi predávala za 19 000 dolárov, čo malo znamenať revolúciu v globálnom platobnom systéme. No ukazuje sa, že na ťažbu zostalo menej ako 3 585 825 bitcoinov. Asi pred rokom som
Miner's Pie - RoboPasty - Pasty: 4 kroky
Miner's Pie - RoboPasty - Paštéty: Tento druh paštét patrí k minerom ťažiacim rudy, nie k týmto pastám (diváci padajú), koláčom bez hrnca (a padne viac divákov), ručné kompletné jedlo, ktoré bolo vyvinuté pre baníkov. vziať so sebou hlboko do všetkých druhov baní po celom