I need to generate a random number for betting games. Is this pattern safety solution?
mapping(uint => address) playerMapping;
address[] players;
// here is contract will save block.number of player
function bet() {
...
playerMapping[block.number] = msg.sender;
players.push(playerMapping[block.number]); // blockhash(block.number) will be unknown at this stage
...
}
// this function will called by bot
function reveal(uint blockNumber) {
...
uint random = blockhash(blockNumber);
...
}
push(playerMapping[block.number])
, and to make it worse, ignored theplayerMapping
(so I figured that the list of random numbers was just a list of block numbers).