The solution is built in. Pay people to generate and pay them even more if transactions pile up.
Yep, assuming block generation reward won't decrease, and that the bitcoin economy will be very liquid with lots of transactions...
In my view, if bitcoin gains momentum and credibility, most transactions will take place inside dedicated services (some BTC bank credits the merchant account while charging the customer for example) and won't be going inside a block.
"Mandatory" generation is silly since people who don't want to generate will just close it and like it less since it's annoying. Not to mention that anyone can write a client that doesn't do it automatically anyway.
I don't really see how suggesting that a program, running in the background, and taking 10% CPU on really low priority is a silly idea. If 20% of the people actually close it, 80% will just click the cross, send it in the task bar and help secure the network without even knowing it. As long as the fan doesn't go nuts and my desktop remains responsive I personnaly don't care about 10% CPU more or less. So I'd be really interested in some elaboration on the sillyness of this idea.
And when I'm speaking about mandatory, I'm obviously speaking about the default widespread client, not about what the protocol should enforce.
- There seem to be lots of solutions around that address the disk space problem
It's possible for non-generators to store almost nothing. However, the purpose of the network is to verify that transactions are not double-spending, and this is only possible if the generators know all of the current unspent transactions.
Why would a generator need to check for double spending ? Actually, a client needs more disk space than a generator.
The only thing a "pure" generator needs is the hash of the previous block whereas a client that receives payments needs to actually check for double spending, be it with a trusted balance sheet or with the complete block chain.
So that's a non-issue.
EDIT : Well I guess a generator needs to check for double-spending when including incoming transactions, but that doesn't really change much since that could be solved with balance sheets, simply by network rejection of blocks that contain invalid transactions after they've been generated, or by a much smarter solution =) I didn't think of.