Well, perhaps, but those hoppers didn't do the sometimes 4 hours of processing on the server that we did in order to get a shot at a fresh block.
While we're slaving away at calculating that hash...they're off trying to get more than their due many other places.
Anyway, I can solve the problem with a relative degree of ease.
You create another class of shares called 'loyalty shares'. You create a number of shares equal to the estimated share count at 5 minutes with current has power.
You distribute loyalty shares proportional to the payouts on your last block.
So...
Two things...
1) Pool hoppers would be fucked. (their margins would be reduced to tatters. If they happend to hop in on a 2 pool that closed in 2 minutes, their share would be super miniscule due to the loyalty shares.
2) It would ease attrition on long length blocks because folks wouldn't get the loyalty shares if they bailed.
This way... instead of your most loyal folks getting shafted in short rounds, we'd end up doing the best.
I'll explain it to you like you're a five year old... we'll see if that helps.
Ok, jimmy... you see it's like there is a really tough puzzle that has to be figured out and when it is, everyone gets paid a portion of the total work for their efforts.
But there are some bad kids, jimmy. These kids have figured out that if they only help right at the beginning, statistical averages mean that they will earn ~(this means approximately)20% more than by working on every puzzle till its done.
You see sometimes the puzzles take a long long time and are very difficult. So by focusing only on brand new puzzles, they increase their chances of hitting a lucky one.
So instead, we're going to calculate a certain number of points that are a different class than the points you earn. These points will be used to calculate your share and they will be based upon the amount you worked on the LAST puzzle.
This way, when bad kids want to play at your puzzle, since he wasn't there for the last puzzle, he won't make any money and he'll cry. This is because when you add up the loyalty points and earned points, while the total scores amongst all the players that play every round will be proportionally equivalent , the bad kids score will be less. If it is a very short round, it will be much less.
That way everyone that likes working hard will make more money!
Isn't that great jimmy? Now run along and stop being such a fucking idiot.
I've looked at proposed
(edit: non-provably fair) payout systems before, and none have done anything to prevent pool hopping at a proportional pool - some reduce hopper margins, some just make hopping more work and some make things actually better for hoppers while making the payout system seem fair. I haven't seen any that work as simply as pplns or as well as DGM. So when I see a new proposed payout system, I'm interested. To be honest, I'm expecting it to fail, but I can't sure until I simulate it and I'm always happy to be proven wrong.
So, let me make sure I have this right:
1. loyaltyShares <- sum(totalSubmittedShares for a given 5 minute period)
2. minerShareProportion <- minerSubmittedShares/totalSubmittedShares
3. minerPayout <- (minerSubmittedShares(this round) + minerShareProportion(last round)*loyaltyShares)/totalSubmittedShares(this round) * 50btc
So my question is, what is the assumed pool hashrate? Why use '5 minutes' as your share amount rather than (say) 0.1*D? If you're ok with using a fixed share amount instead or a fixed proportion of difficulty, then let me know.