Table des matières:

ESP8266 Bitcoin Miner : 3 étapes
ESP8266 Bitcoin Miner : 3 étapes

Vidéo: ESP8266 Bitcoin Miner : 3 étapes

Vidéo: ESP8266 Bitcoin Miner : 3 étapes
Vidéo: Each miner makes HOW MUCH? #bitcoinmining #gpu #bitcoinforbeginners - jp baric tiktok 2024, Novembre
Anonim
ESP8266 Mineur de Bitcoin
ESP8266 Mineur de Bitcoin

Avec le prix du Bitcoin qui continue de grimper et avec quelques ESP8266 toujours branchés mais ne faisant pas vraiment grand-chose, j'ai pensé pourquoi ne pas essayer de mettre en œuvre un Solo Bitcoin Miner. Après un peu d'expérimentation, j'ai obtenu l'ESP8266 jusqu'à ~ 1200 hachages/s et en décembre 2017, le réseau Bitcoin opérait environ 12 000 000 téra de hachages par seconde (vous pouvez consulter blockchaininfo pour les derniers chiffres).

Donc, sur la base de ces chiffres, nous aurions 1 chance sur 1 sur 16 de réussir à extraire un bloc toutes les dix minutes alors qu'un bloc vaut actuellement 212 000 $. Bien sûr, c'est un peu comme acheter un billet de loto, mais avec une chance beaucoup plus petite de gagner., mais vous connaissez le vieil adage, quelqu'un doit gagner. Avec les projets Gate Mate et Super Squirter ESP8266, la plupart du temps, ils ne font aucun travail, ils sont simplement branchés et attendent des demandes ou des entrées, alors pourquoi ne pas les y mettre et peut-être gagner de la monnaie. La première étape consistait à essayer de déterminer s'il était même possible d'effectuer un double SHA256 sur le Blockheader sur un ESP8266. Dans le monde Bitcoin, le « hash » est en fait un double SHA256, mais nous l'appellerons simplement le hachage. Quoi qu'il en soit, après un peu de recherche sur Google, j'ai trouvé ces deux pages qui fournissaient toutes les informations nécessaires pour obtenir le hachage.

1. Algorithme de hachage de bloc

2. Bitcoin Mining à la dure: les algorithmes, les protocoles et les octets

Il convient de noter que le protocole getwork, comme détaillé dans les liens ci-dessus, a été déprécié. Il a été remplacé par le protocole getblocktemplate, ce qui complique un peu la création d'un en-tête de bloc, en particulier vous devez créer votre propre racine merkle. Pour tous les détails, consultez le wiki getblocktemplate.

Étape 1: L'algorithme

L'algorithme
L'algorithme

Commençons directement, le code ESP8266 se trouve dans le référentiel ESP8266BitcoinMiner GitHub. Je ne vais pas ressasser toutes les informations des liens ci-dessus, mais plutôt simplement souligner les points principaux.

car header_hex= 0100000081cd02ab7e569e8bcd9317e2fe99f2de44d49ab2b8851ba4a308000000000000e320b6c2fffc8d750423db8b1eb942ae710e951ed797f7affc8892b0f1fc127421;dbc7b42146

char header_hex est l'en-tête de bloc et est construit à partir de six champs, Version, hashPrevBlock, hashMerkleRoot, Time, Bits et Nonce, tous concaténés en tant que valeurs little endian en notation hexadécimale. Cela vient d'être copié à partir du lien ci-dessus, mais dans un mineur à part entière, vous recevriez chacun de ces champs dans un objet json, puis vous deviez trier le boutianness et le rassembler à la volée toutes les 10 minutes.

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

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

hex_decode prend la chaîne header_hex, qui contient des caractères hexadécimaux ascii, et remplit le hashbytes uint8_t[80] avec leurs valeurs d'octets respectives prêtes pour le hachage SHA256.

hachage vide(){

hex_decode(header_hex, strlen(header_hex), hashbytes); début long non signé = micros(); hasher.doUpdate(hashbytes, sizeof(hashbytes)); hachage d'octets [SHA256_SIZE]; hasher.doFinal(hachage); hashagain.doUpdate(hash, sizeof(hash)); octet hash2[SHA256_SIZE]; hashagain.doFinal(hash2); long non signé = micros(); delta long non signé = terminé - début; 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 hache simplement les octets de hachage deux fois (double SHA256), imprime les usecondes qu'il a fallu et imprime le hachage résultant sous la forme d'un gros boutien et d'un petit boutien. Si les hachages étaient imbriqués dans un seul hachage SHA256, ce serait probablement un peu plus rapide, mais de toute façon, avec le code ci-dessus, il faut 832 usecondes pour effectuer le double hachage et vous pouvez voir sur la capture d'écran que nous obtenons le hachage correct.

Étape 2: Frapper un mur et un très gros bloc

Frapper un mur et un très gros bloc
Frapper un mur et un très gros bloc

Donc, si cela prend 832 usecondes pour faire un hachage, nous pouvons effectuer 1/0.000834 = 1201 hachages /sec.

Juste pour être clair, nous avons pris les informations du bloc #125552 où nous connaissions le nonce, il a déjà été extrait et utilisé ces informations comme cas de test pour nous assurer que nous pourrions obtenir le même hachage avec l'ESP8266. Ainsi, une fois le gain obtenu avec un mineur entièrement étoffé, vous devineriez au hasard le nonce, hachez le bloc-tête avec celui-ci, puis comparez le résultat à la difficulté de ce bloc. Si le hachage rencontre la difficulté, il est ensuite soumis au réseau pour vérification.

Ok, donc c'est super, nous pouvons effectuer le hachage, bien sûr le taux est horrible, mais quand on le considère comme une loterie, une supposition est une supposition. Voici le mais, en y regardant de plus près, il devient vite évident que vous devez exécuter un nœud complet pour pouvoir communiquer avec le réseau, ce qui est assez évident lorsque vous vous arrêtez et réfléchissez à ce qu'est réellement l'exploitation minière.

Donc, si vous regardez le diagramme, vous pouvez voir que le démon bitcoin qui fait partie du noyau bitcoin s'occupe de la communication entre le réseau et le mineur. Ce que cela signifie vraiment, c'est que vous devez exécuter le noyau Bitcoin sur un serveur afin que l'ESP8266 puisse obtenir un nouveau bloc-tête toutes les 10 minutes, puis être en mesure de se soumettre à nouveau au réseau.

Je ne l'ai pas essayé mais il semble que vous deviez synchroniser l'ensemble de la blockchain à environ 130 gigs avant qu'elle ne communique correctement avec le réseau, dans le wiki, ils mentionnent que certaines étapes doivent être terminées avant que toutes les fonctionnalités soient disponibles, donc assez sûr c'est ce qu'ils veulent dire.

Donc, cela m'a poussé là-haut, d'un point de vue de la recherche, tout était très intéressant et c'était plutôt cool de voir le petit ESP8266 hacher avec succès le cas de test, mais en pratique, je ne vois pas beaucoup de gens télécharger le noyau, synchroniser l'intégralité blockchain, garder tout à jour, suivre les problèmes de sécurité, le tout pour une chance sur 1e16 de gagner le bloc. Un pont trop loin pour moi.

Dès le départ, je savais que le taux de hachage serait terrible, mais la curiosité a eu raison de moi et j'ai dû essayer. Plutôt que de miner en solo, il pourrait y avoir un pool de minage qui peut être connecté directement à partir de l'ESP8266 sans un effort monumental ou il pourrait y avoir une autre crypto-monnaie plus appropriée. Si vous trouvez l'un ou l'autre merci de me le faire savoir.

Étape 3: Références

1. ESP8266 Dépôt GitHub Bitcoin Miner

2. Référentiel ESP8266 Crypto GitHub

3. Bitcoin mining à la dure: les algorithmes, les protocoles et les octets

4. Bloquer l'algorithme de hachage

5. Bloc 125552

Conseillé: