All gaming requires RNGs if there is any form of incomplete information. All wagering games require incomplete information. (Otherwise there is nothing to wager on). If anyone is curious why you can't just use a block hash as RNG the problem is timing. While the first random # can be used off the hash, you can't get a 2nd unknown RNG until a new hash is found. Furthermore all player decisions must be finalized before the random number is selected. These constraints really screw with the experience.
So what we need is a RNG generator that can give us actionable random numbers at the requested rate.
This can be done, but has to be done in a centralized controlled manner.
The reason is that in gaming, you simply can not let a player have any way of knowing the future random #s. If the RNG generator is distributed, then all bets are off. So it has to be generated in a centralized service. The other option is to create random numbers in a distributed manner, but that requires some sort of complicated consensus protocol. Consensus and responsive are 2 things that go against each other. So I decided that you need a centralized RNG generator in order to move things along.
This RNG DAC does a few things.
1) Creates an auditable log of the stream of random numbers and can prove that they are indeed random.
2) Allows the request of random numbers at various intervals.
3) Is not distributed, so that players can not peak under the hood.
#2 is critical. A lotto game that does not have as much of a timing requirement can grab a random number from the next block. This won't work with interactive games. And you can't send a seed # and read from it sequentially as the player would be able to then predict future numbers. Each random number has to come from a host in an atomic manner.
I would prefer some sort of distributed RNG generator that is auditable, demonstrably random, and can service number requests with little latency. I suspect that is a very hard problem to solve and needs some serious thought.
So until we have this cloud based RNG, this is what I am proposing and wish someone would implement.
So here are the actors in this.
RNGHost
Gaming block chain
Client
RNGHost publishes a hash of a random number (secret key) and which block it goes with. This has to be a valid transaction recorded on the blockchain. When this block occurs, we use the blockhash + secret key for the seed value of the RNG. After this every gaming random number will be requested from this server. These will be placed in a blockchain transaction for auditing/confirmation. After a new block is chosen, the secret key is then published and a different previous secret key is chosen.
There is one attack that I am aware of and that is that the person hosting the the random number service could use it to rob the gaming services. In that regard centralization is better because it lowers the number of actors who can steal. In addition with 1 RNG host, it can be easily DOS'd. Forks are also a big issue. Even by confirming the random number genesis, it still leaves the RNG creations to be lost in a fork. I am not sure how that is handled. I guess the player just deals with the timewarp of their fortunes.
Thoughts? Are there plans for anything like this ? Is my idea not going to fit into the bitshares world ? It isn't anything brilliant, but it addresses an issue that is sorely lacking if Bitshares wants to attract a gaming market.
I'd like to see gaming blossom under Bitshares. Due to the RNG problem I just don't see it happening. I am not that familiar with the architecture behind Bitshares so maybe this whole idea is unworkable.
Regardless, please comment on this.