Pool mining centralization is a serious issue. Some think this can be solved by changing the reward system (Multi PPS as an example), or by finding an ASIC resilient hash function (no known good candidate).
I would like to discuss the option of changing the protocol to prevent pool mining.
I have an idea to start with, please say what you think of it. My suggestion is to add to the header, two new fields:
- A bitcoin public address, which owns some minimal amount M of BTCs
- A signature of the header (excluding, of-course, this field - the signature itself) using the private key corresponding to the above public address
EDIT: Pay attention to the fact that the hash is computed on all of the header - including the above added signature field.
In addition, the mining reward should be automatically given to the above public address, and transactions involving this address as input shall be forbidden in this block (to prevent a more sophisticated share distributions).
Adding these two fields, at least naively, should prevent pool mining, since in order to mine a block, you must know the private key corresponding to the rewarded public address. (I think it could work also with M=0, but I think M>0 makes it much riskier to use any trust-based pool)
P.S. I recognize the need in pool mining (mining reward variance etc.), but I think such issues can be solved by decreasing the block time substantially (to, say, 1 second, instead of 10 minutes, using GHOST).