Please let me know if I understand something wrong.
Let's say I want to create a new block and verify previous transactions. To do this, I need to:
- Choose which transactions I want to include in my block
- Calculate the Merkle Root of these transactions
- I choose (?) a timestamp where I expect to 'create' this block (Is this a general concensus?)
- I start to calculate hashes by concatenating above values and starting at nonce 0, increasing up to 2^32-1
- When I find a hash with enough zeros, I announce my proof to the network and collect my fee
There's one problem here: there is no way to guarantee a solution exists. Since I expect mining pool members to all agree what transactions to include and which timestamp to use, it can be possible that for the given block no solution exists.
Of course, other miners also experience this problem. What if all 'big' miners choose blocks which do not have any solution? Could the network stall?