solidity为什么返回的三个值都是一样的

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,结果确是一样的。

补充:公链上的时间概念不是一般的时间戳,而时区块高度来计时的,所以即使你循环了,但还是在同一个块中