<p><code>getwork</code> is for all intents, completely deprecated due to it's inefficiency. At this point a single ASIC device can completely swamp a <code>bitcoind</code> 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 <code>getwork</code> in order to get them to switch to more efficient methods. </p>

<p>Internally, pools like <a href="https://gitorious.org/bitcoin/eloipool/">Eloipool</a> use <code>getblocktemplate</code> to generate work for the clients, and then use <code>stratum</code> or <code>getblocktemplate</code> to communicate with the workers depending on the request type they make. <code>getwork</code> is not involved at any stage. In fact, it's currently <a href="https://github.com/bitcoin/bitcoin/pull/2905">pegged for complete removal</a> at some point. </p>

CC BY-SA 3.0
2013-09-21T22:38:38.200Z
So, `Eloipool` is pretty much relaying the same getblocktemplate they receive from bitcoind?
xil3
CC BY-SA 3.0
2013-09-21T23:28:33.110Z
From looking at `jsonrpc_getblocktemplate.py`, I would say so.
Anonymous
CC BY-SA 3.0
2013-09-22T05:13:21.920Z
Thanks again. I would up-vote you, but I don't have enough points.
xil3
CC BY-SA 3.0
2013-09-21T21:16:03.730Z
2013-09-21T21:16:03.730Z
Anonymous
<p>I'm trying to understand how the whole process flows. Here's how I currently understand it working.</p>

<blockquote>
  <p>Mining client -> Pool server -> Bitcoind</p>
  
  <p><code>getwork</code>:</p>
  
  <ul>
  <li>Mining client calls <code>getwork</code> from Pool server, and it in turn calls <code>getwork</code> (or something else?) from Bitcoind. </li>
  </ul>
  
  <p><code>stratum</code>:</p>
  
  <ul>
  <li>Mining client ingages the Pool server using the stratum protocol, and the Pool server calls <code>getwork</code> (or something else?) from
  Bitcoind.</li>
  </ul>
  
  <p><code>getblocktemplate</code>:</p>
  
  <ul>
  <li>Mining client calls <code>getblocktemplate</code>, and the Pool server calls <code>getblocktemplate</code> from Bitcoind.</li>
  </ul>
</blockquote>

<p>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.</p>

<p>Any help is greatly appreciated!</p>

<bitcoind><mining-pools><getwork><stratum><getblocktemplate>
Do pool servers communicate with bitcoind, and in what capacity?
xil3
# Do pool servers communicate with bitcoind, and in what capacity?

(Asked by: username_0 on 2013-09-21)

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

> Mining client -> Pool server -> Bitcoind
>
> `getwork`:
>
> * Mining client calls `getwork` from Pool server, and it in turn calls `getwork` (or something else?) from Bitcoind.
>
> `stratum`:
>
> * Mining client ingages the Pool server using the stratum protocol, and the Pool server calls `getwork` (or something else?) from
>   Bitcoind.
>
> `getblocktemplate`:
>
> * 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!

**Tags:** bitcoind, mining-pools, getwork, stratum, getblocktemplate


---

## 1 answers

### Answer by username_1 on 2013-09-21. Score: 6 | Accepted answer

`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](https://gitorious.org/bitcoin/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](https://github.com/bitcoin/bitcoin/pull/2905) at some point.

> **Comments:**
> **username_0**: So, `Eloipool` is pretty much relaying the same getblocktemplate they receive from bitcoind?  
> **username_1**: From looking at `jsonrpc_getblocktemplate.py`, I would say so.  
> **username_0**: Thanks again. I would up-vote you, but I don't have enough points.  

---

