Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 25 from a total of 3,426 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Mint | 20149589 | 642 days ago | IN | 0 ETH | 0.00005736 | ||||
| Mint | 20145356 | 642 days ago | IN | 0 ETH | 0.00006371 | ||||
| Mint | 20145339 | 642 days ago | IN | 0 ETH | 0.00006371 | ||||
| Mint | 20145181 | 642 days ago | IN | 0 ETH | 0.00006371 | ||||
| Mint | 20144880 | 642 days ago | IN | 0 ETH | 0.00009556 | ||||
| Mint | 20144880 | 642 days ago | IN | 0 ETH | 0.00009411 | ||||
| Mint | 20144880 | 642 days ago | IN | 0 ETH | 0.00006371 | ||||
| Mint | 19849315 | 684 days ago | IN | 0 ETH | 0.00009567 | ||||
| Mint | 19836964 | 685 days ago | IN | 0 ETH | 0.00018336 | ||||
| Mint | 19836963 | 685 days ago | IN | 0 ETH | 0.0000956 | ||||
| Mint | 19836963 | 685 days ago | IN | 0 ETH | 0.0000941 | ||||
| Mint | 19836963 | 685 days ago | IN | 0 ETH | 0.0000941 | ||||
| Mint | 19836934 | 685 days ago | IN | 0 ETH | 0.0000941 | ||||
| Mint | 19829069 | 687 days ago | IN | 0 ETH | 0.00009567 | ||||
| Mint | 19750103 | 698 days ago | IN | 0 ETH | 0.00012747 | ||||
| Mint | 19749895 | 698 days ago | IN | 0 ETH | 0.00012756 | ||||
| Mint | 19749856 | 698 days ago | IN | 0 ETH | 0.00012747 | ||||
| Mint | 19749856 | 698 days ago | IN | 0 ETH | 0.00012756 | ||||
| Mint | 19749135 | 698 days ago | IN | 0 ETH | 0.00020423 | ||||
| Mint | 19749135 | 698 days ago | IN | 0 ETH | 0.00020423 | ||||
| Mint | 19749135 | 698 days ago | IN | 0 ETH | 0.00020423 | ||||
| Mint | 19749135 | 698 days ago | IN | 0 ETH | 0.00015946 | ||||
| Mint | 19749135 | 698 days ago | IN | 0 ETH | 0.00020423 | ||||
| Mint | 19749135 | 698 days ago | IN | 0 ETH | 0.00017234 | ||||
| Mint | 19749135 | 698 days ago | IN | 0 ETH | 0.00017234 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
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
Contract ABI
API[{"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
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 32 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.