Hello. I'm new and I haven't read the entire thread. I apologize if this has been answered already. I don't know how to search for anything that has been said previously about this. I probably haven't understood how pooled mining works exactly.
I've downloaded jgarzik's cpu-miner program, and I see this code in the simple scanhash_c:
uint32_t *hash32 = (uint32_t *) hash;
uint32_t *nonce = (uint32_t *)(data + 12);
uint32_t n = 0;
unsigned long stat_ctr = 0;
while (1) {
n++;
*nonce = n;
... etc ...
So, `n' starts from 0 and the `nonce' is set to the value of `n'. I think the rest of the algorithms are like this too. Does that mean that all clients who receive this particular "work" struct will attempt to compute hashes with `nonce' values starting from 0? If so, then this sounds like unnecessary duplication of effort.
Unless I am missing something... Maybe the `nonce' in the `data' that is the result of the `getwork' RPC call is pre-filled with some value and the client is supposed to attempt a fixed number of nonces from that value on (and cpu-miner doesn't support this?).