Again on this "true randomization" issue. In general, what amount of randomization is desirable, i.e., how often should it happen? If not very often (e.g., several times a day), then the real world will take care of this (because nodes go online and offline, money are transferred, etc.).
I agree. I wrote the following to CfB:
If this is not enough, then the following procedure is possible. First X accounts (w.r.t. the inverse weights) choose some "random" numbers locally, and publish their hashes. X is supposed to be large enough so that the bad guy would never control exactly all of them. Then, they publish numbers themselves; if the published number does not correspond to the hash or is not published at all, then the corresponding account is heavily penalized. If that happens for at least one account, the whole procedure is invalidated (and we wait for the next try)..
The problem here still is: who belongs to X
if one of X is offline and who decides that? It is the very same consensus finding problem that block generation tries to solve.
Well, with our forging procedure we obtain a consensus about who are the best X account w.r.t. the inverse weights, right (and the network then delegates to the best of the best the right to create the next block)? Then we just ask those best accounts to provide a random number for us. The idea is that if there is at least one "honest" guy among them, then this random number will be "truly random", even if all the others try to cheat.
The problem is not on the side of the forgers. It is on the side of the one that uses the random numbers. Which numbers does he choose? More importantly, which numbers does he omit and which ones does he include in his calculation?
Assume, he finds a way to exclude everything but one number, he can then pre-calculate an account that provide a suitable random number for him in the future. It is the very same problem.
Btw. invalidating the whole procedure would lead to abusing this exit mechanism: a bad guy could pre-calculate an account that yields an error in the procedure.
The random number provided by this procedure is supposed to be known to everyone (say, from time to time we insert it to the blockchain) and used to "break" the determinism.
The random numbers the accounts provide cannot be precalculated, they are just outputs of
rand() or smth similar. In principle, there should not be any "errors" in the procedure: the account first publishes the hash, and then (if required) the number itself. The error can only appear if the guy is deliberately cheating; but, in this case, he doesn't get nothing for it: his account is banned, and the procedure is repeated after some time.
I'm writing this now in a more detailed way; will post the new version of the paper by tomorrow.