I'm implementing a bitcoin CPU miner just for fun in python. I've been reading a lot about bitcoin and the protocol pools use for communication and coordinating workers but there is a key concept I haven't explicitly found.
The problem (Stratum v1)
Jobs keep coming to the worker(which I store in a FIFO), and provided
clean_jobs is set to
false, when should I get to the next job? With
extranonce, and version and time rolling seems like I would never need to change job(even with the fastest of ASICs). Or is it that once I found a share for a given job I must submit that only one share and proceed to the next job?
Once a share is found for a given job, should I keep mining it? Until when? Or should I submit that only one share for that job and proceed to the next job?
I'm guessing it is the latter, as the server can adjust the difficulty to prevent me from finding shares too fast(or too slow)
I would appreciate it if you added a source if possible(so I can learn more and see what else I've missed).