Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 39 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Request Randomne... | 20514994 | 171 days ago | IN | 0 ETH | 0.00066093 | ||||
Request Randomne... | 19413331 | 325 days ago | IN | 0 ETH | 0.01047322 | ||||
Request Randomne... | 19413316 | 325 days ago | IN | 0 ETH | 0.01132365 | ||||
Request Randomne... | 19185889 | 357 days ago | IN | 0 ETH | 0.01083638 | ||||
Request Randomne... | 19185752 | 357 days ago | IN | 0 ETH | 0.00739946 | ||||
Request Randomne... | 19048989 | 376 days ago | IN | 0 ETH | 0.00240804 | ||||
Request Randomne... | 19041989 | 377 days ago | IN | 0 ETH | 0.00577564 | ||||
Request Randomne... | 19041923 | 377 days ago | IN | 0 ETH | 0.00603392 | ||||
Request Randomne... | 18736212 | 420 days ago | IN | 0 ETH | 0.0068539 | ||||
Request Randomne... | 18736209 | 420 days ago | IN | 0 ETH | 0.00676537 | ||||
Request Randomne... | 17088657 | 651 days ago | IN | 0 ETH | 0.01156643 | ||||
Request Randomne... | 17074254 | 653 days ago | IN | 0 ETH | 0.00576917 | ||||
Request Randomne... | 16934493 | 673 days ago | IN | 0 ETH | 0.00458267 | ||||
Request Randomne... | 16934472 | 673 days ago | IN | 0 ETH | 0.0049556 | ||||
Request Randomne... | 16898799 | 678 days ago | IN | 0 ETH | 0.00414383 | ||||
Request Randomne... | 16898784 | 678 days ago | IN | 0 ETH | 0.00378186 | ||||
Request Randomne... | 16643708 | 714 days ago | IN | 0 ETH | 0.00749988 | ||||
Set Defaults | 16643694 | 714 days ago | IN | 0 ETH | 0.0024749 | ||||
Request Randomne... | 16643613 | 714 days ago | IN | 0 ETH | 0.01041166 | ||||
Request Randomne... | 16392808 | 749 days ago | IN | 0 ETH | 0.0070191 | ||||
Request Randomne... | 16391556 | 749 days ago | IN | 0 ETH | 0.0070191 | ||||
Request Randomne... | 16386418 | 750 days ago | IN | 0 ETH | 0.0070191 | ||||
Request Randomne... | 16350620 | 755 days ago | IN | 0 ETH | 0.00842292 | ||||
Request Randomne... | 16349760 | 755 days ago | IN | 0 ETH | 0.0070191 | ||||
Request Randomne... | 16341406 | 756 days ago | IN | 0 ETH | 0.00701838 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Randomness
Compiler Version
v0.8.14+commit.80d49f37
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity >=0.4.22 <0.9.0; import "@chainlink/contracts/src/v0.8/VRFConsumerBaseV2.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@chainlink/contracts/src/v0.8/interfaces/VRFCoordinatorV2Interface.sol"; contract Randomness is VRFConsumerBaseV2, Ownable { struct RandomnessRequest { uint256[] randomWords; bool requested; bool fulfilled; } struct config { bytes32 keyHash; uint64 subscription; uint16 confirmations; uint32 gasLimit; uint32 numWords; } event RandomNumberRequested(bytes32 entity, uint256 requestId); event RandomNumberGenerated(bytes32 entity, uint256 requestId, uint256[] randomness); event AuthorizationUpdated(address operator, bool authorized); bytes32 internal _keyHash; uint64 internal _subscription; config private _defaultConfig; mapping(bytes32 => RandomnessRequest) internal _randomRequests; mapping(uint256 => bytes32) internal _randomRequestByChainLinkId; address internal _vrfCoordinator; mapping(address => bool) internal _authorizedAddresses; modifier onlyAuthorized() { require( owner() == _msgSender() || _authorizedAddresses[ _msgSender() ], "Not Authorized." ); _; } constructor(address vrfCoordinator_) Ownable() VRFConsumerBaseV2(vrfCoordinator_) { _vrfCoordinator = vrfCoordinator_; } function authorize(address op, bool authorized) onlyOwner public { _authorizedAddresses[ op ] = authorized; emit AuthorizationUpdated(op, authorized); } function isAuthorized(address op) public view returns(bool) { return _authorizedAddresses[ op ]; } function configure(bytes32 keyHash, uint64 sub, uint16 confirms, uint32 gasLimit, uint32 words) onlyOwner public { _defaultConfig = config( keyHash, sub, confirms, gasLimit, words ); } function setDefaults(bytes32 keyHash_, uint64 sub_, uint16 confirms_, uint32 gasLimit_, uint32 words_) onlyOwner public { _defaultConfig = config( keyHash_, sub_, confirms_, gasLimit_, words_ ); } function readRandomness(bytes32 entity) public view returns(uint256[] memory randomness) { return getRandomness(entity); } function getRandomness(bytes32 entity) public view returns(uint256[] memory randomness) { require(_randomRequests[ entity ].fulfilled, "Randomness not ready"); return _randomRequests[ entity ].randomWords; } function getRandomnessByRequestId(uint256 requestId) public view returns(uint256[] memory randomness) { require(_randomRequestByChainLinkId[requestId] != 0x0, "Unknown request"); return getRandomness(_randomRequestByChainLinkId[ requestId ]); } function requestRandomness(bytes32 entity) onlyAuthorized public virtual { _requestRandomness( entity, _defaultConfig.keyHash, _defaultConfig.subscription, _defaultConfig.confirmations, _defaultConfig.gasLimit, _defaultConfig.numWords ); } function requestRandomness(bytes32 entity, uint32 words) onlyAuthorized public virtual { _requestRandomness( entity, _defaultConfig.keyHash, _defaultConfig.subscription, _defaultConfig.confirmations, (_defaultConfig.gasLimit / 5) * words, words ); } function requestRandomness(bytes32 entity, bytes32 keyHash, uint64 sub, uint16 confirms, uint32 gasLimit, uint32 words) onlyAuthorized public { _requestRandomness( entity, keyHash, sub, confirms, gasLimit, words ); } function _requestRandomness(bytes32 entity, bytes32 keyHash, uint64 sub, uint16 confirms, uint32 gasLimit, uint32 words) internal returns(uint256) { require( ! _randomRequests[ entity ].requested, "A random number was already request for the given entity." ); uint256 requestId = VRFCoordinatorV2Interface(_vrfCoordinator).requestRandomWords( keyHash, sub, confirms, gasLimit, words ); _randomRequests[ entity ].requested = true; _randomRequestByChainLinkId[ requestId ] = entity; emit RandomNumberRequested(entity, requestId); return requestId; } function fulfillRandomWords(uint256 requestId, uint256[] memory randomWords) internal virtual override { bytes32 entity = _randomRequestByChainLinkId[ requestId ]; _randomRequests[ entity ].fulfilled = true; _randomRequests[ entity ].randomWords = randomWords; emit RandomNumberGenerated(entity, 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; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (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 Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { 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 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; /* * @notice Check to see if there exists a request commitment consumers * for all consumers and keyhashes for a given sub. * @param subId - ID of the subscription * @return true if there exists at least one unfulfilled request for the subscription, false * otherwise. */ function pendingRequestExists(uint64 subId) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; /** **************************************************************************** * @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); } }
{ "remappings": [], "optimizer": { "enabled": true, "runs": 200 }, "evmVersion": "london", "libraries": {}, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"vrfCoordinator_","type":"address"}],"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":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"authorized","type":"bool"}],"name":"AuthorizationUpdated","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":"bytes32","name":"entity","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"requestId","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"randomness","type":"uint256[]"}],"name":"RandomNumberGenerated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"entity","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"requestId","type":"uint256"}],"name":"RandomNumberRequested","type":"event"},{"inputs":[{"internalType":"address","name":"op","type":"address"},{"internalType":"bool","name":"authorized","type":"bool"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"keyHash","type":"bytes32"},{"internalType":"uint64","name":"sub","type":"uint64"},{"internalType":"uint16","name":"confirms","type":"uint16"},{"internalType":"uint32","name":"gasLimit","type":"uint32"},{"internalType":"uint32","name":"words","type":"uint32"}],"name":"configure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"entity","type":"bytes32"}],"name":"getRandomness","outputs":[{"internalType":"uint256[]","name":"randomness","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256"}],"name":"getRandomnessByRequestId","outputs":[{"internalType":"uint256[]","name":"randomness","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"op","type":"address"}],"name":"isAuthorized","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":[{"internalType":"bytes32","name":"entity","type":"bytes32"}],"name":"readRandomness","outputs":[{"internalType":"uint256[]","name":"randomness","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"entity","type":"bytes32"}],"name":"requestRandomness","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"entity","type":"bytes32"},{"internalType":"bytes32","name":"keyHash","type":"bytes32"},{"internalType":"uint64","name":"sub","type":"uint64"},{"internalType":"uint16","name":"confirms","type":"uint16"},{"internalType":"uint32","name":"gasLimit","type":"uint32"},{"internalType":"uint32","name":"words","type":"uint32"}],"name":"requestRandomness","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"entity","type":"bytes32"},{"internalType":"uint32","name":"words","type":"uint32"}],"name":"requestRandomness","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"keyHash_","type":"bytes32"},{"internalType":"uint64","name":"sub_","type":"uint64"},{"internalType":"uint16","name":"confirms_","type":"uint16"},{"internalType":"uint32","name":"gasLimit_","type":"uint32"},{"internalType":"uint32","name":"words_","type":"uint32"}],"name":"setDefaults","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a060405234801561001057600080fd5b50604051610f23380380610f2383398101604081905261002f916100ba565b6001600160a01b0381166080526100453361006a565b600780546001600160a01b0319166001600160a01b03929092169190911790556100ea565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100cc57600080fd5b81516001600160a01b03811681146100e357600080fd5b9392505050565b608051610e1761010c600039600081816102f401526103360152610e176000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638da5cb5b1161008c578063d8d178f211610066578063d8d178f2146101af578063ec12ccee146101c2578063f2fde38b146101d5578063fe9fbb80146101e857600080fd5b80638da5cb5b1461016e578063c0ace0e814610189578063d2d0ab911461019c57600080fd5b80633253a68f116100c85780633253a68f146101405780635e3b709f14610153578063715018a61461016657806383e468e41461014057600080fd5b806305b19402146100ef5780631fe543e3146101185780632d1fb3891461012d575b600080fd5b6101026100fd366004610a1d565b610224565b60405161010f9190610a71565b60405180910390f35b61012b610126366004610aa1565b6102e9565b005b61012b61013b366004610b87565b610371565b61012b61014e366004610c01565b6103dc565b61012b610161366004610a1d565b610481565b61012b610505565b6000546040516001600160a01b03909116815260200161010f565b610102610197366004610a1d565b610519565b61012b6101aa366004610c5f565b610588565b6101026101bd366004610a1d565b6105e3565b61012b6101d0366004610cc5565b6105ee565b61012b6101e3366004610cf1565b610686565b6102146101f6366004610cf1565b6001600160a01b031660009081526008602052604090205460ff1690565b604051901515815260200161010f565b600081815260056020526040902060010154606090610100900460ff166102895760405162461bcd60e51b815260206004820152601460248201527352616e646f6d6e657373206e6f7420726561647960601b60448201526064015b60405180910390fd5b600082815260056020908152604091829020805483518184028101840190945280845290918301828280156102dd57602002820191906000526020600020905b8154815260200190600101908083116102c9575b50505050509050919050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103635760405163073e64fd60e21b81523360048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166024820152604401610280565b61036d82826106ff565b5050565b61037961077a565b6001600160a01b038216600081815260086020908152604091829020805460ff19168515159081179091558251938452908301527f2c59b8f31260880424e870332281eba93ddfef67e37d699cebe5a7ba89f7a8a6910160405180910390a15050565b6103e461077a565b6040805160a08101825286815267ffffffffffffffff959095166020860181905261ffff9490941690850181905263ffffffff928316606086018190529190921660809094018490526003949094556004805469ffffffffffffffffffff1916909217600160401b9091021767ffffffffffffffff60501b1916600160501b90930263ffffffff60701b191692909217600160701b909102179055565b6000546001600160a01b03163314806104a957503360009081526008602052604090205460ff165b6104c55760405162461bcd60e51b815260040161028090610d0c565b60035460045461036d91839167ffffffffffffffff81169061ffff600160401b8204169063ffffffff600160501b8204811691600160701b9004166107d4565b61050d61077a565b610517600061096d565b565b6000818152600660205260408120546060910361056a5760405162461bcd60e51b815260206004820152600f60248201526e155b9adb9bdddb881c995c5d595cdd608a1b6044820152606401610280565b60008281526006602052604090205461058290610224565b92915050565b6000546001600160a01b03163314806105b057503360009081526008602052604090205460ff165b6105cc5760405162461bcd60e51b815260040161028090610d0c565b6105da8686868686866107d4565b50505050505050565b606061058282610224565b6000546001600160a01b031633148061061657503360009081526008602052604090205460ff165b6106325760405162461bcd60e51b815260040161028090610d0c565b60035460045461068191849167ffffffffffffffff811690600160401b810461ffff1690869061067190600590600160501b900463ffffffff16610d35565b61067b9190610d66565b866107d4565b505050565b61068e61077a565b6001600160a01b0381166106f35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610280565b6106fc8161096d565b50565b60008281526006602090815260408083205480845260058352922060018101805461ff0019166101001790558351610739928501906109bd565b507ffe697641e2878889b394062f4d8fd7578a58a1f8d439191fae9ac959d54db58181848460405161076d93929190610da0565b60405180910390a1505050565b6000546001600160a01b031633146105175760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610280565b60008681526005602052604081206001015460ff161561085c5760405162461bcd60e51b815260206004820152603960248201527f412072616e646f6d206e756d6265722077617320616c7265616479207265717560448201527f65737420666f722074686520676976656e20656e746974792e000000000000006064820152608401610280565b6007546040516305d3b1d360e41b81526004810188905267ffffffffffffffff8716602482015261ffff8616604482015263ffffffff8086166064830152841660848201526000916001600160a01b031690635d3b1d309060a4016020604051808303816000875af11580156108d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fa9190610dc8565b60008981526005602090815260408083206001908101805460ff1916909117905583835260068252918290208b905581518b81529081018390529192507f3326b09017e0767ae15bd17791916b9d4d9327ce421254835e12b60d8671d2df910160405180910390a1979650505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8280548282559060005260206000209081019282156109f8579160200282015b828111156109f85782518255916020019190600101906109dd565b50610a04929150610a08565b5090565b5b80821115610a045760008155600101610a09565b600060208284031215610a2f57600080fd5b5035919050565b600081518084526020808501945080840160005b83811015610a6657815187529582019590820190600101610a4a565b509495945050505050565b602081526000610a846020830184610a36565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610ab457600080fd5b8235915060208084013567ffffffffffffffff80821115610ad457600080fd5b818601915086601f830112610ae857600080fd5b813581811115610afa57610afa610a8b565b8060051b604051601f19603f83011681018181108582111715610b1f57610b1f610a8b565b604052918252848201925083810185019189831115610b3d57600080fd5b938501935b82851015610b5b57843584529385019392850192610b42565b8096505050505050509250929050565b80356001600160a01b0381168114610b8257600080fd5b919050565b60008060408385031215610b9a57600080fd5b610ba383610b6b565b915060208301358015158114610bb857600080fd5b809150509250929050565b803567ffffffffffffffff81168114610b8257600080fd5b803561ffff81168114610b8257600080fd5b803563ffffffff81168114610b8257600080fd5b600080600080600060a08688031215610c1957600080fd5b85359450610c2960208701610bc3565b9350610c3760408701610bdb565b9250610c4560608701610bed565b9150610c5360808701610bed565b90509295509295909350565b60008060008060008060c08789031215610c7857600080fd5b8635955060208701359450610c8f60408801610bc3565b9350610c9d60608801610bdb565b9250610cab60808801610bed565b9150610cb960a08801610bed565b90509295509295509295565b60008060408385031215610cd857600080fd5b82359150610ce860208401610bed565b90509250929050565b600060208284031215610d0357600080fd5b610a8482610b6b565b6020808252600f908201526e2737ba1020baba3437b934bd32b21760891b604082015260600190565b600063ffffffff80841680610d5a57634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b600063ffffffff80831681851681830481118215151615610d9757634e487b7160e01b600052601160045260246000fd5b02949350505050565b838152826020820152606060408201526000610dbf6060830184610a36565b95945050505050565b600060208284031215610dda57600080fd5b505191905056fea2646970667358221220922d69d4aaa7fc62e64d989f682c5e96f6063af88d8d0c8583bd332a847fbc3a64736f6c634300080e0033000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e69909
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638da5cb5b1161008c578063d8d178f211610066578063d8d178f2146101af578063ec12ccee146101c2578063f2fde38b146101d5578063fe9fbb80146101e857600080fd5b80638da5cb5b1461016e578063c0ace0e814610189578063d2d0ab911461019c57600080fd5b80633253a68f116100c85780633253a68f146101405780635e3b709f14610153578063715018a61461016657806383e468e41461014057600080fd5b806305b19402146100ef5780631fe543e3146101185780632d1fb3891461012d575b600080fd5b6101026100fd366004610a1d565b610224565b60405161010f9190610a71565b60405180910390f35b61012b610126366004610aa1565b6102e9565b005b61012b61013b366004610b87565b610371565b61012b61014e366004610c01565b6103dc565b61012b610161366004610a1d565b610481565b61012b610505565b6000546040516001600160a01b03909116815260200161010f565b610102610197366004610a1d565b610519565b61012b6101aa366004610c5f565b610588565b6101026101bd366004610a1d565b6105e3565b61012b6101d0366004610cc5565b6105ee565b61012b6101e3366004610cf1565b610686565b6102146101f6366004610cf1565b6001600160a01b031660009081526008602052604090205460ff1690565b604051901515815260200161010f565b600081815260056020526040902060010154606090610100900460ff166102895760405162461bcd60e51b815260206004820152601460248201527352616e646f6d6e657373206e6f7420726561647960601b60448201526064015b60405180910390fd5b600082815260056020908152604091829020805483518184028101840190945280845290918301828280156102dd57602002820191906000526020600020905b8154815260200190600101908083116102c9575b50505050509050919050565b336001600160a01b037f000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e6990916146103635760405163073e64fd60e21b81523360048201526001600160a01b037f000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e69909166024820152604401610280565b61036d82826106ff565b5050565b61037961077a565b6001600160a01b038216600081815260086020908152604091829020805460ff19168515159081179091558251938452908301527f2c59b8f31260880424e870332281eba93ddfef67e37d699cebe5a7ba89f7a8a6910160405180910390a15050565b6103e461077a565b6040805160a08101825286815267ffffffffffffffff959095166020860181905261ffff9490941690850181905263ffffffff928316606086018190529190921660809094018490526003949094556004805469ffffffffffffffffffff1916909217600160401b9091021767ffffffffffffffff60501b1916600160501b90930263ffffffff60701b191692909217600160701b909102179055565b6000546001600160a01b03163314806104a957503360009081526008602052604090205460ff165b6104c55760405162461bcd60e51b815260040161028090610d0c565b60035460045461036d91839167ffffffffffffffff81169061ffff600160401b8204169063ffffffff600160501b8204811691600160701b9004166107d4565b61050d61077a565b610517600061096d565b565b6000818152600660205260408120546060910361056a5760405162461bcd60e51b815260206004820152600f60248201526e155b9adb9bdddb881c995c5d595cdd608a1b6044820152606401610280565b60008281526006602052604090205461058290610224565b92915050565b6000546001600160a01b03163314806105b057503360009081526008602052604090205460ff165b6105cc5760405162461bcd60e51b815260040161028090610d0c565b6105da8686868686866107d4565b50505050505050565b606061058282610224565b6000546001600160a01b031633148061061657503360009081526008602052604090205460ff165b6106325760405162461bcd60e51b815260040161028090610d0c565b60035460045461068191849167ffffffffffffffff811690600160401b810461ffff1690869061067190600590600160501b900463ffffffff16610d35565b61067b9190610d66565b866107d4565b505050565b61068e61077a565b6001600160a01b0381166106f35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610280565b6106fc8161096d565b50565b60008281526006602090815260408083205480845260058352922060018101805461ff0019166101001790558351610739928501906109bd565b507ffe697641e2878889b394062f4d8fd7578a58a1f8d439191fae9ac959d54db58181848460405161076d93929190610da0565b60405180910390a1505050565b6000546001600160a01b031633146105175760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610280565b60008681526005602052604081206001015460ff161561085c5760405162461bcd60e51b815260206004820152603960248201527f412072616e646f6d206e756d6265722077617320616c7265616479207265717560448201527f65737420666f722074686520676976656e20656e746974792e000000000000006064820152608401610280565b6007546040516305d3b1d360e41b81526004810188905267ffffffffffffffff8716602482015261ffff8616604482015263ffffffff8086166064830152841660848201526000916001600160a01b031690635d3b1d309060a4016020604051808303816000875af11580156108d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fa9190610dc8565b60008981526005602090815260408083206001908101805460ff1916909117905583835260068252918290208b905581518b81529081018390529192507f3326b09017e0767ae15bd17791916b9d4d9327ce421254835e12b60d8671d2df910160405180910390a1979650505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8280548282559060005260206000209081019282156109f8579160200282015b828111156109f85782518255916020019190600101906109dd565b50610a04929150610a08565b5090565b5b80821115610a045760008155600101610a09565b600060208284031215610a2f57600080fd5b5035919050565b600081518084526020808501945080840160005b83811015610a6657815187529582019590820190600101610a4a565b509495945050505050565b602081526000610a846020830184610a36565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610ab457600080fd5b8235915060208084013567ffffffffffffffff80821115610ad457600080fd5b818601915086601f830112610ae857600080fd5b813581811115610afa57610afa610a8b565b8060051b604051601f19603f83011681018181108582111715610b1f57610b1f610a8b565b604052918252848201925083810185019189831115610b3d57600080fd5b938501935b82851015610b5b57843584529385019392850192610b42565b8096505050505050509250929050565b80356001600160a01b0381168114610b8257600080fd5b919050565b60008060408385031215610b9a57600080fd5b610ba383610b6b565b915060208301358015158114610bb857600080fd5b809150509250929050565b803567ffffffffffffffff81168114610b8257600080fd5b803561ffff81168114610b8257600080fd5b803563ffffffff81168114610b8257600080fd5b600080600080600060a08688031215610c1957600080fd5b85359450610c2960208701610bc3565b9350610c3760408701610bdb565b9250610c4560608701610bed565b9150610c5360808701610bed565b90509295509295909350565b60008060008060008060c08789031215610c7857600080fd5b8635955060208701359450610c8f60408801610bc3565b9350610c9d60608801610bdb565b9250610cab60808801610bed565b9150610cb960a08801610bed565b90509295509295509295565b60008060408385031215610cd857600080fd5b82359150610ce860208401610bed565b90509250929050565b600060208284031215610d0357600080fd5b610a8482610b6b565b6020808252600f908201526e2737ba1020baba3437b934bd32b21760891b604082015260600190565b600063ffffffff80841680610d5a57634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b600063ffffffff80831681851681830481118215151615610d9757634e487b7160e01b600052601160045260246000fd5b02949350505050565b838152826020820152606060408201526000610dbf6060830184610a36565b95945050505050565b600060208284031215610dda57600080fd5b505191905056fea2646970667358221220922d69d4aaa7fc62e64d989f682c5e96f6063af88d8d0c8583bd332a847fbc3a64736f6c634300080e0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e69909
-----Decoded View---------------
Arg [0] : vrfCoordinator_ (address): 0x271682DEB8C4E0901D1a1550aD2e64D568E69909
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e69909
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.