pragma solidity ^0.4.24; contract Random { uint256 private entropyBlockNumber; uint256 constant OFFSET = 2; uint256 constant NO_OF_LAST_HASHES_KNOWN = 256; constructor() public { entropyBlockNumber = block.number + OFFSET; } function play() public view returns (string) { if (randomNumberSmallerThan(100) == 42) { return "You win!"; } else { return "You lose!"; } } function randomNumberSmallerThan(uint256 limit) public view returns (uint256) { return uint256(somethingRandom()) % limit; } function somethingRandom() public view returns (bytes32) { require ( block.number > entropyBlockNumber, "Cannot use it yet" ); require ( block.number < entropyBlockNumber + NO_OF_LAST_HASHES_KNOWN , "Too late" ); return blockhash(entropyBlockNumber); } }
0.4.24