I've been thinking about the pool mining issues that have been brought up recently, here's my idea - hopefully some experts can chime in and let me know if it's viable.
People mine in pools because it allows a much finer measure of hashing power so that they can make money with smaller rigs. If that was just built into the main chain then they wouldn't have to do that - an attempt to pool mining resources would clearly be spotted as an attempt at a centralized 51% attack.
Here's what I propose:
-> Keep the main chain as it is - the target difficulty is a block every 10 minutes.
-> Allow people to work on smaller problems, say a block every minute instead. These blocks are found, but aren't allowed to verify transactions. All they do is append to the last block as a fork, adding difficulty weight to the block chain as well as publicly recording who found that block. Other 1-minute blocks are allowed on top of this 1-minute block.
-> Allow another step of granularity as well - say a 6-second block generation time. These blocks can be appended to any 10-minute block or any 1-minute block.
-> Once a smaller-time block fork is created, only blocks of that time or smaller are allowed to be appended to that fork.
Advantages:
1) Public record of hashing power so that payout for each main block can be divided among the hashing power without needing a centralized server.
2) Block-tree. I can't remember when but an article was once posted about using a blocktree structure instead with the orphaned blocks because it adds weight to the block-chain, which reduces the chance of a 51% attack. The effect is two-fold: Smaller miners have less incentive to join a pool because they can get payouts without doing so AND now the blocktree is growing much more rapidly in weight because the smaller miners are contributing directly to the weight rather than only contributing a block every 10 minutes through a pool.
Disadvantages:
Blocktree size: The blocktree would grow MUCH more rapidly. I think this sort of thing implemented would require pruning of the tree. Perhaps we can make the 100x faster contributions much smaller? Base them on a different hashing technique or something?
Other ideas:
Instead of waiting for the 10-minute blocks to grab up the last 10 minutes of transactions, wrap them up in every 1 minute block. This allows people to verify their transactions quicker (though doesn't provide much additional security). Just wait for the 10-minute blocks to pay out incentives (transaction fees and such) for the last 10 minutes based on the current 10-minute block generated + all the non-10-minute blocks from the last 10-minute block. You could have something that indicates "You have x 1-minute verifications and y 10-minute verifications" where the 10-minute ones are obviously much better. This allows people to decide in a finer manner how secure they want their transaction to be.
Questions:
Would it be good to allow mining of 1-minute blocks off ANY previous 10-minute block? Could be, but not very practical, because then you have to search the entire previous blocktree for newer blocks just to pay out incentives. To make people migrate to the newest block being mined, provide incentives by ONLY paying out incentives on that block and sub-trees of it.
The entire success of Bitcoin seems to rely on all the game-theory involved in it's build - people have incentive to do well by the network. Let's try to think of a way to use game theory to eliminate the problems that come up too! (Queue sports montage or something - but with programming and talking
)
Please refer to the reddit thread too to see other discussions about this (maybe issues you'll bring up as well):
http://www.reddit.com/r/Bitcoin/comments/1v9gp5/removing_the_incentive_to_mine_in_pools/