I've been researching mining pools to figure out how they assign work to miners. I understand that pool would get a job from the blockchain they only has a header, dag, difficulity, probably block number. From what I have been reading, a mining pool suppose to take that job, magically create new jobs, that has different headers, from that and give to other miners so there aren't any duplicate work. I have read open ethereum mining pool but saw nothing of this nature (I only learnt go a few days ago so I'm no expert here). I've only seen something being done with height. My question is, how does a mining pool create multiple job headers from getting one job from the blockchain? Is there any code I can look at those does this? I assume, each job has a different start to the nonce. Also, is this magic possible with regular getwork protocol, both stratum getwork and non stratum?