Created
March 17, 2024 13:29
-
-
Save LuPoYi/eef84458e0ae6b788d17af789d72c3fc to your computer and use it in GitHub Desktop.
Sepolia Chainlink VRFv2Consumer
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// SPDX-License-Identifier: MIT | |
// An example of a consumer contract that relies on a subscription for funding. | |
pragma solidity ^0.8.7; | |
import "@chainlink/contracts/src/v0.8/interfaces/VRFCoordinatorV2Interface.sol"; | |
import "@chainlink/contracts/src/v0.8/VRFConsumerBaseV2.sol"; | |
contract VRFv2Consumer is VRFConsumerBaseV2 { | |
VRFCoordinatorV2Interface COORDINATOR; | |
// Your subscription ID. | |
uint64 s_subscriptionId; | |
// see https://docs.chain.link/docs/vrf-contracts/#configurations | |
address vrfCoordinator = 0x8103B0A8A00be2DDC778e6e7eaa21791Cd364625; | |
// The gas lane to use, which specifies the maximum gas price to bump to. | |
// For a list of available gas lanes on each network, | |
// see https://docs.chain.link/docs/vrf-contracts/#configurations | |
bytes32 keyHash = | |
0x474e34a077df58807dbe9c96d3c009b23b3c6d0cce433e59bbf5b34f823bc56c; | |
// Depends on the number of requested values that you want sent to the | |
// fulfillRandomWords() function. Storing each word costs about 20,000 gas, | |
// so 100,000 is a safe default for this example contract. Test and adjust | |
// this limit based on the network that you select, the size of the request, | |
// and the processing of the callback request in the fulfillRandomWords() | |
// function. | |
uint32 callbackGasLimit = 100000; | |
// The default is 3, but you can set this higher. | |
uint16 requestConfirmations = 3; | |
// For this example, retrieve 2 random values in one request. | |
// Cannot exceed VRFCoordinatorV2.MAX_NUM_WORDS. | |
uint32 numWords = 2; | |
uint256[] public s_randomWords; | |
uint256 public s_requestId; | |
address s_owner; | |
constructor(uint64 subscriptionId) VRFConsumerBaseV2(vrfCoordinator) { | |
COORDINATOR = VRFCoordinatorV2Interface(vrfCoordinator); | |
s_owner = msg.sender; | |
s_subscriptionId = subscriptionId; | |
} | |
// Assumes the subscription is funded sufficiently. | |
function requestRandomWords() external onlyOwner { | |
// Will revert if subscription is not set and funded. | |
s_requestId = COORDINATOR.requestRandomWords( | |
keyHash, | |
s_subscriptionId, | |
requestConfirmations, | |
callbackGasLimit, | |
numWords | |
); | |
} | |
function fulfillRandomWords( | |
uint256 /* requestId */, | |
uint256[] memory randomWords | |
) internal override { | |
s_randomWords = randomWords; | |
} | |
modifier onlyOwner() { | |
require(msg.sender == s_owner); | |
_; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment