There are a few issues with this system though, specifically as it comes to "stale" work. If somebody has a share being paid in the current coinbase, and a new piece of work comes out where their work has been pushed off the payment list, they could purposely remain mining the old work (as long as the block itself isn't stale). While this can be prevented by making it so their new submissions are considered stale as far as the pool is concerned, they would still get their reward if they solved a block.
No different than if they were solo mining and claimed the full 25 BTC...
As long as you don't credit stale shares (from the pool's perspective), nobody is hurt.
Ah, good point. They would be gambling on solving a block before the network does, and if they're going to make that gamble they might as well just mine an entire block for themselves. Time change+a few late nights must be taking their toll on my early morning thinking skills.
In the rest of this post, I will be making reference to "super shares". This is a term for grouping up multiple share submissions at a lower difficulty into a single share that is "big enough" to be put into the list of payments in the next block.
Building off my earlier post, the "5000 super shares" list of users that would get paid on the next block solve is flexible in that it could be altered to be a specific multiple of difficulty, just like PPLNS allows N to be changed to either increase or decrease the window being used. By lumping share credit into "super shares", you can define a super share as any "difficulty sum". Miners would continue to work at smaller difficulties like they always have in pooled mining. Upon reaching the "super share" threshold, they enter the list of addresses to be paid the next time the block updates, and push off the oldest address in that list.
My earlier example of 5000 super shares at 8m diff each would be equivalent to PPLNS where 'N' = network difficulty. If it was modified to the current pool setting, it would be closer to 32m diff per "super share", which would be 'N' = 4x network difficulty.
EDIT: Just to clarify, "5000" is just an example where the minimum payment a user would receive is 0.005. This wouldn't actually create a huge coinbase tx (in terms of data size). There would not actually be 5000 addresses being paid in the coinbase. Very fast users would be have multiple super shares in the list. The fastest user on BTC Guild at this time would be 450-500 of the 5000 super shares paid in each block.
If you can figure out how to do this in a manner that is TNO (trust no one), then I think you'll be on to something. Otherwise, who's to prevent a pool op from putting whatever supershares he wants on the share chain?
One of the great things about p2pool is the TNO principle. Everything everyone does can be, and is verified on the share chain. The chain itself contains the payout data, and you get on it by submitting a big enough share.
Your idea is similar to the one I had. My suggestion was to have lower the share size significantly so that small miners can get on. That means one of the basic principles of p2pool has to change: work has to stop restarting every time a share is added to the chain. Instead, like conventional pools, work restarts when a block is found on the BTC chain. At that point all the nodes use a predetermined algorithm to gather up all the shares since the last block, bundle them together into a "payout" share, and add it to the payout chain. (That means two chains.) That way the TNO principle still applies ... every node can independently verify both chains. Worker data (coinbase?) is based upon the data in the payout chain, so when a block share is submitted, payout happens properly. Note this also means the current round doesn't count towards payout.
There may be something I'm overlooking here, but that's the basic principle.
M