{"params": [0.032768], "id": null, "method": "mining.set_difficulty"}
{"error": null, "id": 1, "result": true}
{"params": [1.572864], "id": null, "method": "mining.set_difficulty"}
{"params": ["9a12", "0ba33752363c1a2ebf6c2304a0a0b9c54397b3db081e297a0013b53e00000000", "0100000027b5c253010000000000000000000000000000000000000000000000000000000000000 000ffffffff1f0245050435b5c25308", "0d2f7374726174756d506f6f6c2f000000000100203d88792d000023210305f73d52e4778d2a584 727c5cad357d544151df9addb44ca41fd668fec9dfe44ac00000000", [], "00000006", "1b23ab19", "53c2b527", true], "id": null, "method": "mining.notify"}
As you can see, Ipominer first sends low diff, then high. Claiming that other software works fine is pointless here. Your stratum should NOT do what it did, under any circumstances.
EDIT: Using past tense, because we applied temporary fix to get rid of this case.
In fact, this problem can *only* happen if the proxy is reversing the order.
Sending low then high would not be a problem for miners. The miners would get some share is above target messages because it would be holding some low difficulty shares in its local queue. Then it would start submitting higher difficulty shares.
In this case, the miner thinks the difficulty is set to the high level, but the pool thinks it's set to the low level. This can *only* happen if the proxy is reversing the order.
Yes, it would be all okay, if pool considered shares being only over 1.572864. But it turned out, that it considered shares to be over 0.032768. Our proxy sent only shares above 1.572864, and only few of them were sent (due to being high and rare to be discovered) which resulted in low speed on the pool.
Yes, and the only way this can happen is if the pool and the miner are confused about which is the current difficulty. And the only way that can happen is if the order of the set_difficulty commands is being changed by the proxy.
How could it be? This is what we got from Ipominer - in order as I posted. And you will get same order with the short example program I posted, if you don't believe me (unless they fixed it by now).
That obviously isn't the case, since the only way for the situation to happen in the first place is if the order is getting reversed by the proxy. The pool remembers the last difficulty set and credits shares based on that.
The print I showed is dump from Wireshark - what was sent from Ipominer pool. There was no reversing made by proxy, proxy only read that data. Obviously pool "messed" which diff was sent lastly. If you split subscription and authorization into 2 packets (make some delay between sending them), then the order of delegated diffs is high then low. Please, try the short example I provided and you will see it with your own eyes what happens if you don't believe me.