繁体   English   中英

使用 Chainlink VRF 获取随机数

[英]Getting a random number with Chainlink VRF

我正在尝试使用 Chainlink VRF 为抽奖系统生成一个随机数。 此数字的最大值应为ticketOwners.length ,最小值为 0,因为我将获取数组的索引以选择获胜者。

我目前有这段代码,它在调用 getRandomNumber() 时返回uint256: 0 除了此代码的漏洞外,我只是在寻求有关生成此数字的帮助。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

import "https://github.com/smartcontractkit/chainlink/blob/develop/contracts/src/v0.8/VRFConsumerBase.sol";

contract Random is VRFConsumerBase {
    bytes32 internal immutable keyHash;
    uint256 internal immutable fee;
    uint256 public immutable ticketPrice;

    uint256 public result;
    address payable[] public ticketOwners;

    constructor (
        address _ChainlinkVRFCoordinator,
        address _ChainlinkLINKToken,
        bytes32 _ChainlinkKeyHash,
        uint256 _ticketPrice
    ) VRFConsumerBase (
        _ChainlinkVRFCoordinator,
        _ChainlinkLINKToken
    ) {
        keyHash = _ChainlinkKeyHash;
        fee = 0.1 * 10 ** 18;
        ticketPrice = _ticketPrice;
    }

    function enterRaffle() public payable {
        require(msg.value >= ticketPrice, "Invalid ticket price");
        ticketOwners.push(payable(msg.sender));
    }

    function getRandomNumber() public returns (bytes32 requestId) {
        require(LINK.balanceOf(address(this)) >= fee, "Not enough LINK - fill contract with faucet");
        return requestRandomness(keyHash, fee);
    }

    function fulfillRandomness(bytes32 requestId, uint256 randomness) internal override {
        result = randomness;
    }
}

您可能为参数使用了不正确的地址。 Chainlink 有两个主要变体。 由于您使用的是VRFConsumerBase ,这是 VRf V1,您可以从此处获取地址。 我把那些用于 goerli:

link address           = 0x326C977E6efc84E512bB9C30f76E30c160eD06FB
key hash               = 0x0476f9a745b61ea5c0ab224d3a6e4c99f0b02fce4da01143a4f70aa80ae76e8a

ChainlinkVRFCoordinator= 0x2bce784e69d2Ff36c71edcB9F88358dB0DfB55b4

部署合约后,您必须向合约发送链接令牌,因为您需要支付您设置的fee参数。 链接令牌水龙头

您按下getRandomNumber按钮,您需要等待一分钟。 然后你的result值被设置

这是证明工作:

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM