Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Solidity Chainlink VRF:can';不能得到一个随机数组_Solidity_Chainlink - Fatal编程技术网

Solidity Chainlink VRF:can';不能得到一个随机数组

Solidity Chainlink VRF:can';不能得到一个随机数组,solidity,chainlink,Solidity,Chainlink,我正在尝试编辑此演示: 获取具有ramdom编号的数组 pragma solidity 0.6.6; import "https://raw.githubusercontent.com/smartcontractkit/chainlink/master/evm-contracts/src/v0.6/VRFConsumerBase.sol"; contract RandomNumberConsumer is VRFConsumerBase { bytes3

我正在尝试编辑此演示: 获取具有ramdom编号的数组

pragma solidity 0.6.6;

import "https://raw.githubusercontent.com/smartcontractkit/chainlink/master/evm-contracts/src/v0.6/VRFConsumerBase.sol";

contract RandomNumberConsumer is VRFConsumerBase {
    
    bytes32 internal keyHash;
    uint256 internal fee;
    uint256 public randomResult;
    
    constructor() VRFConsumerBase(
            0xdD3782915140c8f3b190B5D67eAc6dc5760C46E9, // VRF Coordinator
            0xa36085F69e2889c224210F603D836748e7dC0088  // LINK Token
        ) public
    {
        keyHash = 0x6c3699283bda56ad74f6b855546325b68d482e983852a7a82979cc4807b641f4;
        fee = 0.1 * 10 ** 18; // 0.1 LINK
    }
    

    function getRandomNumber(uint256 userProvidedSeed) public returns (bytes32 requestId) {
        return requestRandomness(keyHash, fee, userProvidedSeed);
    }

    function fulfillRandomness(bytes32 requestId, uint256 randomness) internal override {
        randomResult = randomness.mod(50).add(1);
    }
    
    function getDraw(uint256 userProvidedSeed) public returns(uint256[] memory) {
         uint256[] memory draw = new uint256[](5);
         
         for(uint i = 0; i < 5; i++) {
             draw[i] = getRandomNumber(userProvidedSeed);
         }
         return draw;
    }
}
pragma-solidity 0.6.6;
进口”https://raw.githubusercontent.com/smartcontractkit/chainlink/master/evm-contracts/src/v0.6/VRFConsumerBase.sol";
合同随机数消费者为VRFConsumerBase{
字节32内部密钥散列;
uint256内部费用;
uint256公开随机结果;
构造函数()VRFConsumerBase(
0xdD3782915140c8f3b190B5D67eAc6dc5760C46E9,//VRF协调器
0xa36085F69e2889c224210F603D836748e7dC0088//链路令牌
)公开的
{
keyHash=0x6c3699283bda56ad74f6b855546325b68d482e983852a7a82979cc4807b641f4;
费用=0.1*10**18;//0.1链接
}
函数getRandomNumber(uint256 userProvidedSeed)公共返回(bytes32 requestId){
返回请求随机性(keyHash、fee、userProvidedSeed);
}
函数实现随机性(字节32请求ID,uint256随机性)内部重写{
随机结果=随机性。模(50)。加(1);
}
函数getDraw(uint256 userProvidedSeed)公共返回(uint256[]内存){
uint256[]内存绘制=新uint256[](5);
对于(uint i=0;i<5;i++){
draw[i]=getRandomNumber(userProvidedSeed);
}
回采;
}
}
我得到这个错误: 契约/随机数。sol:33:24:TypeError:Type bytes32不能隐式转换为预期的类型uint256。draw[i]=getRandomNumber(userProvidedSeed)^-------------------------------^


我做错了什么?

您不能将字节32转换为uint256

您的
draw
数组是
uint256
s的数组
getRandomNumber
返回一个
字节32

在这一行:

draw[i] = getRandomNumber(userProvidedSeed);
您正在将
draw[i]
设置为
bytes32
draw[i]
需要是一个
uint256
getRandomNumber(userProvidedSeed)
返回一个
bytes32

见:

您可能想做的是在
fulfillrandomness
函数中进行绘图,因为它看起来像是您想要做的:

draw[i] = randomResult;

无法将字节32转换为uint256

您的
draw
数组是
uint256
s的数组
getRandomNumber
返回一个
字节32

在这一行:

draw[i] = getRandomNumber(userProvidedSeed);
您正在将
draw[i]
设置为
bytes32
draw[i]
需要是一个
uint256
getRandomNumber(userProvidedSeed)
返回一个
bytes32

见:

您可能想做的是在
fulfillrandomness
函数中进行绘图,因为它看起来像是您想要做的:

draw[i] = randomResult;
getRandomNumber()
返回
bytes32
,但您正试图将此值分配给
uint256

您需要先将
字节32
强制转换为
uint256

draw[i] = uint256(getRandomNumber(userProvidedSeed));

注意:
requestRandomness()
返回请求ID,而不是实际的随机数。因此,如果您想从oracle中获取实际的5个随机数,则不能同步执行。您还需要更新
fulfillRandomness()
randomResult
以存储多个值。

getRandomNumber()
返回
bytes32
,但您正在尝试将此值分配给
uint256

您需要先将
字节32
强制转换为
uint256

draw[i] = uint256(getRandomNumber(userProvidedSeed));

注意:
requestRandomness()
返回请求ID,而不是实际的随机数。因此,如果您想从oracle中获取实际的5个随机数,则不能同步执行。您还需要更新
fulfillRandomness()
randomResult
以存储多个值