RE: proxy post further above
Basically what a proxy does is act like a normal miner to the pool.
The simple version of it is:
It adds to the size of coinbase1 and subtracts from the size the miner is allowed to use between coinbase1 and coinbase2
i.e. if it used 1 byte, it could send different work to 256 miners - each one would be given coinbase1 with X appended, coinbase2, and with the size between them now 1 byte smaller.
Each miner would, of course, get a unique X.
What this also means is that you will average 18 shares per minute between your proxy and the pool - even if you have 256 miners.
(of course the proxy can break it larger to 2 bytes=65536 miners, 3 bytes=16777216 miners etc)
So network load between you and the pool is lower with a proxy - it can be the equivalent of a single miner even if you have many thousands of miners.
How this looks in stratum would be:
From Pool to ProxyWhen the proxy first connects to the pool, the pool tells it your ID and the enonce size
From then on you use those 2 for all work.
So work arrives like so:
{"params":["aabbccdd00001122","a83fb5dc201c2a484569c0cbba8b5b8e2e524e38002e4c590000000000000000",
"01000000010000000000000000000000000000000000000000000000000000000000000000fffff
fff3603eebf0700042c11795a049cbb5
e180c",
"0a2ef09f90882e12204b616e6f506f6f6c20283d4f2e4f3d2920ffffffff02a6507b55000000001
976a914370c9767eeb3f6add88c207733b7ff2e920622c888ac0000000000000000266a24aa21a9
ed73a4cfcddaecfbc3f77505bccccdc8ff4d13cdda8fd7d06347b61b68f48ac1d900000000",
["743b249690334d20a53686ee75981af35cbc2325e03e0114d8a3e19f98f14d37",...],
"20000000","176c2146","5a79112c",false],"id":null,"method":"mining.notify"}
From Proxy to miner XXWhen the miner connects to the proxy it would get the same ID but with a shorter enonce value (1 shorter if configured for 256 miners)
Then each time the proxy gets work from the pool, it sends it to each miner with each miner's unique XX value.
{"params":["aabbccdd00001122","a83fb5dc201c2a484569c0cbba8b5b8e2e524e38002e4c590000000000000000",
"01000000010000000000000000000000000000000000000000000000000000000000000000fffff
fff3603eebf0700042c11795a049cbb5
e180cXX",
"0a2ef09f90882e12204b616e6f506f6f6c20283d4f2e4f3d2920ffffffff02a6507b55000000001
976a914370c9767eeb3f6add88c207733b7ff2e920622c888ac0000000000000000266a24aa21a9
ed73a4cfcddaecfbc3f77505bccccdc8ff4d13cdda8fd7d06347b61b68f48ac1d900000000",
["743b249690334d20a53686ee75981af35cbc2325e03e0114d8a3e19f98f14d37",...],
"20000000","176c2146","5a79112c",false],"id":null,"method":"mining.notify"}
The difference in the work is only the
XX that's been added (and of course the initial connection being told the enonce is 1 byte smaller)
This means each miner is mining something different, but based off the same single work item.