Taula de continguts:

ESP8266 Bitcoin Miner: 3 passos
ESP8266 Bitcoin Miner: 3 passos

Vídeo: ESP8266 Bitcoin Miner: 3 passos

Vídeo: ESP8266 Bitcoin Miner: 3 passos
Vídeo: Сроки окупаемости Arduino в майнинге #mining 2024, Juliol
Anonim
ESP8266 Bitcoin Miner
ESP8266 Bitcoin Miner

Amb el preu de Bitcoin continuant pujant i amb un parell d’ESP8266 sempre endollats, però realment sense fer molt, vaig pensar per què no intentar implementar un Solo Bitcoin Miner. Després d’experimentar una mica, he obtingut l’ESP8266 fins a uns 1200 hash / s i a partir de desembre de 2017 la xarxa Bitcoin funcionava al voltant de 12, 000, 000 tera hash per segon (podeu consultar blockchaininfo per obtenir els darrers números).

Per tant, basant-nos en aquests números, tindríem la possibilitat d'1 en 1e16 d'extreure amb èxit un bloc cada deu minuts, on un bloc val actualment 212.000 dòlars. És clar que és molt semblant a comprar un bitllet de loteria, només amb moltes més possibilitats de guanyar., però ja coneixeu el vell refrany: algú l’ha de guanyar. Tant amb els projectes Gate Mate com amb Super Squirter ESP8266 la majoria de les vegades no fan cap feina, només estan connectats i esperen sol·licituds o entrades, així que, per què no els hi dediqueu i potser guanyeu una moneda? El primer pas va ser intentar esbrinar si fins i tot era possible realitzar un doble SHA256 al Blockheader en un ESP8266. Al món Bitcoin, el "hash" és en realitat un doble SHA256, però només ens referirem a ell com a hash. De totes maneres, després de fer una mica de Google, vaig trobar aquestes dues pàgines que proporcionaven tota la informació necessària per obtenir hash.

1. Algorisme de hash de blocs

2. Bitcoin Mining de la manera més dura: els algoritmes, protocols i bytes

Val a dir que el protocol getwork, tal com es detalla als enllaços anteriors, ha quedat obsolet. S'ha substituït pel protocol getblocktemplate, cosa que fa que sigui una mica més complicat construir una capçalera de bloc, concretament heu de construir la vostra pròpia arrel merkle. Per a tots els descarnats, consulteu la wiki getblocktemplate.

Pas 1: l'algorisme

L’algorisme
L’algorisme

Saltem directament, el codi ESP8266 es troba al dipòsit GitHub ESP8266BitcoinMiner. No tornaré a revisar tota la informació dels enllaços anteriors, sinó que només destacaré els punts principals.

Char header_hex = "0100000081cd02ab7e569e8bcd9317e2fe99f2de44d49ab2b8851ba4a308000000000000e320b6c2fffc8d750423db8b1eb942ae710e951ed797f7affc8892b0f1fc122bc7f5d74df2b9441a42a14695";

char header_hex és la capçalera del bloc i està construït a partir de sis camps, Version, hashPrevBlock, hashMerkleRoot, Time, Bits i Nonce, tots concatenats junts com a petits valors endians en notació hexadecimal. Això es va copiar de l’enllaç anterior, però en un miner realment complet rebíeu cadascun d’aquests camps en un objecte json i després havíeu d’ordenar l’endianisme i posar-lo junts sobre la marxa cada 10 minuts.

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

unsigned int i, mg, ng, rg; per a (mg = 0, i = 0; i '9'? a - 'a' + 10: a - '0'; rg = a [i + 1]> '9'? a [i + 1] - 'a' + 10: in [i + 1] - '0'; out [mg] = (ng << 4) | rg;} return out;}

hex_decode pren la cadena header_hex, que conté caràcters ascii hexadecimals, i omple els hashbytes uint8_t [80] amb els seus respectius valors de bytes preparats per a la hasher SHA256.

void hash () {

hex_decode (header_hex, strlen (header_hex), hashbytes); inici llarg sense signar = micros (); hasher.doUpdate (hashbytes, sizeof (hashbytes)); byte hash [SHA256_SIZE]; hasher.doFinal (hash); hashagain.doUpdate (hash, sizeof (hash)); byte hash2 [SHA256_SIZE]; hashagain.doFinal (hash2); unsigned long ended = micros (); unsigned long delta = acabat - inici; 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 simplement hashbytes hashbytes dues vegades (doble SHA256), imprimeix els segons d'us que va prendre i imprimeix el hash resultant com a endian gran i petit endian. Si els hash estiguessin niats només en un hasher SHA256 probablement seria una mica més ràpid, però de totes maneres amb el codi anterior es necessiten 832 segons per realitzar el hash doble i es pot veure a la captura de pantalla obtenim el hash correcte.

Pas 2: colpejar un mur i un bloc realment gran

Colpejar un mur i un bloc realment gran
Colpejar un mur i un bloc realment gran

Per tant, si es necessiten 832 segons per fer un hash, podem realitzar 1 / 0,000834 = 1201 hash / seg.

Només per tenir clar, vam agafar la informació del bloc núm. 125552 on coneixíem el no, ja s’ha extret i vam utilitzar aquesta informació com a cas de prova per assegurar-nos que podríem obtenir el mateix hash amb l’ESP8266. Per tant, un cop obtingut un guanyador amb un miner completament concret, hauríeu d’endevinar aleatòriament el cas, escriviu-hi la capçalera i compararíeu el resultat amb la dificultat d’aquest bloc. Si el hash compleix la dificultat, es lliura a la xarxa per a la seva verificació.

D'acord, així que és fantàstic que puguem realitzar el hash, segur que el ritme és horrible, però quan el considerem com a loteria, una suposició és una suposició. Heus aquí el però, després d'una inspecció més propera, aviat es fa evident que cal que executeu un node complet per poder comunicar-vos amb la xarxa, cosa que és obvi quan us atureu a pensar què és realment la mineria.

Així que si mireu el diagrama podeu veure que el dimoni bitcoin que forma part del nucli bitcoin s’encarrega de la comunicació entre la xarxa i el miner. El que realment vol dir és que heu d’executar el nucli de Bitcoin en un servidor perquè l’ESP8266 pugui obtenir un nou capçalera cada 10 minuts i després poder tornar a enviar-lo a la xarxa.

No ho he provat, però sembla que hauríeu de sincronitzar tota la cadena de blocs a uns 130 concerts abans de comunicar-se correctament amb la xarxa. això és el que volen dir.

Per tant, això em va portar fins allà, des del punt de vista de la investigació, va ser tot molt interessant i va ser molt divertit veure que el petit ESP8266 hachava amb èxit el cas de prova, però, pràcticament parlant, no veig molta gent descarregant el nucli, sincronitzant el conjunt blockchain, mantenint-ho tot al dia, mantenint-se al dia amb els problemes de seguretat per tenir una possibilitat d'1 en 1e16 de guanyar el bloc. Un pont molt llunyà per a mi.

Des del primer moment vaig saber que el percentatge de hash seria terrible, però la curiositat va guanyar-me el cap i vaig haver de provar-ho. En lloc de la mineria en solitari, hi pot haver una piscina minera que es pugui connectar directament des de l’ESP8266 sense un esforç monumental o que hi pugui haver una altra criptomoneda que sigui més adequada. Si en trobeu qualsevol, feu-me-ho saber.

Pas 3: referències

1. Dipòsit GitHub de Bitcoin Miner ESP8266

2. Dipòsit ESP8266 Crypto GitHub

3. La mineria de Bitcoin de la manera més dura: els algoritmes, protocols i bytes

4. Algorisme de hash de blocs

5. Bloc 125552

Recomanat: