Today I would like to introduce new system for calculating round rewards. Currently the "share based" system calculate user's round reward as
reward = user shares / total shares * 50 (fees and donations are not calculated here for simplicity)
which gives the oportunity for cheating by switching between more pools (or between pool and "solo mining"). For further reading please follow paper written by Raulo
and also read history of this thread.
Thanks to Cosurgi and Raulo, I implemented new, "cheat proof" strategy for calculating reward. Basic idea is that older shares (from beginning of the round) has lower weight than newer shares, which demotivate cheater from switching between pools inside one round. Once cheater disconnect from pool, his submitted shares lose value, so he cannot perform "Raulo's attack" effectively.
Matematically said, for every submitted share, pool perform
score = score + exp(round_time/C)round_time
is count of seconds between "now" and time when round started, C
is magic constant which define how fast old shares lose their value. All following calculations are using C=300, but it may be changed in the future to provide the best cheatproof/usability ratio.
And on the end of round, system calculate rewards using formula
reward = user score / total score * 50Question: I'm honest miner, how it affect my mining in the pool?
In longer time, this does not affect you at all. In shorter time, this introduce some bigger variance in daily rewards. When "solo mining" has the biggest possible variance and "share based" pool has the lowest possible variance, "score based" system is something between, but it is extremely close to "share based" system.
To be even more specific, your reward variance depends on two factors: your hashrate and your uptime on pool. Higher uptime in pool and higher hasrate leads to more steady pool payouts.Model 1:
If you're slow miner and have only few shares in hour, you may be unlucky and submit your shares to fresh rounds. In this case, all of your shares will have very low score which lead to low round rewards. But in longer time, it is very unlikely that you submit shares everytime to fresh rounds. In the other case, if you are lucky, you can hit share near the round end and your round reward can be much higher than average, which compensate your bad luck in previous rounds.
Better said, with few shares per hour, you probably never find the block mining standalone, so you should not care that your daily reward does not perfect fit your theoretic reward. It is very unlikely that you will be unlucky every day.Model 2:
You're quite strong miner, but you're disconnecting from pool frequently, because you play games, crack passwords using your GPU or anything else. Also in your case the round rewards can have bigger variance, because the score based system is pointing exactly this case. Pool don't know that you're disconnecting because you want to play games or because you're trying to peform switching attack. Simply said, it will be everytime better to disconnect from pool when next round begins. But even when you disconnect inside round, you never lose more than "expected round reward", of course. Still, even with random disconnects, your daily reward for longer time should be very similar as in share based system.
I gathered some statistics for score based system in last days and Cosurgi was so kind and prepared some nice graphs."line number" on x-axis show pool participants sorted by count of submitted shares. On the left side are the strongest miners, on the righ side are CPU miners.
The graph above shows absolute reward for every participant for score based and share based systems. You see that common miners have almost no difference. Last ~60 slowest miners have bigger difference in rewards in percentages, but we're talking mostly about less than Bitcoin cents (see exponential scale on y-axis). One lucky round for those slow miners is enough to get more steady payout, which is very likely in longer time period.
Those three miners with extremely big difference between score and share systems in the middle of the graph were extremely unlucky in disconnecting from the pool or (more likely) people who were using Raulo's attack. If this is true, it is not real problem for current pool participants, as their total rewards are only in few bitcoins for whole period of stats.
This second graph shows how variance is going down with more submitted shares. As you see, there is big variance for people submitted tens of shares in total (those stats are for more than four days of pool uptime!), but with rising count of shares, it become more steady as everybody has the same chance to hit good and also bad times for share submits.
The last graph shows variance in % for pool participants. That means, that strong miner can expect +- few percents of daily rewards and the slowest one +- 20 % of daily rewards. This is still extremely better than mining solo. Please keep in mind that those differences in daily rewards will be only temporary, in longer time average it will be the same as original share based system
and you probably never hit such small variance in daily rewards without some kind of pool. Also don't forget that this change is necessary to show pool stats back again and keep you, honest miners, safe.If there won't be any important reason to not start counting rewards this way, I'll start score based system tomorrow. I'll also publish pool stats without delays, as little compensation for bigger variance in the pool.
And again, big thanks to Cosurgi (long talks on IRC and nice stats in gnuplot) and Raulo (models for cheater's reward with and without score based system).