I think this is an important facet of the conversation.
If it doesn't make economic sense - the idea is DOA.
I seem to remember some conversation some time ago about making p2pool mandatory, or at least de-facto standard, for BTC.
CLAM is in a unique position where the number of stakeholders is relatively small in comparison.
If p2pool was built-in to the client and the mandatory process of staking, everyone would be on an even playing field - regardless of potential economic issues.
It has been years since I last looked at p2pool, but from what I remember, it works like this:
Centralised pools: Mining is hard. You need to find a block which hashes less than a very low target, T. Traditional mining pools allow people to work together by giving them easier work to do: the members of the pool are asked to find blocks which hash to less than a higher target, 1000*T (say). This is 1000 times easier, and so happens about 1000 times more often than the pool finds blocks. Each time a member solves one of these easier blocks, it reports it to the pool as proof that it is trying. The pool makes sure that the reward is going to the pool's addresses, counts up how many of these easy blocks (called 'shares') each member solves, and when someone does eventually solve a real block the pool splits the reward to the members in some way based on their history.
Problem: the centralised pools get big, and end up threatening the network. The pools decide which transactions to include in the blocks which gives the pool operator the power to double spend. The members also have to trust that they actually will distribute the rewards fairly, and so on. All the usual problems with centralisation.
p2pool: In the same way that Bitcoin decentralised currency by the use of a blockchain, p2pool does the same for mining pools. Instead of a central mining pool tracking how many shares each miner has accumulated, there is a blockchain which tracks it. It's entirely separate from the Bitcoin blockchain. A new block is added to the chain each time a miner solves a share. Each miner checks the last N blocks in the sharechain, calculates how much of the block reward should go to each miner, and sets the coinbase accordingly. When a miner receives a new share from a peer, he will check the coinbase of the share to make sure that the peer is distributing the coins correctly. If so, the share will be added to the chain. Eventually one of the shares will also be an actual Bitcoin block, and once broadcast all the miners who solved any of the last N shares will be paid.
I don't see anything there that couldn't be made to work with CLAM. Some thoughts:
1) p2pool removes the need for a central pool by having the coinbase in each share pay out the block reward to all the contributing miners. CLAM has a rule that staking transactions must pay out to the same address as they come from. But upon further investigation this is only enforced for the first output. It's possible to make
this kind of staking transaction which pays to two different addresses. And so it should be possible to pay to as many addresses as we like, so long as each miner pays themselves first.
2) The whole reason p2pool is being discussed with respect to CLAM is that it is thought to be a way of decentralising things, and getting rid of the "orphan" problem. The orphan problem is that JD orphans a lot of other people's staked blocks. JD has 75% of the staking weight, and there are only 4 chances to stake per minute (due to the 16 second granularity). When a non-JD staker finds a block, there's a 1/4 * 75% = 3/16 chance that JD finds a block in the same timeslot. And there's a 75% chance that JD will find the next block too. In the event that two stakers find a block in the same timeslot, each miner considers their own block to be the valid one, and attempts to stake the next block on top of it, so if JD finds the next block it orphans the other miner's block. So that's a 9/64 chance that any non-JD block is orphaned by JD. That's 14%.
That's too many, and so can p2pool help fix that? I'm not sure, but it seems to me that instead of orphaning 14% of blocks on the CLAM blockchain, JD will orphan 14% of shares on the sharechain. And the end result will be the same.
Is that right? If so, is this even worth pursuing?