Randomness is derived from on-chain values (blockhash, block.timestamp, block.prevrandao, msg.sender). These are predictable or miner/validator-influenceable, so attackers can compute or bias outcomes (lotteries, NFT traits, games).
// Chainlink VRF: request randomness, use fulfillRandomWords callback
function fulfillRandomWords(uint256, uint256[] memory words) internal override {
winner = participants[words[0] % participants.length];
}
The SaferICO scanner runs 201 detectors over your Solidity source, SAFE-0042 among them. Paste an address or the source itself — a small per-scan fee, shown before you sign, or unlimited on any plan.