I've been lurking for awhile, and this is my first post, which apparently has to be in a newbie section.
I like the stratum protocol, and I like anonymous pools like eligius.
But with a fast miner, it would be nice not to have to do a start-up dance on the share difficulty, and it would be really nice to be able to dynamically raise or lower difficulty based on adding/removing hardware, without the pool's involvement.
If the miner sets the difficulty higher than the pool would otherwise require, the miner might be artificially increasing his own variance, but that is not a problem of the pool. If the miner sets the difficulty lower than the pool would otherwise require, then obviously that's a problem for the pool, and the pool can (as it does right now) give the miner a minimum difficulty and ignore shares with a difficulty that is too low.
I know that with some pools that require registration, such as slush's pool, the miner can request a difficulty using out-of-band information, but AFAIK there is no in-band way for the miner to set a minimum difficulty or to explain that the miner's conditions have changed.
There are two parts to this proposal. The first part requires a mechanism, either upon subscribe or upon some other request from the client, for the pool to give information to the client that the client is allowed to set a minimum difficulty. I am agnostic about how this is accomplished, but it would be nice if the pool could also describe a target submission rate during the process.
The second part is that, once the client has established that the pool will let it define the difficulty, the client needs to start sending shares of the client's defined difficulty. Again, I am agnostic about how this should proceed, but the client needs to be able to prove to the pool that it is, in fact, targeting a higher difficulty -- otherwise, the client could cheat.
So, for the second part, one way that this could work is that, when the miner is defining its own difficulty, it adds one or two extra bytes at the start of extranonce2. The simple existence of these extra two bytes shows that the miner is defining his own difficulty. A possible encoding for the difficulty would be byte1 * (2 ** byte2), which would let the miner fine-tune his difficulty quite nicely. He could even change it for every submission.
This part of the proposal makes it impossible for the miner to cheat. If there are two extra bytes in extranonce2, and the hash difficulty is greater than the user-defined hash difficulty, then the user did, in fact, generate that hash when he was looking for hashes of that difficulty or greater.
And if the miner's submit rate is below the rate that the pool is targeting, then the share should be accepted.