From this article I understand that randomness can only be secured by
External oracles
Signidice
Commit–reveal approach
However, in the case that I am okay to have a pseudo random number generator which is manipulatable by miners. What would be the best approach to still "secure" it, in terms of make it most expensive for a malicious user to manipulate?
Are there any other factors I can use except:
block.coinbase represents the address of the miner who mined the current block.
block.difficulty is a relative measure of how difficult it was to find the block.
block.gaslimit restricts maximum gas consumption for transactions within the block.
block.number is the height of current block.
block.timestamp is when the block was mined.
block.blockhash(block.number), which is the blockhash of the current block.
block.blockhash(block.number - 1), which is the blockhash of the last block.
block.blockhash() of a block that is at least 256 blocks older than the current one.