I don't understand how your proposal would prevent pool mining.
The pool creates the header, puts their address in there, and sign it. Then they send it out to the "miners" to search for the hash.
When a "miner" solves the block, the pool broadcasts the block and gets paid. Then in a later block, they split up the payment among all the participants.
What am I missing? Is there something implied in your description that I didn't notice?
You're missing the fact that the nonce and the merkle root are part of the header, so the pool manager cannot sign the header without counting over all nonces himself.
Ah, I see what you are suggesting now. Unfortunately, it wouldn't stop pooled mining at all. All it would do is create a financial barrier to entry for small miners.
All the pool needs to do is:
- Require a deposit from every participating miner that is at least as large as the largest blockreward
- Issue each miner their own private key that the pool knows about.
Then the pool can monitor the blockchain to see if any coinbase transactions go to any of the addresses that were issued by the pool. If so, the miner will be expected to allow the pool to split the reward up among the participants. If the miner tries to "steal" the reward, then they forfeit their deposit (which will be split up among the pool participants).
You don't even need that. In order for the individual miner to prove the pool it is doing work, it may require it to proof that it is doing work in a form that each block it produced contain transaction to pay to the pool manager. If the miner tries to cheat the pool, it will not get the pool rewards.