Cuprins:
Video: ESP8266 Bitcoin Miner: 3 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:46
Având în vedere că prețul Bitcoin continuă să crească și cu câteva ESP8266 conectate întotdeauna, dar nu prea fac multe, m-am gândit de ce să nu încerc să implementez un Solo Bitcoin Miner. După un pic de experimentare, am primit ESP8266 până la ~ 1200 hash / sec și, din decembrie 2017, rețeaua Bitcoin funcționa în jur de 12, 000, 000 tera hash pe secundă (puteți verifica blockchaininfo pentru ultimele numere).
Deci, pe baza acestor numere, am avea o șansă de 1 la 1e16 să extragem cu succes un bloc la fiecare zece minute, în cazul în care un bloc valorează în prezent 212 000 USD., dar știi vechea zicală, cineva trebuie să o câștige. Atât cu proiectele Gate Mate, cât și cu Super Squirter ESP8266, de cele mai multe ori nu fac nici o treabă, sunt doar conectate și așteaptă cererile sau intrările, așa că de ce să nu le puneți și poate câștiga niște monede. Primul pas a fost să încercăm să ne dăm seama dacă era chiar posibil să realizăm un SHA256 dublu pe Blockheader pe un ESP8266. În lumea Bitcoin, „hash” este de fapt un SHA256 dublu, dar ne vom referi doar la acesta ca hash. Oricum, după un pic de căutare, am găsit aceste două pagini care furnizau toate informațiile necesare pentru a obține hashing.
1. Blocați algoritmul Hashing
2. Bitcoin Mining în mod greu: algoritmii, protocoalele și octeții
Este demn de remarcat faptul că protocolul getwork, așa cum este detaliat în linkurile de mai sus, a fost învechit. A fost înlocuit cu protocolul getblocktemplate, ceea ce face un pic mai complicată construirea unui antet de bloc, în special trebuie să vă construiți propria rădăcină merkle. Pentru toți aceia care sunt înrăiți, consultați getblocktemplate wiki.
Pasul 1: Algoritmul
Să intrăm direct, codul ESP8266 se află la repo GitHub ESP8266BitcoinMiner. Nu am să refac toate informațiile de pe linkurile de mai sus, ci mai degrabă să evidențiez principalele puncte.
char header_hex = "0100000081cd02ab7e569e8bcd9317e2fe99f2de44d49ab2b8851ba4a308000000000000e320b6c2fffc8d750423db8b1eb942ae710e951ed797f7affc8892b0f1fc122bc7f5d74df2b9441a42a14695";
char header_hex este antetul blocului și este construit din șase câmpuri, Versiune, hashPrevBlock, hashMerkleRoot, Time, Bits și Nonce toate concatenate împreună ca mici valori endian în notație hexagonală. Aceasta a fost doar copiată de pe linkul de mai sus, dar într-un miner cu drepturi depline, ați primi fiecare dintre acele câmpuri într-un obiect JSON și apoi ar trebui să sortați endianitatea și să le puneți împreună din mers la fiecare 10 minute.
uint8_t * hex_decode (const char * in, size_t len, uint8_t * out) {
unsigned int i, mg, ng, rg; pentru (mg = 0, i = 0; i '9'? în - 'a' + 10: în - '0'; rg = în [i + 1]> '9'? în [i + 1] - 'a' + 10: în [i + 1] - '0'; out [mg] = (ng << 4) | rg;} return out;}
hex_decode preia șirul header_hex, care conține caractere ascii hexazecimale și populează hashbytes uint8_t [80] cu valorile lor de octeți respectivi gata pentru hasher-ul SHA256.
void hash () {
hex_decode (header_hex, strlen (header_hex), hashbytes); start fără semnare lungă = micros (); hasher.doUpdate (hashbytes, sizeof (hashbytes)); octet hash [SHA256_SIZE]; hasher.doFinal (hash); hashagain.doUpdate (hash, sizeof (hash)); octet hash2 [SHA256_SIZE]; hashagain.doFinal (hash2); unsigned long ended = micros (); unsigned long delta = încheiat - start; Serial.println (delta); Serial.print ("Big Endian:"); for (octet i = 32; i> 0; i -) {if (hash2 [i-1] <0x10) {Serial.print ('0'); } Serial.print (hash2 [i-1], HEX); } Serial.println (); Serial.print ("Micul Endian:"); for (octet i = 0; i <SHA256_SIZE; i ++) {if (hash2 <0x10) {Serial.print ('0'); } Serial.print (hash2 , HEX); }}
hash pur și simplu hashbyte de două ori (SHA256 dublu), tipărește secunde de utilizare și imprimă hash-ul rezultat ca un endian mare și un endian mic. Dacă hashurile ar fi cuibărite într-un singur hasher SHA256, ar fi probabil puțin mai rapid, dar oricum cu codul de mai sus este nevoie de 832 secunde pentru a efectua hash-ul dublu și puteți vedea din captura de ecran obținem hash-ul corect.
Pasul 2: Lovirea unui perete și a unui bloc cu adevărat mare
Deci, dacă este nevoie de 832 de secunde pentru a face un hash, putem efectua 1 / 0.000834 = 1201 hash / sec.
Pentru a fi clar, am luat informațiile din blocul # 125552, unde știam nonce, au fost deja exploatate și am folosit acele informații ca caz de testare pentru a ne asigura că putem obține același hash cu ESP8266. Deci, odată ce ați câștigat cu un miner complet complet, ați presupune în mod aleatoriu o ghicire la nonce, ați hash-ul cu antetul și apoi ați comparat rezultatul cu dificultatea pentru acel bloc. Dacă hashul întâmpină dificultatea, acesta este apoi trimis rețelei pentru verificare.
Ok, așa că este minunat că putem efectua hash, sigur că rata este groaznică, dar când o privim ca o loterie, o presupunere este o presupunere. Iată, dar, la o inspecție mai atentă, devine curând clar că trebuie să rulați un nod complet pentru a putea comunica cu rețeaua, un fel de evident atunci când vă opriți și vă gândiți la ce este mineria de fapt.
Deci, dacă vă uitați la diagramă, puteți vedea că demonul bitcoin care face parte din nucleul bitcoin se ocupă de comunicarea dintre rețea și miner. Ceea ce înseamnă cu adevărat acest lucru este că trebuie să rulați nucleul Bitcoin pe un server, astfel încât ESP8266 să poată obține un nou blockheader la fiecare 10 minute și apoi să poată fi trimis înapoi la rețea.
Nu l-am încercat, dar se pare că ar trebui să sincronizați întregul blockchain la aproximativ 130 de concerte înainte ca acesta să comunice corect cu rețeaua, în wiki menționând că trebuie parcurși anumiți pași înainte ca toate funcționalitățile să fie disponibile, deci destul de sigur asta înseamnă.
Așa că asta m-a atras acolo, din punct de vedere al cercetării, a fost foarte interesant și a fost destul de mișto să văd că micul ESP8266 hash cu succes cazul testului, dar practic vorbind, nu văd mulți oameni care descarcă nucleul, sincronizând întregul blockchain, ținând totul la curent, ținând pasul cu problemele de securitate, toate pentru o șansă 1 la 1e16 de a câștiga blocul. Un pod până departe pentru mine.
De la început, am știut că rata hash-ului va fi teribilă, dar curiozitatea a fost mai bună decât mine și a trebuit să încerc. Mai degrabă decât exploatarea individuală, ar putea exista un bazin de exploatare care poate fi conectat direct de la ESP8266 fără un efort monumental sau ar putea exista o altă criptomonedă care este mai potrivită. Dacă găsiți oricare, vă rugăm să ne anunțați.
Pasul 3: Referințe
1. ESP8266 Bitcoin Miner GitHub Repository
2. Depozit ESP8266 Crypto GitHub
3. Extragerea Bitcoin în mod dificil: algoritmi, protocoale și octeți
4. Blocați algoritmul Hashing
5. Blocul 125552
Recomandat:
OBȚINEȚI PREȚ BITCOIN LIVE TTGO ESP32: 10 pași
OBȚINEȚI PREȚ LIVE BITCOIN TTGO ESP32: În acest tutorial vom învăța cum să obțineți un preț Bitcoin actual în USD și EUR folosind un TTGO ESP32 și Visuino. Urmăriți videoclipul. (Fișier actualizat nou pentru descărcare mai jos!)
Bitcoin Ticker cu grafic: 8 pași
Bitcoin Ticker With Graph: Am făcut acest lucru pe baza unui proiect pentru un ticker de preț BTC, care obține informații despre preț de la coinmarketcap.com scris inițial de Brian Lough. El a folosit ESP8266, care este o placă compatibilă Arduino care vine cu WiFi încorporat. După cum descrie
Crypto de tip Bitcoin care rulează pe Raspberry Pi: 5 pași
Criptare de tip Bitcoin care rulează pe Raspberry Pi: Instrucțiuni pentru rularea unui nod. Sistemul de operare US-OS este format din raspbian care rulează pachetul US-cryptoplatform. Nu trebuie să cereți permisiunea de a vă alătura. Urmați doar aceste instrucțiuni simple și rulați un nod care câștigă criptocurrency în fiecare minut
Vizualizați câștigul și pierderea Bitcoin cu Arduino și Python: 6 pași
Vizualizați câștigul și pierderea Bitcoin cu Arduino și Python: idee de bază Personal, sunt investitor de criptomonede. Dar am, de asemenea, o grămadă de muncă de care să mă ocup. Deci, nu sunt în măsură să urmăresc în continuare prețul bitcoin de 10 ori pe minut. Cu toate acestea, încă vreau să știu dacă câștig sau pierd bani. Prin urmare
Miner's Pie - RoboPasty - Pasties: 4 Steps
Miner's Pie - RoboPasty - Pasties: Acest tip de paste este un tip Miner care sapă minereu, nu aceste pasties (spectatorii cad), o plăcintă fără oală (și mai mulți spectatori), o masă completă portabilă care a fost dezvoltată pentru mineri să iau cu ei adânc în tot felul de mine peste tot