pragma solidity ^0.4.0;
contract sushu{
function rand(uint256 _length) public view returns(uint256) {
uint256 random = uint256(keccak256(abi.encodePacked(block.difficulty, now)));
return random%_length;
}
function getx() public view returns(uint,uint,uint){
uint [] x;
for(uint i = 0;i < 3;i++){
x.push(rand(256));
}
return (x[0],x[1],x[2]);
}
}
block.difficulty, now都是取得你send交易时,那笔交易所在区块的数据,now是出块时间,所以getx函数虽然调取了三次rand,结果确是一样的。
补充:公链上的时间概念不是一般的时间戳,而时区块高度来计时的,所以即使你循环了,但还是在同一个块中