I'm trying to understand how the whole process flows. Here's how I currently understand it working.

Mining client -> Pool server -> Bitcoind


  • Mining client calls getwork from Pool server, and it in turn calls getwork (or something else?) from Bitcoind.


  • Mining client ingages the Pool server using the stratum protocol, and the Pool server calls getwork (or something else?) from Bitcoind.


  • Mining client calls getblocktemplate, and the Pool server calls getblocktemplate from Bitcoind.

And I understand that the pool server does more than just relay information, but I wanted to keep it simple. I just want to get a grasp of how it all flows together, and what calls it makes.

Any help is greatly appreciated!

1 Answer 1


getwork is for all intents, completely deprecated due to it's inefficiency. At this point a single ASIC device can completely swamp a bitcoind with requests as they're able to exhaust the 32bit nonce in a fraction of a second. The situation is severe enough that pools like BTC Guild have extraordinary large (6%+) fees on clients using getwork in order to get them to switch to more efficient methods.

Internally, pools like Eloipool use getblocktemplate to generate work for the clients, and then use stratum or getblocktemplate to communicate with the workers depending on the request type they make. getwork is not involved at any stage. In fact, it's currently pegged for complete removal at some point.

  • So, Eloipool is pretty much relaying the same getblocktemplate they receive from bitcoind?
    – xil3
    Sep 21, 2013 at 22:38
  • From looking at jsonrpc_getblocktemplate.py, I would say so.
    – Anonymous
    Sep 21, 2013 at 23:28
  • Thanks again. I would up-vote you, but I don't have enough points.
    – xil3
    Sep 22, 2013 at 5:13

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.