With the cost of Bitcoin proceeding to climb and with two or three ESP8266’s constantly connected to the net and by any means doing not much I figured to attempt and execute a Solo Bitcoin Miner. After a tad of testing I got the ESP8266 up to ~1200 hashes/sec and as of December 2017 the Bitcoin arrange was performing around 12,000,000 tera hashes for every second (you can check blockchaininfo for the most recent numbers).

So in view of those numbers we would have a 1 out of 1×10^16 possibility of effectively mining a block like clockwork where a block is right now worth $212,000. Beyond any doubt it’s a ton like purchasing a lotto ticket, just with a whole lot littler shot of winning! However you know the well-known axiom, somebody needs to win it, might as well be me. With both the Gate Mate and Super Squirter ESP8266 extends more often than not they are not doing any work, they’re simply connected to the net and looking out for solicitations or sources of info, so for what reason not put them to it and possibly win some coinage. The initial step was to attempt and make sense of on the off chance that it was even conceivable to play out a twofold SHA256 on the Blockheader on an ESP8266. In the Bitcoin world the ‘hash’ is really a twofold SHA256, however we’ll simply allude to it as the hash. In any case after a tad of googling around I found these two pages which gave all the data expected to get hashing.

It’s significant that the getwork convention, as point by point in the above connections, has been expostulated. It’s been supplanted with the getblocktemplate convention which makes it more confounded to manufacture a square header, particularly you need to fabricate your own particular merkle root. For all the quick and dirty look at the getblocktemplate wiki.

Step 1: The Algorithm

How about we hop right in, the ESP8266 code is at the ESP8266BitcoinMiner GitHub repo. I’m not going to go over all the data from the above connections but instead simply feature the primary focuses.

char header_hex[]="

char header_hex is the square header and is worked from six fields, Version, hashPrevBlock, hashMerkleRoot, Time, Bits and the Nonce all connected together as little endian hex in documentation. That was simply replicated from the connection above yet in a real completely fledged mineworker you would receive each of those fields in a JSON packet and afterward need to deal with the endianness and set up it together on the fly at regular intervals.

uint8_t* hex_decode(const char *in, size_t len, uint8_t *out){
unsigned int i, mg, ng, rg;
for (mg = 0, i = 0; i < len; i+=2,++mg) {
ng = in[i] > '9' ? in[i] - 'a' + 10 : in[i] - '0';
rg = in[i+1] > '9' ? in[i+1] - 'a' + 10 : in[i+1] - '0';
out[mg] = (ng << 4 ) | rg;
return out;

Hash essentially hashes the hash bytes twice (twofold SHA256), prints out the microseconds it took and prints out the resultant hash as a big endian or little endian. In the event that the hashes were settled in just a single SHA256 hasher it would most likely be somewhat speedier yet at any rate with the above code it takes 832 microseconds to play out the twofold hash and you can see from the screenshot we get the right hash

Step 2: Hitting a Wall and a Really Big Block

So on the off chance that it takes 832 microseconds to complete one hash we can perform 1/0.000834 = 1201 hashes/sec.

Just to be clear we took the data from square #125552 where we knew the nonce, it’s as of now been mined and utilized that data as an experiment to ensure we could get a similar hash with the ESP8266. So once a pick up with a completely fleshed out excavator you would arbitrarily take a speculate the nonce, hash the block header with it and after that contrast the outcome with the trouble for that square. On the off chance that the hash meets the trouble, it is then submitted to the system for confirmation.

Alright with the goal that’s incredible we can play out the hash, beyond any doubt the rate is dreadful however when taking a gander at it as a lottery a figure is a figure. Here’s the in any case, upon nearer examination it soon turns out to be clear you should run a full hub to ready to speak with the system, sort of evident when you stop and consider what mining really is.

So in the event that you take a gander at the graph you can see that the bitcoin daemon which is a piece of the bitcoin center deals with the correspondence between the system and the digger. What this truly implies is you should run the Bitcoin center on a server so that the ESP8266 can get another block header like clockwork and afterward have the capacity to submit back to the system.

I haven’t attempted it yet it would seem that you would need to match up the whole block chain at around 130 Gigs previously it would appropriately speak with organize, in the wiki they specify certain means must be finished before all usefulness is accessible, so almost certain that is the thing that they mean.

So pulled me up there, from an exploration perspective it was all extremely intriguing and it was really cool to see the little ESP8266 effectively hash the experiment yet essentially I don’t see many individuals downloading the center, adjusting the whole block chain, staying up with the latest, staying aware of security issues for a 1 of every 1×10^16 shot of winning the square. An extension to far for me.

From the get go I knew the hash rate would be appalling yet interest showed signs of improvement of me and I needed to give it a go. As opposed to solo mining there may be a mining pool out there that can be associated with specifically from the ESP8266 without a great exertion or there may be another digital currency that is more appropriate. On the off chance that you find either please let me know.

Step 3: References

Thanks to MerlotMachina for this article.

6 thoughts on “Bitcoin mining with ESP8266”

  1. Anyone else think this would be a cool ongoing Project?? We could collaborate here and try and optimize the codebase for ESP8266 and ESP32 and see how far we can push this…. yes totally 100% impracticable for making $$$, but a rather cool project none the less!

    1. I think most people would rather invest their time and resources into something with at least a realistic possibility of a yield. This is a lot of “work” – regardless of how cool – for what essentially amounts to zero prospect of return on that investment.

  2. Can you or anyone reading add the ability of Connecting to Mining Pool to this code please, I tried looking for any examples using Arduino ide but couldn’t find any.
    I have an esp running 24×7 anyway and was hoping to use it as a lottery with this solo pool – https://solo.ckpool.org/

    1. hi bro

      i can’t imagine why you try do it in this low level article ( in definition section you can sea “square hash algorithm “!!! instead of ” secure hash algorithm ” )
      secure hash algorithm ( in short and general SHA family ) standard by nist FIPS180 in end 90’s and early 2000 era is key future and play most important roll in block chain and also many cryptocurrencies ( one of them is BTC ) .

      most processors from 2007 support hardware accelerator and instruction for do AES ( advanced encryption system include sha family process ) operations
      esp 32 also had 2 SHA hardware accelerator , each operation take 8 to 20 clk cycle to calculate final digest plus 60 to 100 clk cycle to process message ( refer to esp32 reference manual )

      if you want use esp32 for mining you must use at least esp IDF and you most be semi professional in RTOS and embedded systems programming ( all things you may find in the net about esp32 mining projects refer to a toy like projects )

      i hope this turn lighting right way

Leave a Reply

Your email address will not be published. Required fields are marked *

Captcha loading...