我最近一直在研究这个话题,大多数资源都说不可能在链上生成随机数。然而,我看到一个帖子说,这个函数可以生成一个不可预测的数字。有什么方法可以预测这个函数吗?
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
(真正的交易发送者和签名者(可以是矿工的地址之一
没有办法在链上生成真正不确定的随机数。但您可以使用一个返回链外生成的";"随机";数字