是否可以使用Solidity创建不可预测的随机数



我最近一直在研究这个话题,大多数资源都说不可能在链上生成随机数。然而,我看到一个帖子说,这个函数可以生成一个不可预测的数字。有什么方法可以预测这个函数吗?

function rand() public view returns(uint256) {
uint256 seed = uint256(keccak256(abi.encodePacked(
block.timestamp + block.difficulty +
((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)) +
block.gaslimit + 
((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)) +
block.number
)));
return (seed - ((seed / 1000) * 1000));
}

有什么方法可以预测这个函数吗

矿工可以用符合其他标准的timestamp发布他们的区块number

  • difficulty给出了一段时间
  • coinbase被给予更长的时间
  • msg.sender(真正的交易发送者和签名者(可以是矿工的地址之一

没有办法在链上生成真正不确定的随机数。但您可以使用一个返回链外生成的";"随机";数字