August 2019
Intermediate to advanced
486 pages
13h 52m
English
In the Solidity language, there are two globally available variables: block.timestamp and now. Both are aliases and are used to get the timestamp when the block is added to the blockchain. The timestamp is in Unix epoch time in seconds. This timestamp is set by the miner when solving the Proof-of-Work (PoW) puzzle. The timestamp of the new block must be greater than the timestamp of the previous block. However, the miner can manipulate the timestamp.
If your contracts need random numbers, you should not use block.timestamp or now, as these can be manipulated by miners. Consider the following example:
// Bad Practicefunction random() public view returns (uint){ bytes32 hash = keccak256( abi.encode(blockhash(block.number), ...