A couple months ago I talked to maaku about mining pool centralization and possible avenues to reduce it. Here's the problem:
Pools have an incentive to co-locate because it reduces the time to download blocks from each other, during which they need to SPV mine an empty block. Right now mining pools don't suffer a major penalty by not co-locating, but this penalty will increase as the subsidy shrinks and would get worse if the block size were to be increased.
Let's assume that SPV mining empty blocks is not a sufficient long-term solution. Full-block mining currently requires that miners download and verify the previous block, so they know which new transactions may be included.
BUT, what if we prohibit transactions which use outputs from the previous block? Miners would then be able to SPV mine a full block using only the header of the previous block, certain that it's valid.
Possible attack vectors: an evil miner could either
- Upload a header for an invalid block, or
- Upload a header but not upload the whole block
This unfortunately adds the annoyance of being unable to receive and spend your coins in adjacent blocks, but you could still do so within the same block. My hope is that coin control could make this limitation less of a problem until lightning channels do away with the issue entirely.
What are your thoughts, technically-minded bitcoiners? Could this work as-is to promote pool decentralization? Is there something you would change to make it better? Is it only worthwhile once low subsidy and/or block size make pool centralization a larger problem? Any input would be greatly appreciated.