I used to like SMPPS, but its potential vulnerability to withholding attacks doesn't give me tons of confidence in its long-term sustainability.
I completely agree. In fact, it's various flaws is what lead one of our members (TheSeven) to devise a reward system inspired by luke-jr's SMPPS, but hardened against various known attacks. We've been refearing to this new system as ESMPPS, or
Equalized SMPPS. TheSeven can probably do it better justice than I can, but essentially it is SMPPS but differs in how it repays shares it's obligations when reserve funds are less than it's total obligations.
We feel that this new reward system will help ensure fair payment for all miner's based on their shares submitted. With this change to ESMPPS we will also be paying out on invalid blocks.
We are currently working on writing the implementation of this new system, and will have more information about our intended roll out date once it's implemented and fully tested. We will, for sure, be rolling it out at the beginning of a new round, so there will be no worries about dual reward system during a round.
Despite us loving this solution, we are still wanting to hear everyone thoughts on this transition. Hopefully TheSeven can chime in and elaborate on the reward system itself in greater detail.
ESMPPS basically tries to pay (nearly) the same reward to all shares, no matter when they were found, whether you had a downtime, or whatever. Except for plain PPS with its rather obvious flaws, it seems to be the system with the lowest variance.
Shares and blocks will be completely decoupled in this system. The pool keeps track of all shares that have not been fully paid yet.
If you find a share, the pool will add it to a list of shares which have been paid 0% so far. If the pool currently has reserves from past short rounds, the shares will be paid immediately. Otherwise it will wait for a block to confirm, and once this happens, it will pick the shares that have been paid to the least percentage, and use the funds from the block to pay them more.
This means that it will first pay the shares from the current round (as these will be at 0% payout at this point) to the same degree as the least-paid previous shares. If there are still funds left after that, it will select those previous shares as well and pay them some more as well, and so on.
While, during an unlucky streak, this means that you might only be paid like 50% of the shares' value when the next block confirms, their payout will retroactively increase once the pool has more luck. This should in most cases happen within 2 to 10 rounds, and if everything works right, they should be around 97% of what plain PPS would have paid for them after that.
Regular 43% pool hopping won't increase your reward at all with this system. There is a new kind of hopping algorithm for ESMPPS that does work, but it would only increase your payout from ~97% to ~99%, so it's probably not worth the effort. During a discussion with various pool operators we also figured out a somewhat bulletproof way to detect (and ban) withholders, so they won't ruin the party either.
Finally, here's an example that shows the differences between SMPPS and ESMPPS:
Assumptions: The pool has fully paid all previous shares, there are currently no reserves, and we are at difficulty 1000000 (just an example). The pool currently has bad luck, and finds one block after 2000000 shares, and another one further 1800000 shares later.
SMPPS: The pool will first pay 50% of the shares of the first round, and transfer the second half of them to the next round. So the shares of the second round will be paid 36%, including the transferred ones. So the shares of the first round will end up with 68% payout, the shares of the new round with 36%.
ESMPPS: The pool will first pay 50% of the shares of the first round. After the next block, it will have 1.8m zero-paid shares, which will be considered first. As the lowest past payout is 50%, and there are enough funds to reach that level, they will be paid 50% as well. Now there are 5BTC left, which will be distributed to all shares in the least-paid category. After distributing those, the shares of both rounds will have been paid 52.6%.
If the pool now finds two lucky blocks in a row with just 200000 shares each, the payout ratios will look like this (skipping the math here):
SMPPS: After the third round: Round 1 shares: 84.1%, Round 2 shares: 68.2%, Round 3 shares: 50.2%
After the fourth round: Round 1 shares: 98.5%, Round 2 shares: 97.0%, Round 3 shares: 94.9%, Round 4 shares: 83.9%
ESMPPS: After the third round, all shares will have been paid 75.0%. After the fourth round, all shares will have been paid 95.2%.
For longer unlucky streaks, SMPPS can go down way below 1% payment for new shares, sustained thorugh several rounds, which would effectively kill the pool as nobody would want to mine under these conditions, even if it's known that it will recover one day. ESMPPS is much less vulnerable to this: Simulations showed it to always pay at least 7%, and it never dropped below 20% for more than five rounds in a row.
If there are withholders, they will further enlarge the SMPPS payout queue, so new shares will be paid even less, and this will never recover. This is no disincentive for withholders because they will have the last shares that will have been paid adequately, and it makes it really easy for them to kill the pool. For ESMPPS the same behavior will just decrease the payout ratio by about 1%, which is much less likely to kill the pool.