Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 3,426 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Mint | 20149589 | 135 days ago | IN | 0 ETH | 0.00005736 | ||||
Mint | 20145356 | 135 days ago | IN | 0 ETH | 0.00006371 | ||||
Mint | 20145339 | 135 days ago | IN | 0 ETH | 0.00006371 | ||||
Mint | 20145181 | 135 days ago | IN | 0 ETH | 0.00006371 | ||||
Mint | 20144880 | 135 days ago | IN | 0 ETH | 0.00009556 | ||||
Mint | 20144880 | 135 days ago | IN | 0 ETH | 0.00009411 | ||||
Mint | 20144880 | 135 days ago | IN | 0 ETH | 0.00006371 | ||||
Mint | 19849315 | 177 days ago | IN | 0 ETH | 0.00009567 | ||||
Mint | 19836964 | 178 days ago | IN | 0 ETH | 0.00018336 | ||||
Mint | 19836963 | 178 days ago | IN | 0 ETH | 0.0000956 | ||||
Mint | 19836963 | 178 days ago | IN | 0 ETH | 0.0000941 | ||||
Mint | 19836963 | 178 days ago | IN | 0 ETH | 0.0000941 | ||||
Mint | 19836934 | 178 days ago | IN | 0 ETH | 0.0000941 | ||||
Mint | 19829069 | 180 days ago | IN | 0 ETH | 0.00009567 | ||||
Mint | 19750103 | 191 days ago | IN | 0 ETH | 0.00012747 | ||||
Mint | 19749895 | 191 days ago | IN | 0 ETH | 0.00012756 | ||||
Mint | 19749856 | 191 days ago | IN | 0 ETH | 0.00012747 | ||||
Mint | 19749856 | 191 days ago | IN | 0 ETH | 0.00012756 | ||||
Mint | 19749135 | 191 days ago | IN | 0 ETH | 0.00020423 | ||||
Mint | 19749135 | 191 days ago | IN | 0 ETH | 0.00020423 | ||||
Mint | 19749135 | 191 days ago | IN | 0 ETH | 0.00020423 | ||||
Mint | 19749135 | 191 days ago | IN | 0 ETH | 0.00015946 | ||||
Mint | 19749135 | 191 days ago | IN | 0 ETH | 0.00020423 | ||||
Mint | 19749135 | 191 days ago | IN | 0 ETH | 0.00017234 | ||||
Mint | 19749135 | 191 days ago | IN | 0 ETH | 0.00017234 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
WhitelistV1
Compiler Version
v0.8.9+commit.e5eed63a
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.7; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol"; import "@chainlink/contracts/src/v0.8/interfaces/LinkTokenInterface.sol"; import "@chainlink/contracts/src/v0.8/interfaces/VRFCoordinatorV2Interface.sol"; import "@chainlink/contracts/src/v0.8/VRFConsumerBaseV2.sol"; abstract contract NftContract { function mint( address to, uint256 tokenId, uint8 width, uint8 height ) external virtual; } contract WhitelistV1 is VRFConsumerBaseV2, Ownable { // Chainlink params VRFCoordinatorV2Interface public COORDINATOR; LinkTokenInterface public LINKTOKEN; uint256[] private randomSeedList; uint64 public subscriptionId; bytes32 public keyHash; uint256 public requestId; struct Whitelist { uint8 width; uint8 height; uint16 seedOffset; uint16 currentSupply; uint32 startTime; uint32 endTime; bytes32 merkleRoot; } mapping(uint256 => Whitelist) public whitelistList; // whitelistId to whitelist struct mapping(uint256 => uint16[]) private whitelistTokenList; // whitelistId to token id array mapping(uint256 => mapping(address => bool)) public minted; // [whitelistId][address] = false address immutable nftContractAddress; // nft contract event RandomWordsReceived(uint256 length); event WhitelistCreated( uint256 listId, uint32 startTime, uint32 endTime, uint8 width, uint8 height, bytes32 merkleRoot ); event WhitelistUpdated(uint256 listId, uint32 startTime, uint32 endTime); event Mint(address to, uint256 tokenId, uint256 listId); constructor( address _nftContractAddress, uint64 _subscriptionId, address vrfCoordinator, address linkTokenAddress, bytes32 _keyHash ) VRFConsumerBaseV2(vrfCoordinator) { nftContractAddress = _nftContractAddress; subscriptionId = _subscriptionId; COORDINATOR = VRFCoordinatorV2Interface(vrfCoordinator); LINKTOKEN = LinkTokenInterface(linkTokenAddress); keyHash = _keyHash; } modifier isActive(uint256 listId) { Whitelist memory whitelist = whitelistList[listId]; require(whitelist.startTime <= block.timestamp, "Session not started"); require(whitelist.endTime >= block.timestamp, "Session ended"); _; } function setKeyHash(bytes32 _keyHash) external onlyOwner { keyHash = _keyHash; } function generateRandomWords(uint32 numWords) external onlyOwner { uint256[] memory randomWords = new uint256[](numWords); uint256 random; for (uint32 i = 0; i < numWords; i++) { random = uint256( keccak256(abi.encodePacked(random, block.difficulty, block.timestamp)) ); randomWords[i] = random; } fulfillRandomWords(0, randomWords); } function requestRandomWords(uint32 numWords, uint32 callbackGasLimit) external onlyOwner { // Will revert if subscription is not set and funded. requestId = COORDINATOR.requestRandomWords( keyHash, subscriptionId, 3, //requestConfirmations callbackGasLimit, numWords ); } function createWhitelist( uint256 listId, uint8 width, uint8 height, uint16 seedOffset, uint32 startTime, uint32 endTime, bytes32 merkleRoot, uint16[] calldata tokenList ) external onlyOwner { require( tokenList.length <= randomSeedList.length * 16, "Insufficient random seeds" ); require(whitelistList[listId].width == 0, "listId exists"); require(width > 0 && height > 0, "Incorrect width or height"); whitelistList[listId] = Whitelist( width, height, uint16(listId + seedOffset), 0, startTime, endTime, merkleRoot ); whitelistTokenList[listId] = tokenList; shuffleTokenList(listId); emit WhitelistCreated( listId, startTime, endTime, width, height, merkleRoot ); } function updateWhitelistStartTime(uint256 listId, uint32 _startTime) external onlyOwner { whitelistList[listId].startTime = _startTime; emit WhitelistUpdated( listId, whitelistList[listId].startTime, whitelistList[listId].endTime ); } function updateWhitelistEndTime(uint256 listId, uint32 _endTime) external onlyOwner { whitelistList[listId].endTime = _endTime; emit WhitelistUpdated( listId, whitelistList[listId].startTime, whitelistList[listId].endTime ); } function mint(uint256 listId, bytes32[] calldata proof) external isActive(listId) { require(msg.sender == tx.origin, "Contract interaction not allowed"); require(verifyProof(listId, msg.sender, proof), "Invalid merkle proof"); require(!minted[listId][msg.sender], "Already minted"); minted[listId][msg.sender] = true; uint256 tokenId = drawRandomTokenId(listId); NftContract nftContract = NftContract(nftContractAddress); Whitelist memory whitelist = whitelistList[listId]; nftContract.mint(msg.sender, tokenId, whitelist.width, whitelist.height); emit Mint(msg.sender, tokenId, listId); } function getRandomSeedListLength() external view returns (uint256) { return randomSeedList.length * 16; } function verifyProof( uint256 listId, address who, bytes32[] calldata proof ) public view returns (bool) { bytes32 leaf = keccak256(abi.encodePacked(who)); return MerkleProof.verify(proof, whitelistList[listId].merkleRoot, leaf); } function fulfillRandomWords( uint256, /* requestId */ uint256[] memory randomWords ) internal override { for (uint256 i = 0; i < randomWords.length; i++) { randomSeedList.push(randomWords[i]); } emit RandomWordsReceived(randomWords.length); } function shuffleTokenList(uint256 listId) internal { uint16[] storage tokenList = whitelistTokenList[listId]; for (uint16 i = 0; i < tokenList.length; i++) { uint256 seedIndex = ((i + whitelistList[listId].seedOffset) / 16) % randomSeedList.length; uint256 random = uint16(randomSeedList[seedIndex] >> (i % 16)) % tokenList.length; (tokenList[i], tokenList[random]) = (tokenList[random], tokenList[i]); } } function drawRandomTokenId(uint256 listId) internal returns (uint256) { whitelistList[listId].currentSupply += 1; return whitelistTokenList[listId][whitelistList[listId].currentSupply - 1]; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface LinkTokenInterface { function allowance(address owner, address spender) external view returns (uint256 remaining); function approve(address spender, uint256 value) external returns (bool success); function balanceOf(address owner) external view returns (uint256 balance); function decimals() external view returns (uint8 decimalPlaces); function decreaseApproval(address spender, uint256 addedValue) external returns (bool success); function increaseApproval(address spender, uint256 subtractedValue) external; function name() external view returns (string memory tokenName); function symbol() external view returns (string memory tokenSymbol); function totalSupply() external view returns (uint256 totalTokensIssued); function transfer(address to, uint256 value) external returns (bool success); function transferAndCall( address to, uint256 value, bytes calldata data ) external returns (bool success); function transferFrom( address from, address to, uint256 value ) external returns (bool success); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface VRFCoordinatorV2Interface { /** * @notice Get configuration relevant for making requests * @return minimumRequestConfirmations global min for request confirmations * @return maxGasLimit global max for request gas limit * @return s_provingKeyHashes list of registered key hashes */ function getRequestConfig() external view returns ( uint16, uint32, bytes32[] memory ); /** * @notice Request a set of random words. * @param keyHash - Corresponds to a particular oracle job which uses * that key for generating the VRF proof. Different keyHash's have different gas price * ceilings, so you can select a specific one to bound your maximum per request cost. * @param subId - The ID of the VRF subscription. Must be funded * with the minimum subscription balance required for the selected keyHash. * @param minimumRequestConfirmations - How many blocks you'd like the * oracle to wait before responding to the request. See SECURITY CONSIDERATIONS * for why you may want to request more. The acceptable range is * [minimumRequestBlockConfirmations, 200]. * @param callbackGasLimit - How much gas you'd like to receive in your * fulfillRandomWords callback. Note that gasleft() inside fulfillRandomWords * may be slightly less than this amount because of gas used calling the function * (argument decoding etc.), so you may need to request slightly more than you expect * to have inside fulfillRandomWords. The acceptable range is * [0, maxGasLimit] * @param numWords - The number of uint256 random values you'd like to receive * in your fulfillRandomWords callback. Note these numbers are expanded in a * secure way by the VRFCoordinator from a single random value supplied by the oracle. * @return requestId - A unique identifier of the request. Can be used to match * a request to a response in fulfillRandomWords. */ function requestRandomWords( bytes32 keyHash, uint64 subId, uint16 minimumRequestConfirmations, uint32 callbackGasLimit, uint32 numWords ) external returns (uint256 requestId); /** * @notice Create a VRF subscription. * @return subId - A unique subscription id. * @dev You can manage the consumer set dynamically with addConsumer/removeConsumer. * @dev Note to fund the subscription, use transferAndCall. For example * @dev LINKTOKEN.transferAndCall( * @dev address(COORDINATOR), * @dev amount, * @dev abi.encode(subId)); */ function createSubscription() external returns (uint64 subId); /** * @notice Get a VRF subscription. * @param subId - ID of the subscription * @return balance - LINK balance of the subscription in juels. * @return reqCount - number of requests for this subscription, determines fee tier. * @return owner - owner of the subscription. * @return consumers - list of consumer address which are able to use this subscription. */ function getSubscription(uint64 subId) external view returns ( uint96 balance, uint64 reqCount, address owner, address[] memory consumers ); /** * @notice Request subscription owner transfer. * @param subId - ID of the subscription * @param newOwner - proposed new owner of the subscription */ function requestSubscriptionOwnerTransfer(uint64 subId, address newOwner) external; /** * @notice Request subscription owner transfer. * @param subId - ID of the subscription * @dev will revert if original owner of subId has * not requested that msg.sender become the new owner. */ function acceptSubscriptionOwnerTransfer(uint64 subId) external; /** * @notice Add a consumer to a VRF subscription. * @param subId - ID of the subscription * @param consumer - New consumer which can use the subscription */ function addConsumer(uint64 subId, address consumer) external; /** * @notice Remove a consumer from a VRF subscription. * @param subId - ID of the subscription * @param consumer - Consumer to remove from the subscription */ function removeConsumer(uint64 subId, address consumer) external; /** * @notice Cancel a subscription * @param subId - ID of the subscription * @param to - Where to send the remaining LINK to */ function cancelSubscription(uint64 subId, address to) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** **************************************************************************** * @notice Interface for contracts using VRF randomness * ***************************************************************************** * @dev PURPOSE * * @dev Reggie the Random Oracle (not his real job) wants to provide randomness * @dev to Vera the verifier in such a way that Vera can be sure he's not * @dev making his output up to suit himself. Reggie provides Vera a public key * @dev to which he knows the secret key. Each time Vera provides a seed to * @dev Reggie, he gives back a value which is computed completely * @dev deterministically from the seed and the secret key. * * @dev Reggie provides a proof by which Vera can verify that the output was * @dev correctly computed once Reggie tells it to her, but without that proof, * @dev the output is indistinguishable to her from a uniform random sample * @dev from the output space. * * @dev The purpose of this contract is to make it easy for unrelated contracts * @dev to talk to Vera the verifier about the work Reggie is doing, to provide * @dev simple access to a verifiable source of randomness. It ensures 2 things: * @dev 1. The fulfillment came from the VRFCoordinator * @dev 2. The consumer contract implements fulfillRandomWords. * ***************************************************************************** * @dev USAGE * * @dev Calling contracts must inherit from VRFConsumerBase, and can * @dev initialize VRFConsumerBase's attributes in their constructor as * @dev shown: * * @dev contract VRFConsumer { * @dev constructor(<other arguments>, address _vrfCoordinator, address _link) * @dev VRFConsumerBase(_vrfCoordinator) public { * @dev <initialization with other arguments goes here> * @dev } * @dev } * * @dev The oracle will have given you an ID for the VRF keypair they have * @dev committed to (let's call it keyHash). Create subscription, fund it * @dev and your consumer contract as a consumer of it (see VRFCoordinatorInterface * @dev subscription management functions). * @dev Call requestRandomWords(keyHash, subId, minimumRequestConfirmations, * @dev callbackGasLimit, numWords), * @dev see (VRFCoordinatorInterface for a description of the arguments). * * @dev Once the VRFCoordinator has received and validated the oracle's response * @dev to your request, it will call your contract's fulfillRandomWords method. * * @dev The randomness argument to fulfillRandomWords is a set of random words * @dev generated from your requestId and the blockHash of the request. * * @dev If your contract could have concurrent requests open, you can use the * @dev requestId returned from requestRandomWords to track which response is associated * @dev with which randomness request. * @dev See "SECURITY CONSIDERATIONS" for principles to keep in mind, * @dev if your contract could have multiple requests in flight simultaneously. * * @dev Colliding `requestId`s are cryptographically impossible as long as seeds * @dev differ. * * ***************************************************************************** * @dev SECURITY CONSIDERATIONS * * @dev A method with the ability to call your fulfillRandomness method directly * @dev could spoof a VRF response with any random value, so it's critical that * @dev it cannot be directly called by anything other than this base contract * @dev (specifically, by the VRFConsumerBase.rawFulfillRandomness method). * * @dev For your users to trust that your contract's random behavior is free * @dev from malicious interference, it's best if you can write it so that all * @dev behaviors implied by a VRF response are executed *during* your * @dev fulfillRandomness method. If your contract must store the response (or * @dev anything derived from it) and use it later, you must ensure that any * @dev user-significant behavior which depends on that stored value cannot be * @dev manipulated by a subsequent VRF request. * * @dev Similarly, both miners and the VRF oracle itself have some influence * @dev over the order in which VRF responses appear on the blockchain, so if * @dev your contract could have multiple VRF requests in flight simultaneously, * @dev you must ensure that the order in which the VRF responses arrive cannot * @dev be used to manipulate your contract's user-significant behavior. * * @dev Since the block hash of the block which contains the requestRandomness * @dev call is mixed into the input to the VRF *last*, a sufficiently powerful * @dev miner could, in principle, fork the blockchain to evict the block * @dev containing the request, forcing the request to be included in a * @dev different block with a different hash, and therefore a different input * @dev to the VRF. However, such an attack would incur a substantial economic * @dev cost. This cost scales with the number of blocks the VRF oracle waits * @dev until it calls responds to a request. It is for this reason that * @dev that you can signal to an oracle you'd like them to wait longer before * @dev responding to the request (however this is not enforced in the contract * @dev and so remains effective only in the case of unmodified oracle software). */ abstract contract VRFConsumerBaseV2 { error OnlyCoordinatorCanFulfill(address have, address want); address private immutable vrfCoordinator; /** * @param _vrfCoordinator address of VRFCoordinator contract */ constructor(address _vrfCoordinator) { vrfCoordinator = _vrfCoordinator; } /** * @notice fulfillRandomness handles the VRF response. Your contract must * @notice implement it. See "SECURITY CONSIDERATIONS" above for important * @notice principles to keep in mind when implementing your fulfillRandomness * @notice method. * * @dev VRFConsumerBaseV2 expects its subcontracts to have a method with this * @dev signature, and will call it once it has verified the proof * @dev associated with the randomness. (It is triggered via a call to * @dev rawFulfillRandomness, below.) * * @param requestId The Id initially returned by requestRandomness * @param randomWords the VRF output expanded to the requested number of words */ function fulfillRandomWords(uint256 requestId, uint256[] memory randomWords) internal virtual; // rawFulfillRandomness is called by VRFCoordinator when it receives a valid VRF // proof. rawFulfillRandomness then calls fulfillRandomness, after validating // the origin of the call function rawFulfillRandomWords(uint256 requestId, uint256[] memory randomWords) external { if (msg.sender != vrfCoordinator) { revert OnlyCoordinatorCanFulfill(msg.sender, vrfCoordinator); } fulfillRandomWords(requestId, randomWords); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_nftContractAddress","type":"address"},{"internalType":"uint64","name":"_subscriptionId","type":"uint64"},{"internalType":"address","name":"vrfCoordinator","type":"address"},{"internalType":"address","name":"linkTokenAddress","type":"address"},{"internalType":"bytes32","name":"_keyHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"have","type":"address"},{"internalType":"address","name":"want","type":"address"}],"name":"OnlyCoordinatorCanFulfill","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"listId","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"length","type":"uint256"}],"name":"RandomWordsReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"listId","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"startTime","type":"uint32"},{"indexed":false,"internalType":"uint32","name":"endTime","type":"uint32"},{"indexed":false,"internalType":"uint8","name":"width","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"height","type":"uint8"},{"indexed":false,"internalType":"bytes32","name":"merkleRoot","type":"bytes32"}],"name":"WhitelistCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"listId","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"startTime","type":"uint32"},{"indexed":false,"internalType":"uint32","name":"endTime","type":"uint32"}],"name":"WhitelistUpdated","type":"event"},{"inputs":[],"name":"COORDINATOR","outputs":[{"internalType":"contract VRFCoordinatorV2Interface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LINKTOKEN","outputs":[{"internalType":"contract LinkTokenInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"listId","type":"uint256"},{"internalType":"uint8","name":"width","type":"uint8"},{"internalType":"uint8","name":"height","type":"uint8"},{"internalType":"uint16","name":"seedOffset","type":"uint16"},{"internalType":"uint32","name":"startTime","type":"uint32"},{"internalType":"uint32","name":"endTime","type":"uint32"},{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"},{"internalType":"uint16[]","name":"tokenList","type":"uint16[]"}],"name":"createWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"numWords","type":"uint32"}],"name":"generateRandomWords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getRandomSeedListLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"keyHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"listId","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"minted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256"},{"internalType":"uint256[]","name":"randomWords","type":"uint256[]"}],"name":"rawFulfillRandomWords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"requestId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"numWords","type":"uint32"},{"internalType":"uint32","name":"callbackGasLimit","type":"uint32"}],"name":"requestRandomWords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_keyHash","type":"bytes32"}],"name":"setKeyHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"subscriptionId","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"listId","type":"uint256"},{"internalType":"uint32","name":"_endTime","type":"uint32"}],"name":"updateWhitelistEndTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"listId","type":"uint256"},{"internalType":"uint32","name":"_startTime","type":"uint32"}],"name":"updateWhitelistStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"listId","type":"uint256"},{"internalType":"address","name":"who","type":"address"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"verifyProof","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelistList","outputs":[{"internalType":"uint8","name":"width","type":"uint8"},{"internalType":"uint8","name":"height","type":"uint8"},{"internalType":"uint16","name":"seedOffset","type":"uint16"},{"internalType":"uint16","name":"currentSupply","type":"uint16"},{"internalType":"uint32","name":"startTime","type":"uint32"},{"internalType":"uint32","name":"endTime","type":"uint32"},{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60c06040523480156200001157600080fd5b5060405162001b9738038062001b97833981016040819052620000349162000116565b6001600160a01b0383166080526200004c33620000a9565b6001600160a01b0394851660a052600480546001600160401b039095166001600160401b031990951694909417909355600180549285166001600160a01b031993841617905560028054919094169116179091556005556200018b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200011157600080fd5b919050565b600080600080600060a086880312156200012f57600080fd5b6200013a86620000f9565b60208701519095506001600160401b03811681146200015857600080fd5b93506200016860408701620000f9565b92506200017860608701620000f9565b9150608086015190509295509295909350565b60805160a0516119df620001b86000396000610e7501526000818161039a01526103dc01526119df6000f3fe608060405234801561001057600080fd5b506004361061012b5760003560e01c806355380dfb116100ad5780638da5cb5b116100715780638da5cb5b14610332578063967b2017146103435780639854471014610356578063ba41b0c614610369578063f2fde38b1461037c57600080fd5b806355380dfb146102bd57806361728f39146102d0578063666f35f9146102d95780636887a0e5146102fc578063715018a61461032a57600080fd5b80632b1c39f3116100f45780632b1c39f3146102515780633168ec8d1461025957806336a3583c1461026c5780633add5d431461027f5780633b2bcbf11461029257600080fd5b80626d6cae1461013057806309c1ba2e1461014c578063127c0290146101795780631fe543e31461022957806322bb16b01461023e575b600080fd5b61013960065481565b6040519081526020015b60405180910390f35b6004546101609067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610143565b6101df610187366004611454565b6007602052600090815260409020805460019091015460ff8083169261010081049091169161ffff62010000830481169264010000000081049091169163ffffffff600160301b8304811692600160501b9004169087565b6040805160ff988916815297909616602088015261ffff9485169587019590955292909116606085015263ffffffff90811660808501521660a083015260c082015260e001610143565b61023c610237366004611483565b61038f565b005b61023c61024c366004611566565b61041c565b6101396104cd565b61023c610267366004611592565b6104e3565b61023c61027a366004611566565b6105f0565b61023c61028d366004611611565b61069d565b6001546102a5906001600160a01b031681565b6040516001600160a01b039091168152602001610143565b6002546102a5906001600160a01b031681565b61013960055481565b6102ec6102e73660046116de565b6109b9565b6040519015158152602001610143565b6102ec61030a366004611738565b600960209081526000928352604080842090915290825290205460ff1681565b61023c610a4d565b6000546001600160a01b03166102a5565b61023c61035136600461175b565b610a83565b61023c610364366004611454565b610b65565b61023c610377366004611785565b610b94565b61023c61038a3660046117d1565b610f27565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461040e5760405163073e64fd60e21b81523360048201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660248201526044015b60405180910390fd5b6104188282610fc2565b5050565b6000546001600160a01b031633146104465760405162461bcd60e51b8152600401610405906117ec565b600082815260076020908152604091829020805463ffffffff60501b1916600160501b63ffffffff868116820292909217928390558451878152600160301b840483169481019490945290910416918101919091527fa573a8e2bb4ec25d21f80edb008a0a8a6718dd64386bcc257bbec3a631863980906060015b60405180910390a15050565b6003546000906104de906010611837565b905090565b6000546001600160a01b0316331461050d5760405162461bcd60e51b8152600401610405906117ec565b60008163ffffffff1667ffffffffffffffff81111561052e5761052e61146d565b604051908082528060200260200182016040528015610557578160200160208202803683370190505b5090506000805b8363ffffffff168163ffffffff1610156105df57604080516020810184905244918101919091524260608201526080016040516020818303038152906040528051906020012060001c915081838263ffffffff16815181106105c2576105c2611856565b6020908102919091010152806105d78161186c565b91505061055e565b506105eb600083610fc2565b505050565b6000546001600160a01b0316331461061a5760405162461bcd60e51b8152600401610405906117ec565b600082815260076020908152604091829020805469ffffffff0000000000001916600160301b63ffffffff868116820292909217928390558451878152908304821693810193909352600160501b90910416918101919091527fa573a8e2bb4ec25d21f80edb008a0a8a6718dd64386bcc257bbec3a631863980906060016104c1565b6000546001600160a01b031633146106c75760405162461bcd60e51b8152600401610405906117ec565b6003546106d5906010611837565b8111156107245760405162461bcd60e51b815260206004820152601960248201527f496e73756666696369656e742072616e646f6d207365656473000000000000006044820152606401610405565b60008981526007602052604090205460ff16156107735760405162461bcd60e51b815260206004820152600d60248201526c6c69737449642065786973747360981b6044820152606401610405565b60008860ff16118015610789575060008760ff16115b6107d55760405162461bcd60e51b815260206004820152601960248201527f496e636f7272656374207769647468206f7220686569676874000000000000006044820152606401610405565b6040805160e08101825260ff808b168252891660208201529081016107fe61ffff89168c611890565b61ffff168152602001600061ffff1681526020018663ffffffff1681526020018563ffffffff16815260200184815250600760008b815260200190815260200160002060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548161ffff021916908361ffff16021790555060608201518160000160046101000a81548161ffff021916908361ffff16021790555060808201518160000160066101000a81548163ffffffff021916908363ffffffff16021790555060a082015181600001600a6101000a81548163ffffffff021916908363ffffffff16021790555060c082015181600101559050508181600860008c81526020019081526020016000209190610946929190611392565b5061095089611046565b604080518a815263ffffffff878116602083015286168183015260ff8a811660608301528916608082015260a0810185905290517f0284591a05e7f14d76f1a34fe8e89645e19ec8a3aad8fdf12a001e7dd9f61fac9181900360c00190a1505050505050505050565b6040516bffffffffffffffffffffffff19606085901b1660208201526000908190603401604051602081830303815290604052805190602001209050610a4384848080602002602001604051908101604052809392919081815260200183836020028082843760009201829052508b81526007602052604090206001015492508591506112019050565b9695505050505050565b6000546001600160a01b03163314610a775760405162461bcd60e51b8152600401610405906117ec565b610a816000611217565b565b6000546001600160a01b03163314610aad5760405162461bcd60e51b8152600401610405906117ec565b600154600554600480546040516305d3b1d360e41b81529182019290925267ffffffffffffffff90911660248201526003604482015263ffffffff8084166064830152841660848201526001600160a01b0390911690635d3b1d309060a401602060405180830381600087803b158015610b2657600080fd5b505af1158015610b3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5e91906118a8565b6006555050565b6000546001600160a01b03163314610b8f5760405162461bcd60e51b8152600401610405906117ec565b600555565b600083815260076020908152604091829020825160e081018452815460ff80821683526101008204169382019390935261ffff6201000084048116948201949094526401000000008304909316606084015263ffffffff600160301b8304811660808501819052600160501b9093041660a08401526001015460c0830152849190421015610c5a5760405162461bcd60e51b815260206004820152601360248201527214d95cdcda5bdb881b9bdd081cdd185c9d1959606a1b6044820152606401610405565b428160a0015163ffffffff161015610ca45760405162461bcd60e51b815260206004820152600d60248201526c14d95cdcda5bdb88195b991959609a1b6044820152606401610405565b333214610cf35760405162461bcd60e51b815260206004820181905260248201527f436f6e747261637420696e746572616374696f6e206e6f7420616c6c6f7765646044820152606401610405565b610cff853386866109b9565b610d425760405162461bcd60e51b815260206004820152601460248201527324b73b30b634b21036b2b935b63290383937b7b360611b6044820152606401610405565b600085815260096020908152604080832033845290915290205460ff1615610d9d5760405162461bcd60e51b815260206004820152600e60248201526d105b1c9958591e481b5a5b9d195960921b6044820152606401610405565b60008581526009602090815260408083203384529091528120805460ff19166001179055610dca86611267565b600087815260076020908152604091829020825160e081018452815460ff808216808452610100830490911694830185905261ffff620100008304811684880152640100000000830416606084015263ffffffff600160301b830481166080850152600160501b90920490911660a083015260019092015460c0820152925163d6f69d2960e01b815233600482015260248101859052604481019190915260648101919091529192507f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0383169063d6f69d2990608401600060405180830381600087803b158015610ec357600080fd5b505af1158015610ed7573d6000803e3d6000fd5b505060408051338152602081018790529081018b90527f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f9250606001905060405180910390a15050505050505050565b6000546001600160a01b03163314610f515760405162461bcd60e51b8152600401610405906117ec565b6001600160a01b038116610fb65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610405565b610fbf81611217565b50565b60005b8151811015611013576003828281518110610fe257610fe2611856565b602090810291909101810151825460018101845560009384529190922001558061100b816118c1565b915050610fc5565b507fcf62666b8966899e78a1b32cadec67f86bcd062d11db2a86853bfc3f2c0c259481516040516104c191815260200190565b6000818152600860205260408120905b815461ffff821610156105eb5760035460008481526007602052604081205490919060109061108f9062010000900461ffff16856118dc565b6110999190611918565b61ffff166110a79190611939565b83549091506000906110ba60108561194d565b61ffff16600384815481106110d1576110d1611856565b9060005260206000200154901c61ffff166110ec9190611939565b905083818154811061110057611100611856565b90600052602060002090601091828204019190066002029054906101000a900461ffff16848461ffff168154811061113a5761113a611856565b90600052602060002090601091828204019190066002029054906101000a900461ffff16858561ffff168154811061117457611174611856565b906000526020600020906010918282040191900660020287858154811061119d5761119d611856565b90600052602060002090601091828204019190066002028491906101000a81548161ffff021916908361ffff1602179055508391906101000a81548161ffff021916908361ffff1602179055505050505080806111f99061196e565b915050611056565b60008261120e858461131e565b14949350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000818152600760205260408120805460019190600490611295908490640100000000900461ffff166118dc565b82546101009290920a61ffff81810219909316918316021790915560008481526008602090815260408083206007909252909120549092506112e291600191640100000000900416611986565b61ffff16815481106112f6576112f6611856565b60009182526020909120601082040154600f9091166002026101000a900461ffff1692915050565b600081815b845181101561138a57600085828151811061134057611340611856565b602002602001015190508083116113665760008381526020829052604090209250611377565b600081815260208490526040902092505b5080611382816118c1565b915050611323565b509392505050565b82805482825590600052602060002090600f0160109004810192821561142f5791602002820160005b838211156113ff57833561ffff1683826101000a81548161ffff021916908361ffff16021790555092602001926002016020816001010492830192600103026113bb565b801561142d5782816101000a81549061ffff02191690556002016020816001010492830192600103026113ff565b505b5061143b92915061143f565b5090565b5b8082111561143b5760008155600101611440565b60006020828403121561146657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561149657600080fd5b8235915060208084013567ffffffffffffffff808211156114b657600080fd5b818601915086601f8301126114ca57600080fd5b8135818111156114dc576114dc61146d565b8060051b604051601f19603f830116810181811085821117156115015761150161146d565b60405291825284820192508381018501918983111561151f57600080fd5b938501935b8285101561153d57843584529385019392850192611524565b8096505050505050509250929050565b803563ffffffff8116811461156157600080fd5b919050565b6000806040838503121561157957600080fd5b823591506115896020840161154d565b90509250929050565b6000602082840312156115a457600080fd5b6115ad8261154d565b9392505050565b803560ff8116811461156157600080fd5b60008083601f8401126115d757600080fd5b50813567ffffffffffffffff8111156115ef57600080fd5b6020830191508360208260051b850101111561160a57600080fd5b9250929050565b60008060008060008060008060006101008a8c03121561163057600080fd5b8935985061164060208b016115b4565b975061164e60408b016115b4565b965060608a013561ffff8116811461166557600080fd5b955061167360808b0161154d565b945061168160a08b0161154d565b935060c08a0135925060e08a013567ffffffffffffffff8111156116a457600080fd5b6116b08c828d016115c5565b915080935050809150509295985092959850929598565b80356001600160a01b038116811461156157600080fd5b600080600080606085870312156116f457600080fd5b84359350611704602086016116c7565b9250604085013567ffffffffffffffff81111561172057600080fd5b61172c878288016115c5565b95989497509550505050565b6000806040838503121561174b57600080fd5b82359150611589602084016116c7565b6000806040838503121561176e57600080fd5b6117778361154d565b91506115896020840161154d565b60008060006040848603121561179a57600080fd5b83359250602084013567ffffffffffffffff8111156117b857600080fd5b6117c4868287016115c5565b9497909650939450505050565b6000602082840312156117e357600080fd5b6115ad826116c7565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561185157611851611821565b500290565b634e487b7160e01b600052603260045260246000fd5b600063ffffffff8083168181141561188657611886611821565b6001019392505050565b600082198211156118a3576118a3611821565b500190565b6000602082840312156118ba57600080fd5b5051919050565b60006000198214156118d5576118d5611821565b5060010190565b600061ffff8083168185168083038211156118f9576118f9611821565b01949350505050565b634e487b7160e01b600052601260045260246000fd5b600061ffff8084168061192d5761192d611902565b92169190910492915050565b60008261194857611948611902565b500690565b600061ffff8084168061196257611962611902565b92169190910692915050565b600061ffff8083168181141561188657611886611821565b600061ffff838116908316818110156119a1576119a1611821565b03939250505056fea2646970667358221220a2ed5f1d1cb62f5ad5f4e4449be44bad08c1aa4ebc09d2c78b0324ecf6dd14a564736f6c63430008090033000000000000000000000000cb4d18341753e6e7586db91a59a3c494623d7f4c0000000000000000000000000000000000000000000000000000000000000030000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e69909000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca8af398995b04c28e9951adb9721ef74c74f93e6a478f39e7e0777be13527e7ef
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061012b5760003560e01c806355380dfb116100ad5780638da5cb5b116100715780638da5cb5b14610332578063967b2017146103435780639854471014610356578063ba41b0c614610369578063f2fde38b1461037c57600080fd5b806355380dfb146102bd57806361728f39146102d0578063666f35f9146102d95780636887a0e5146102fc578063715018a61461032a57600080fd5b80632b1c39f3116100f45780632b1c39f3146102515780633168ec8d1461025957806336a3583c1461026c5780633add5d431461027f5780633b2bcbf11461029257600080fd5b80626d6cae1461013057806309c1ba2e1461014c578063127c0290146101795780631fe543e31461022957806322bb16b01461023e575b600080fd5b61013960065481565b6040519081526020015b60405180910390f35b6004546101609067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610143565b6101df610187366004611454565b6007602052600090815260409020805460019091015460ff8083169261010081049091169161ffff62010000830481169264010000000081049091169163ffffffff600160301b8304811692600160501b9004169087565b6040805160ff988916815297909616602088015261ffff9485169587019590955292909116606085015263ffffffff90811660808501521660a083015260c082015260e001610143565b61023c610237366004611483565b61038f565b005b61023c61024c366004611566565b61041c565b6101396104cd565b61023c610267366004611592565b6104e3565b61023c61027a366004611566565b6105f0565b61023c61028d366004611611565b61069d565b6001546102a5906001600160a01b031681565b6040516001600160a01b039091168152602001610143565b6002546102a5906001600160a01b031681565b61013960055481565b6102ec6102e73660046116de565b6109b9565b6040519015158152602001610143565b6102ec61030a366004611738565b600960209081526000928352604080842090915290825290205460ff1681565b61023c610a4d565b6000546001600160a01b03166102a5565b61023c61035136600461175b565b610a83565b61023c610364366004611454565b610b65565b61023c610377366004611785565b610b94565b61023c61038a3660046117d1565b610f27565b336001600160a01b037f000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e69909161461040e5760405163073e64fd60e21b81523360048201526001600160a01b037f000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e699091660248201526044015b60405180910390fd5b6104188282610fc2565b5050565b6000546001600160a01b031633146104465760405162461bcd60e51b8152600401610405906117ec565b600082815260076020908152604091829020805463ffffffff60501b1916600160501b63ffffffff868116820292909217928390558451878152600160301b840483169481019490945290910416918101919091527fa573a8e2bb4ec25d21f80edb008a0a8a6718dd64386bcc257bbec3a631863980906060015b60405180910390a15050565b6003546000906104de906010611837565b905090565b6000546001600160a01b0316331461050d5760405162461bcd60e51b8152600401610405906117ec565b60008163ffffffff1667ffffffffffffffff81111561052e5761052e61146d565b604051908082528060200260200182016040528015610557578160200160208202803683370190505b5090506000805b8363ffffffff168163ffffffff1610156105df57604080516020810184905244918101919091524260608201526080016040516020818303038152906040528051906020012060001c915081838263ffffffff16815181106105c2576105c2611856565b6020908102919091010152806105d78161186c565b91505061055e565b506105eb600083610fc2565b505050565b6000546001600160a01b0316331461061a5760405162461bcd60e51b8152600401610405906117ec565b600082815260076020908152604091829020805469ffffffff0000000000001916600160301b63ffffffff868116820292909217928390558451878152908304821693810193909352600160501b90910416918101919091527fa573a8e2bb4ec25d21f80edb008a0a8a6718dd64386bcc257bbec3a631863980906060016104c1565b6000546001600160a01b031633146106c75760405162461bcd60e51b8152600401610405906117ec565b6003546106d5906010611837565b8111156107245760405162461bcd60e51b815260206004820152601960248201527f496e73756666696369656e742072616e646f6d207365656473000000000000006044820152606401610405565b60008981526007602052604090205460ff16156107735760405162461bcd60e51b815260206004820152600d60248201526c6c69737449642065786973747360981b6044820152606401610405565b60008860ff16118015610789575060008760ff16115b6107d55760405162461bcd60e51b815260206004820152601960248201527f496e636f7272656374207769647468206f7220686569676874000000000000006044820152606401610405565b6040805160e08101825260ff808b168252891660208201529081016107fe61ffff89168c611890565b61ffff168152602001600061ffff1681526020018663ffffffff1681526020018563ffffffff16815260200184815250600760008b815260200190815260200160002060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548161ffff021916908361ffff16021790555060608201518160000160046101000a81548161ffff021916908361ffff16021790555060808201518160000160066101000a81548163ffffffff021916908363ffffffff16021790555060a082015181600001600a6101000a81548163ffffffff021916908363ffffffff16021790555060c082015181600101559050508181600860008c81526020019081526020016000209190610946929190611392565b5061095089611046565b604080518a815263ffffffff878116602083015286168183015260ff8a811660608301528916608082015260a0810185905290517f0284591a05e7f14d76f1a34fe8e89645e19ec8a3aad8fdf12a001e7dd9f61fac9181900360c00190a1505050505050505050565b6040516bffffffffffffffffffffffff19606085901b1660208201526000908190603401604051602081830303815290604052805190602001209050610a4384848080602002602001604051908101604052809392919081815260200183836020028082843760009201829052508b81526007602052604090206001015492508591506112019050565b9695505050505050565b6000546001600160a01b03163314610a775760405162461bcd60e51b8152600401610405906117ec565b610a816000611217565b565b6000546001600160a01b03163314610aad5760405162461bcd60e51b8152600401610405906117ec565b600154600554600480546040516305d3b1d360e41b81529182019290925267ffffffffffffffff90911660248201526003604482015263ffffffff8084166064830152841660848201526001600160a01b0390911690635d3b1d309060a401602060405180830381600087803b158015610b2657600080fd5b505af1158015610b3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5e91906118a8565b6006555050565b6000546001600160a01b03163314610b8f5760405162461bcd60e51b8152600401610405906117ec565b600555565b600083815260076020908152604091829020825160e081018452815460ff80821683526101008204169382019390935261ffff6201000084048116948201949094526401000000008304909316606084015263ffffffff600160301b8304811660808501819052600160501b9093041660a08401526001015460c0830152849190421015610c5a5760405162461bcd60e51b815260206004820152601360248201527214d95cdcda5bdb881b9bdd081cdd185c9d1959606a1b6044820152606401610405565b428160a0015163ffffffff161015610ca45760405162461bcd60e51b815260206004820152600d60248201526c14d95cdcda5bdb88195b991959609a1b6044820152606401610405565b333214610cf35760405162461bcd60e51b815260206004820181905260248201527f436f6e747261637420696e746572616374696f6e206e6f7420616c6c6f7765646044820152606401610405565b610cff853386866109b9565b610d425760405162461bcd60e51b815260206004820152601460248201527324b73b30b634b21036b2b935b63290383937b7b360611b6044820152606401610405565b600085815260096020908152604080832033845290915290205460ff1615610d9d5760405162461bcd60e51b815260206004820152600e60248201526d105b1c9958591e481b5a5b9d195960921b6044820152606401610405565b60008581526009602090815260408083203384529091528120805460ff19166001179055610dca86611267565b600087815260076020908152604091829020825160e081018452815460ff808216808452610100830490911694830185905261ffff620100008304811684880152640100000000830416606084015263ffffffff600160301b830481166080850152600160501b90920490911660a083015260019092015460c0820152925163d6f69d2960e01b815233600482015260248101859052604481019190915260648101919091529192507f000000000000000000000000cb4d18341753e6e7586db91a59a3c494623d7f4c916001600160a01b0383169063d6f69d2990608401600060405180830381600087803b158015610ec357600080fd5b505af1158015610ed7573d6000803e3d6000fd5b505060408051338152602081018790529081018b90527f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f9250606001905060405180910390a15050505050505050565b6000546001600160a01b03163314610f515760405162461bcd60e51b8152600401610405906117ec565b6001600160a01b038116610fb65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610405565b610fbf81611217565b50565b60005b8151811015611013576003828281518110610fe257610fe2611856565b602090810291909101810151825460018101845560009384529190922001558061100b816118c1565b915050610fc5565b507fcf62666b8966899e78a1b32cadec67f86bcd062d11db2a86853bfc3f2c0c259481516040516104c191815260200190565b6000818152600860205260408120905b815461ffff821610156105eb5760035460008481526007602052604081205490919060109061108f9062010000900461ffff16856118dc565b6110999190611918565b61ffff166110a79190611939565b83549091506000906110ba60108561194d565b61ffff16600384815481106110d1576110d1611856565b9060005260206000200154901c61ffff166110ec9190611939565b905083818154811061110057611100611856565b90600052602060002090601091828204019190066002029054906101000a900461ffff16848461ffff168154811061113a5761113a611856565b90600052602060002090601091828204019190066002029054906101000a900461ffff16858561ffff168154811061117457611174611856565b906000526020600020906010918282040191900660020287858154811061119d5761119d611856565b90600052602060002090601091828204019190066002028491906101000a81548161ffff021916908361ffff1602179055508391906101000a81548161ffff021916908361ffff1602179055505050505080806111f99061196e565b915050611056565b60008261120e858461131e565b14949350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000818152600760205260408120805460019190600490611295908490640100000000900461ffff166118dc565b82546101009290920a61ffff81810219909316918316021790915560008481526008602090815260408083206007909252909120549092506112e291600191640100000000900416611986565b61ffff16815481106112f6576112f6611856565b60009182526020909120601082040154600f9091166002026101000a900461ffff1692915050565b600081815b845181101561138a57600085828151811061134057611340611856565b602002602001015190508083116113665760008381526020829052604090209250611377565b600081815260208490526040902092505b5080611382816118c1565b915050611323565b509392505050565b82805482825590600052602060002090600f0160109004810192821561142f5791602002820160005b838211156113ff57833561ffff1683826101000a81548161ffff021916908361ffff16021790555092602001926002016020816001010492830192600103026113bb565b801561142d5782816101000a81549061ffff02191690556002016020816001010492830192600103026113ff565b505b5061143b92915061143f565b5090565b5b8082111561143b5760008155600101611440565b60006020828403121561146657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561149657600080fd5b8235915060208084013567ffffffffffffffff808211156114b657600080fd5b818601915086601f8301126114ca57600080fd5b8135818111156114dc576114dc61146d565b8060051b604051601f19603f830116810181811085821117156115015761150161146d565b60405291825284820192508381018501918983111561151f57600080fd5b938501935b8285101561153d57843584529385019392850192611524565b8096505050505050509250929050565b803563ffffffff8116811461156157600080fd5b919050565b6000806040838503121561157957600080fd5b823591506115896020840161154d565b90509250929050565b6000602082840312156115a457600080fd5b6115ad8261154d565b9392505050565b803560ff8116811461156157600080fd5b60008083601f8401126115d757600080fd5b50813567ffffffffffffffff8111156115ef57600080fd5b6020830191508360208260051b850101111561160a57600080fd5b9250929050565b60008060008060008060008060006101008a8c03121561163057600080fd5b8935985061164060208b016115b4565b975061164e60408b016115b4565b965060608a013561ffff8116811461166557600080fd5b955061167360808b0161154d565b945061168160a08b0161154d565b935060c08a0135925060e08a013567ffffffffffffffff8111156116a457600080fd5b6116b08c828d016115c5565b915080935050809150509295985092959850929598565b80356001600160a01b038116811461156157600080fd5b600080600080606085870312156116f457600080fd5b84359350611704602086016116c7565b9250604085013567ffffffffffffffff81111561172057600080fd5b61172c878288016115c5565b95989497509550505050565b6000806040838503121561174b57600080fd5b82359150611589602084016116c7565b6000806040838503121561176e57600080fd5b6117778361154d565b91506115896020840161154d565b60008060006040848603121561179a57600080fd5b83359250602084013567ffffffffffffffff8111156117b857600080fd5b6117c4868287016115c5565b9497909650939450505050565b6000602082840312156117e357600080fd5b6115ad826116c7565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561185157611851611821565b500290565b634e487b7160e01b600052603260045260246000fd5b600063ffffffff8083168181141561188657611886611821565b6001019392505050565b600082198211156118a3576118a3611821565b500190565b6000602082840312156118ba57600080fd5b5051919050565b60006000198214156118d5576118d5611821565b5060010190565b600061ffff8083168185168083038211156118f9576118f9611821565b01949350505050565b634e487b7160e01b600052601260045260246000fd5b600061ffff8084168061192d5761192d611902565b92169190910492915050565b60008261194857611948611902565b500690565b600061ffff8084168061196257611962611902565b92169190910692915050565b600061ffff8083168181141561188657611886611821565b600061ffff838116908316818110156119a1576119a1611821565b03939250505056fea2646970667358221220a2ed5f1d1cb62f5ad5f4e4449be44bad08c1aa4ebc09d2c78b0324ecf6dd14a564736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000cb4d18341753e6e7586db91a59a3c494623d7f4c0000000000000000000000000000000000000000000000000000000000000030000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e69909000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca8af398995b04c28e9951adb9721ef74c74f93e6a478f39e7e0777be13527e7ef
-----Decoded View---------------
Arg [0] : _nftContractAddress (address): 0xCb4D18341753e6e7586dB91A59A3C494623d7f4C
Arg [1] : _subscriptionId (uint64): 48
Arg [2] : vrfCoordinator (address): 0x271682DEB8C4E0901D1a1550aD2e64D568E69909
Arg [3] : linkTokenAddress (address): 0x514910771AF9Ca656af840dff83E8264EcF986CA
Arg [4] : _keyHash (bytes32): 0x8af398995b04c28e9951adb9721ef74c74f93e6a478f39e7e0777be13527e7ef
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000cb4d18341753e6e7586db91a59a3c494623d7f4c
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000030
Arg [2] : 000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e69909
Arg [3] : 000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca
Arg [4] : 8af398995b04c28e9951adb9721ef74c74f93e6a478f39e7e0777be13527e7ef
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.