I've had an idea about being able to utilize effectively random #s on tezos, but I don't know if it's totally stupid and impossible to utilize, or a possible and really simple solution:
I need to preface this with the fact that I am more monkey than coder, but I do have some experience with visual coding and have read some books on C.
Would it be possible to have a smart contract that when invoked, adds 1 (or what-have-you) to the chaotic subset of the mandelbrot set zn+1 = zn2 + c (or any formula with a chaotic subsection of results) and returns the result to the sender?
You could have a second contract that runs on its own (utilizing the same mandelbrot set formula, except running each block possibly?) to invoke the first RNG contract with a pseudorandom #.
You'd have a "pseudo-randomized" contract invoking another "pseudo-randomized" contract that can also be invoked by anyone looking to gain a new random number from it. It seems like if you have enough "pseudo-randomness" layers mixed with decentralized behaviors, then it starts to become ridiculous for bad actors to manipulate or predict the output.
Maybe the math could be done in a way where you could do this for multiple contracts that anyone could invoke to do get specific ranges of randomized numbers. 1-10, 1-100, 1-1000, etc.
I don't know how to logistically create or test this, but from what I'm researching, utilizing quality randomness seems to be a difficulty on-chain. In my mind, using contracts removes the need for an oracle, but I could be totally off. Maybe there's something here to spark an idea in one of your more code-experienced brain machines!