Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Auth | 14532995 | 992 days ago | IN | 0 ETH | 0.00356765 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
RandomV3
Compiler Version
v0.8.7+commit.e28d00a7
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT // An example of a consumer contract that relies on a subscription for funding. pragma solidity ^0.8.7; import "@chainlink/contracts/src/v0.8/interfaces/LinkTokenInterface.sol"; import "@chainlink/contracts/src/v0.8/interfaces/VRFCoordinatorV2Interface.sol"; import "@chainlink/contracts/src/v0.8/VRFConsumerBaseV2.sol"; import "../recovery/recovery.sol"; import "../interfaces/IRNG_single_requestor.sol"; import "../interfaces/IRNG_multi_requestor.sol"; import "../interfaces/IRNG2.sol"; // subscription ID on Rinkeby = 634 contract RandomV3 is VRFConsumerBaseV2, Ownable, IRNG2 { VRFCoordinatorV2Interface COORDINATOR; LinkTokenInterface LINKTOKEN; // Your subscription ID. uint64 s_subscriptionId; // Rinkeby coordinator. For other networks, // see https://docs.chain.link/docs/vrf-contracts/#configurations // address vrfCoordinator = 0x6168499c0cFfCaCD319c818142124B7A15E857ab; // Rinkeby LINK token contract. For other networks, // see https://docs.chain.link/docs/vrf-contracts/#configurations address link; // The gas lane to use, which specifies the maximum gas price to bump to. // For a list of available gas lanes on each network, // see https://docs.chain.link/docs/vrf-contracts/#configurations //bytes32 keyHash = 0xd89b2bf150e3b9e13446986e571fb9cab24b13cea0a43ea20a6049a85cc807cc; bytes32[] keys; // Depends on the number of requested values that you want sent to the // fulfillRandomWords() function. Storing each word costs about 20,000 gas, // so 100,000 is a safe default for this example contract. Test and adjust // this limit based on the network that you select, the size of the request, // and the processing of the callback request in the fulfillRandomWords() // function. uint32 callbackGasLimit = 2000000; // The default is 3, but you can set this higher. uint16 requestConfirmations = 3; // For this example, retrieve 2 random values in one request. // Cannot exceed VRFCoordinatorV2.MAX_NUM_WORDS. //uint32 numWords = 2; //uint256[] public s_randomWords; //bytes32 public s_requestId; constructor(uint64 subscriptionId, address _vrfCoordinator) VRFConsumerBaseV2(_vrfCoordinator) { uint256 id; assembly { id := chainid() } if (id == 4) { keys = [ bytes32(0xd89b2bf150e3b9e13446986e571fb9cab24b13cea0a43ea20a6049a85cc807cc) ]; require(_vrfCoordinator == 0x6168499c0cFfCaCD319c818142124B7A15E857ab,"Incorrect VRF Coordinator for Rinkeby"); link = 0x01BE23585060835E02B77ef475b0Cc51aA1e0709; } else if (id == 1) { link = 0x514910771AF9Ca656af840dff83E8264EcF986CA; require(_vrfCoordinator == 0x271682DEB8C4E0901D1a1550aD2e64D568E69909,"Incorrect VRF Coordinator for MAINNET"); keys = [ bytes32(0x8af398995b04c28e9951adb9721ef74c74f93e6a478f39e7e0777be13527e7ef), bytes32(0xff8dedfbfa60af186cf3c830acbc32c05aae823045ae5ea7da1e45fbfaba4f92), bytes32(0x9fe0eebf5e446e3c998ec9bb19951541aee00bb90ea201ae456421a2ded86805) ]; } else { require(false,"Invalid Chain"); } COORDINATOR = VRFCoordinatorV2Interface(_vrfCoordinator); LINKTOKEN = LinkTokenInterface(link); s_subscriptionId = subscriptionId; } function fulfillRandomWords( uint256 requestId, /* requestId */ uint256[] memory randomWords ) internal override { multiword_responses[requestId] = randomWords; responded[requestId] = true; if (callbacks[requestId]!= address(0)) { IRNG_single_requestor(callbacks[requestId]).process(randomWords[0], requestId); } if (multiword_callbacks[requestId]!= address(0)) { IRNG_multi_requestor(multiword_callbacks[requestId]).multi_process(randomWords, requestId); } emit RandomsReceived(requestId, randomWords); } // Assumes the subscription is funded sufficiently. function requestRandomWords(uint32 numberOfWords, uint speed) external override onlyAuth returns (uint256) { // Will revert if subscription is not set and funded. return _requestRandomWords(numberOfWords, speed); } function requestRandomWordsWithCallback(uint32 numberOfWords, uint speed) external onlyAuth override returns (uint256) { // Will revert if subscription is not set and funded. uint256 requestID = _requestRandomWords(numberOfWords, speed); multiword_callbacks[requestID] = msg.sender; emit MultiWordRequest(msg.sender,numberOfWords,speed,requestID); return requestID; } function _requestRandomWords(uint32 numberOfWords, uint speed) internal returns (uint256){ require(speed < keys.length,"Invalid speed"); bytes32 keyHash = keys[speed]; uint256 reply = COORDINATOR.requestRandomWords( keyHash, s_subscriptionId, requestConfirmations, callbackGasLimit, numberOfWords ); requestIDs.push(reply); return reply; } // from original random //mapping(bytes32=>uint256) public responses; mapping(uint256=>uint256[]) public multiword_responses; mapping(uint256=>bool) public responded; mapping(uint256=>address) public callbacks; mapping(uint256=>address) public multiword_callbacks; uint256[] public requestIDs; event Request(address requestor, uint256 RequestID); event MultiWordRequest(address requestor,uint256 numberOfWords,uint256 speed,uint256 requestID); event RandomsReceived(uint256 requestId, uint256[] randomNumbers); event AuthChanged(address user,bool auth); event AdminChanged(address user,bool auth); mapping(address => bool) public authorised; mapping(address => bool) public admins; modifier onlyAuth { require(authorised[msg.sender],"Not Authorised"); _; } modifier onlyAdmins { require(admins[msg.sender] || msg.sender == owner(),"Not an admin."); _; } function setAuth(address user, bool auth) public override onlyAdmins { authorised[user] = auth; emit AuthChanged(user,auth); } function setAdmin(address user, bool auth) public onlyAdmins { admins[user] = auth; emit AdminChanged(user,auth); } function requestRandomNumber( ) public onlyAuth override returns (uint256) { uint256 requestId = _requestRandomWords(1, 0); emit Request(msg.sender, requestId); return (requestId); } function requestRandomNumberWithCallback( ) public onlyAuth override returns (uint256) { uint256 requestId = _requestRandomWords(1, 0); callbacks[requestId] = msg.sender; emit Request(msg.sender, requestId); return requestId; } function isRequestComplete(uint256 requestId) external view override returns (bool isCompleted) { return responded[requestId]; } function randomNumber(uint256 requestId) external view override returns (uint256 randomNum) { require(this.isRequestComplete(requestId), "Not ready"); return multiword_responses[requestId][0]; } }
// 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); } }
pragma solidity ^0.8.7; // SPDX-Licence-Identifier: RIGHT-CLICK-SAVE-ONLY import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; contract recovery is Ownable { // blackhole prevention methods function retrieveETH() external onlyOwner { (bool sent, ) = payable(msg.sender).call{value: address(this).balance}(""); // don't use send or xfer (gas) require(sent, "Failed to send Ether"); } function retrieveERC20(address _tracker, uint256 amount) external onlyOwner { IERC20(_tracker).transfer(msg.sender, amount); } function retrieve721(address _tracker, uint256 id) external onlyOwner { IERC721(_tracker).transferFrom(address(this), msg.sender, id); } }
pragma solidity ^0.8.7; interface IRNG_single_requestor { function process(uint256 rand, uint256 requestId) external; }
pragma solidity ^0.8.7; interface IRNG_multi_requestor { function multi_process(uint256[] memory randomWords, uint256 _requestId) external; }
pragma solidity ^0.8.7; interface IRNG2 { function requestRandomNumber( ) external returns (uint256); function requestRandomNumberWithCallback( ) external returns (uint256); function isRequestComplete(uint256 requestId) external view returns (bool isCompleted); function randomNumber(uint256 requestId) external view returns (uint256 randomNum); function setAuth(address user, bool grant) external; function requestRandomWords(uint32 numberOfWords, uint speed) external returns (uint256); function requestRandomWordsWithCallback(uint32 numberOfWords, uint speed) external returns (uint256); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// 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 v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint64","name":"subscriptionId","type":"uint64"},{"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":"user","type":"address"},{"indexed":false,"internalType":"bool","name":"auth","type":"bool"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"bool","name":"auth","type":"bool"}],"name":"AuthChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"requestor","type":"address"},{"indexed":false,"internalType":"uint256","name":"numberOfWords","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"speed","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"requestID","type":"uint256"}],"name":"MultiWordRequest","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":"requestId","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"randomNumbers","type":"uint256[]"}],"name":"RandomsReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"requestor","type":"address"},{"indexed":false,"internalType":"uint256","name":"RequestID","type":"uint256"}],"name":"Request","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"admins","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"authorised","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"callbacks","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256"}],"name":"isRequestComplete","outputs":[{"internalType":"bool","name":"isCompleted","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"multiword_callbacks","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"multiword_responses","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256"}],"name":"randomNumber","outputs":[{"internalType":"uint256","name":"randomNum","type":"uint256"}],"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":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"requestIDs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"requestRandomNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"requestRandomNumberWithCallback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"numberOfWords","type":"uint32"},{"internalType":"uint256","name":"speed","type":"uint256"}],"name":"requestRandomWords","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"numberOfWords","type":"uint32"},{"internalType":"uint256","name":"speed","type":"uint256"}],"name":"requestRandomWordsWithCallback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"responded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"auth","type":"bool"}],"name":"setAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"auth","type":"bool"}],"name":"setAuth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a06040526005805465ffffffffffff19166403001e84801790553480156200002757600080fd5b50604051620014a2380380620014a28339810160408190526200004a91620003df565b606081901b6001600160601b031916608052620000673362000328565b4660048114156200015d5760408051602081019091527fd89b2bf150e3b9e13446986e571fb9cab24b13cea0a43ea20a6049a85cc807cc8152620000b090600490600162000378565b50736168499c0cffcacd319c818142124b7a15e857ab6001600160a01b03831614620001315760405162461bcd60e51b815260206004820152602560248201527f496e636f72726563742056524620436f6f7264696e61746f7220666f722052696044820152646e6b65627960d81b60648201526084015b60405180910390fd5b600380546001600160a01b0319167301be23585060835e02b77ef475b0cc51aa1e0709179055620002d4565b80600114156200029b57600380546001600160a01b03191673514910771af9ca656af840dff83e8264ecf986ca17905573271682deb8c4e0901d1a1550ad2e64d568e699096001600160a01b03831614620002095760405162461bcd60e51b815260206004820152602560248201527f496e636f72726563742056524620436f6f7264696e61746f7220666f72204d41604482015264125393915560da1b606482015260840162000128565b604080516060810182527f8af398995b04c28e9951adb9721ef74c74f93e6a478f39e7e0777be13527e7ef81527fff8dedfbfa60af186cf3c830acbc32c05aae823045ae5ea7da1e45fbfaba4f9260208201527f9fe0eebf5e446e3c998ec9bb19951541aee00bb90ea201ae456421a2ded86805918101919091526200029490600490600362000378565b50620002d4565b60405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b21021b430b4b760991b604482015260640162000128565b50600180546001600160a01b039283166001600160a01b0319909116179055600354600280546001600160401b03909416600160a01b026001600160e01b0319909416919092161791909117905562000434565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054828255906000526020600020908101928215620003b6579160200282015b82811115620003b657825182559160200191906001019062000399565b50620003c4929150620003c8565b5090565b5b80821115620003c45760008155600101620003c9565b60008060408385031215620003f357600080fd5b82516001600160401b03811681146200040b57600080fd5b60208401519092506001600160a01b03811681146200042957600080fd5b809150509250929050565b60805160601c6110486200045a600039600081816103eb015261042d01526110486000f3fe608060405234801561001057600080fd5b506004361061011f5760003560e01c80637c7993e0116100ad578063c532bbac11610071578063c532bbac14610299578063d52c8db3146102a1578063d6eb1bbf146102ca578063f2fde38b146102ed578063f970dd021461030057600080fd5b80637c7993e0146102475780638678a7b21461025a5780638da5cb5b14610262578063b009033a14610273578063b561b1bf1461028657600080fd5b8063429b62e5116100f4578063429b62e5146101c55780634ae5d08e146101e85780634b0bddd21461020b578063645cb9c81461021e578063715018a61461023f57600080fd5b806234c3f714610124578062e0d3b51461015c5780630b44a2181461019d5780631fe543e3146101b2575b600080fd5b610147610132366004610dd8565b60076020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61018561016a366004610dd8565b6008602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610153565b6101b06101ab366004610d84565b610313565b005b6101b06101c0366004610e0a565b6103e0565b6101476101d3366004610d69565b600c6020526000908152604090205460ff1681565b6101476101f6366004610dd8565b60009081526007602052604090205460ff1690565b6101b0610219366004610d84565b610468565b61023161022c366004610efd565b610528565b604051908152602001610153565b6101b06105df565b610231610255366004610dd8565b610645565b610231610666565b6000546001600160a01b0316610185565b610231610281366004610edb565b6106e5565b610231610294366004610efd565b610716565b610231610756565b6101856102af366004610dd8565b6009602052600090815260409020546001600160a01b031681565b6101476102d8366004610d69565b600b6020526000908152604090205460ff1681565b6101b06102fb366004610d69565b6107ee565b61023161030e366004610dd8565b6108b9565b336000908152600c602052604090205460ff168061033b57506000546001600160a01b031633145b61037c5760405162461bcd60e51b815260206004820152600d60248201526c2737ba1030b71030b236b4b71760991b60448201526064015b60405180910390fd5b6001600160a01b0382166000818152600b6020908152604091829020805460ff19168515159081179091558251938452908301527f04621c7a72c7e94b37c72039e0f04559298838b45ae5af8bc47d1befd987d09d91015b60405180910390a15050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461045a5760405163073e64fd60e21b81523360048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166024820152604401610373565b6104648282610994565b5050565b336000908152600c602052604090205460ff168061049057506000546001600160a01b031633145b6104cc5760405162461bcd60e51b815260206004820152600d60248201526c2737ba1030b71030b236b4b71760991b6044820152606401610373565b6001600160a01b0382166000818152600c6020908152604091829020805460ff19168515159081179091558251938452908301527f4526a942aaed9ea92b149506bb00ccf0f9267091de10444718cf9b09e05dc68091016103d4565b336000908152600b602052604081205460ff166105575760405162461bcd60e51b815260040161037390610f8f565b60006105638484610b3a565b60008181526009602090815260409182902080546001600160a01b03191633908117909155825190815263ffffffff881691810191909152908101859052606081018290529091507fed07b2aa1aeda82c71431239377d71243b69f540bb0bd5c8ca759f7571c6ba139060800160405180910390a19392505050565b6000546001600160a01b031633146106395760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610373565b6106436000610c9d565b565b600a818154811061065557600080fd5b600091825260209091200154905081565b336000908152600b602052604081205460ff166106955760405162461bcd60e51b815260040161037390610f8f565b60006106a360016000610b3a565b60408051338152602081018390529192507fe31c60e37ab1301f69f01b436a1d13486e6c16cc22c888a08c0e64a39230b6ac91015b60405180910390a1905090565b6006602052816000526040600020818154811061070157600080fd5b90600052602060002001600091509150505481565b336000908152600b602052604081205460ff166107455760405162461bcd60e51b815260040161037390610f8f565b61074f8383610b3a565b9392505050565b336000908152600b602052604081205460ff166107855760405162461bcd60e51b815260040161037390610f8f565b600061079360016000610b3a565b60008181526008602090815260409182902080546001600160a01b0319163390811790915582519081529081018390529192507fe31c60e37ab1301f69f01b436a1d13486e6c16cc22c888a08c0e64a39230b6ac91016106d8565b6000546001600160a01b031633146108485760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610373565b6001600160a01b0381166108ad5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610373565b6108b681610c9d565b50565b604051632572e84760e11b8152600481018290526000903090634ae5d08e9060240160206040518083038186803b1580156108f357600080fd5b505afa158015610907573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092b9190610dbb565b6109635760405162461bcd60e51b81526020600482015260096024820152684e6f7420726561647960b81b6044820152606401610373565b6000828152600660205260408120805490919061098257610982610fd8565b90600052602060002001549050919050565b600082815260066020908152604090912082516109b392840190610ced565b506000828152600760209081526040808320805460ff1916600117905560089091529020546001600160a01b031615610a7a5760008281526008602052604081205482516001600160a01b0390911691633f59165691849190610a1857610a18610fd8565b6020026020010151846040518363ffffffff1660e01b8152600401610a47929190918252602082015260400190565b600060405180830381600087803b158015610a6157600080fd5b505af1158015610a75573d6000803e3d6000fd5b505050505b6000828152600960205260409020546001600160a01b031615610b095760008281526009602052604090819020549051637fc95d8f60e01b81526001600160a01b0390911690637fc95d8f90610ad69084908690600401610f6d565b600060405180830381600087803b158015610af057600080fd5b505af1158015610b04573d6000803e3d6000fd5b505050505b7fcceb37f9411ac3144671d15d439d3569b77d040592b602ba33c146f2f027710082826040516103d4929190610fb7565b6004546000908210610b7e5760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a59081cdc195959609a1b6044820152606401610373565b600060048381548110610b9357610b93610fd8565b60009182526020822001546001546002546005546040516305d3b1d360e41b815260048101859052600160a01b90920467ffffffffffffffff166024830152640100000000810461ffff16604483015263ffffffff9081166064830152881660848201529193506001600160a01b031690635d3b1d309060a401602060405180830381600087803b158015610c2757600080fd5b505af1158015610c3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5f9190610df1565b600a80546001810182556000919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80181905595945050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054828255906000526020600020908101928215610d28579160200282015b82811115610d28578251825591602001919060010190610d0d565b50610d34929150610d38565b5090565b5b80821115610d345760008155600101610d39565b80356001600160a01b0381168114610d6457600080fd5b919050565b600060208284031215610d7b57600080fd5b61074f82610d4d565b60008060408385031215610d9757600080fd5b610da083610d4d565b91506020830135610db081611004565b809150509250929050565b600060208284031215610dcd57600080fd5b815161074f81611004565b600060208284031215610dea57600080fd5b5035919050565b600060208284031215610e0357600080fd5b5051919050565b60008060408385031215610e1d57600080fd5b8235915060208084013567ffffffffffffffff80821115610e3d57600080fd5b818601915086601f830112610e5157600080fd5b813581811115610e6357610e63610fee565b8060051b604051601f19603f83011681018181108582111715610e8857610e88610fee565b604052828152858101935084860182860187018b1015610ea757600080fd5b600095505b83861015610eca578035855260019590950194938601938601610eac565b508096505050505050509250929050565b60008060408385031215610eee57600080fd5b50508035926020909101359150565b60008060408385031215610f1057600080fd5b823563ffffffff81168114610f2457600080fd5b946020939093013593505050565b600081518084526020808501945080840160005b83811015610f6257815187529582019590820190600101610f46565b509495945050505050565b604081526000610f806040830185610f32565b90508260208301529392505050565b6020808252600e908201526d139bdd08105d5d1a1bdc9a5cd95960921b604082015260600190565b828152604060208201526000610fd06040830184610f32565b949350505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b80151581146108b657600080fdfea264697066735822122099ac68c2f93bbf082c886855ee2113c26de35467f8afefd4cb93d54b7c65e39b64736f6c634300080700330000000000000000000000000000000000000000000000000000000000000007000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e69909
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061011f5760003560e01c80637c7993e0116100ad578063c532bbac11610071578063c532bbac14610299578063d52c8db3146102a1578063d6eb1bbf146102ca578063f2fde38b146102ed578063f970dd021461030057600080fd5b80637c7993e0146102475780638678a7b21461025a5780638da5cb5b14610262578063b009033a14610273578063b561b1bf1461028657600080fd5b8063429b62e5116100f4578063429b62e5146101c55780634ae5d08e146101e85780634b0bddd21461020b578063645cb9c81461021e578063715018a61461023f57600080fd5b806234c3f714610124578062e0d3b51461015c5780630b44a2181461019d5780631fe543e3146101b2575b600080fd5b610147610132366004610dd8565b60076020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61018561016a366004610dd8565b6008602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610153565b6101b06101ab366004610d84565b610313565b005b6101b06101c0366004610e0a565b6103e0565b6101476101d3366004610d69565b600c6020526000908152604090205460ff1681565b6101476101f6366004610dd8565b60009081526007602052604090205460ff1690565b6101b0610219366004610d84565b610468565b61023161022c366004610efd565b610528565b604051908152602001610153565b6101b06105df565b610231610255366004610dd8565b610645565b610231610666565b6000546001600160a01b0316610185565b610231610281366004610edb565b6106e5565b610231610294366004610efd565b610716565b610231610756565b6101856102af366004610dd8565b6009602052600090815260409020546001600160a01b031681565b6101476102d8366004610d69565b600b6020526000908152604090205460ff1681565b6101b06102fb366004610d69565b6107ee565b61023161030e366004610dd8565b6108b9565b336000908152600c602052604090205460ff168061033b57506000546001600160a01b031633145b61037c5760405162461bcd60e51b815260206004820152600d60248201526c2737ba1030b71030b236b4b71760991b60448201526064015b60405180910390fd5b6001600160a01b0382166000818152600b6020908152604091829020805460ff19168515159081179091558251938452908301527f04621c7a72c7e94b37c72039e0f04559298838b45ae5af8bc47d1befd987d09d91015b60405180910390a15050565b336001600160a01b037f000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e69909161461045a5760405163073e64fd60e21b81523360048201526001600160a01b037f000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e69909166024820152604401610373565b6104648282610994565b5050565b336000908152600c602052604090205460ff168061049057506000546001600160a01b031633145b6104cc5760405162461bcd60e51b815260206004820152600d60248201526c2737ba1030b71030b236b4b71760991b6044820152606401610373565b6001600160a01b0382166000818152600c6020908152604091829020805460ff19168515159081179091558251938452908301527f4526a942aaed9ea92b149506bb00ccf0f9267091de10444718cf9b09e05dc68091016103d4565b336000908152600b602052604081205460ff166105575760405162461bcd60e51b815260040161037390610f8f565b60006105638484610b3a565b60008181526009602090815260409182902080546001600160a01b03191633908117909155825190815263ffffffff881691810191909152908101859052606081018290529091507fed07b2aa1aeda82c71431239377d71243b69f540bb0bd5c8ca759f7571c6ba139060800160405180910390a19392505050565b6000546001600160a01b031633146106395760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610373565b6106436000610c9d565b565b600a818154811061065557600080fd5b600091825260209091200154905081565b336000908152600b602052604081205460ff166106955760405162461bcd60e51b815260040161037390610f8f565b60006106a360016000610b3a565b60408051338152602081018390529192507fe31c60e37ab1301f69f01b436a1d13486e6c16cc22c888a08c0e64a39230b6ac91015b60405180910390a1905090565b6006602052816000526040600020818154811061070157600080fd5b90600052602060002001600091509150505481565b336000908152600b602052604081205460ff166107455760405162461bcd60e51b815260040161037390610f8f565b61074f8383610b3a565b9392505050565b336000908152600b602052604081205460ff166107855760405162461bcd60e51b815260040161037390610f8f565b600061079360016000610b3a565b60008181526008602090815260409182902080546001600160a01b0319163390811790915582519081529081018390529192507fe31c60e37ab1301f69f01b436a1d13486e6c16cc22c888a08c0e64a39230b6ac91016106d8565b6000546001600160a01b031633146108485760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610373565b6001600160a01b0381166108ad5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610373565b6108b681610c9d565b50565b604051632572e84760e11b8152600481018290526000903090634ae5d08e9060240160206040518083038186803b1580156108f357600080fd5b505afa158015610907573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092b9190610dbb565b6109635760405162461bcd60e51b81526020600482015260096024820152684e6f7420726561647960b81b6044820152606401610373565b6000828152600660205260408120805490919061098257610982610fd8565b90600052602060002001549050919050565b600082815260066020908152604090912082516109b392840190610ced565b506000828152600760209081526040808320805460ff1916600117905560089091529020546001600160a01b031615610a7a5760008281526008602052604081205482516001600160a01b0390911691633f59165691849190610a1857610a18610fd8565b6020026020010151846040518363ffffffff1660e01b8152600401610a47929190918252602082015260400190565b600060405180830381600087803b158015610a6157600080fd5b505af1158015610a75573d6000803e3d6000fd5b505050505b6000828152600960205260409020546001600160a01b031615610b095760008281526009602052604090819020549051637fc95d8f60e01b81526001600160a01b0390911690637fc95d8f90610ad69084908690600401610f6d565b600060405180830381600087803b158015610af057600080fd5b505af1158015610b04573d6000803e3d6000fd5b505050505b7fcceb37f9411ac3144671d15d439d3569b77d040592b602ba33c146f2f027710082826040516103d4929190610fb7565b6004546000908210610b7e5760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a59081cdc195959609a1b6044820152606401610373565b600060048381548110610b9357610b93610fd8565b60009182526020822001546001546002546005546040516305d3b1d360e41b815260048101859052600160a01b90920467ffffffffffffffff166024830152640100000000810461ffff16604483015263ffffffff9081166064830152881660848201529193506001600160a01b031690635d3b1d309060a401602060405180830381600087803b158015610c2757600080fd5b505af1158015610c3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5f9190610df1565b600a80546001810182556000919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80181905595945050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054828255906000526020600020908101928215610d28579160200282015b82811115610d28578251825591602001919060010190610d0d565b50610d34929150610d38565b5090565b5b80821115610d345760008155600101610d39565b80356001600160a01b0381168114610d6457600080fd5b919050565b600060208284031215610d7b57600080fd5b61074f82610d4d565b60008060408385031215610d9757600080fd5b610da083610d4d565b91506020830135610db081611004565b809150509250929050565b600060208284031215610dcd57600080fd5b815161074f81611004565b600060208284031215610dea57600080fd5b5035919050565b600060208284031215610e0357600080fd5b5051919050565b60008060408385031215610e1d57600080fd5b8235915060208084013567ffffffffffffffff80821115610e3d57600080fd5b818601915086601f830112610e5157600080fd5b813581811115610e6357610e63610fee565b8060051b604051601f19603f83011681018181108582111715610e8857610e88610fee565b604052828152858101935084860182860187018b1015610ea757600080fd5b600095505b83861015610eca578035855260019590950194938601938601610eac565b508096505050505050509250929050565b60008060408385031215610eee57600080fd5b50508035926020909101359150565b60008060408385031215610f1057600080fd5b823563ffffffff81168114610f2457600080fd5b946020939093013593505050565b600081518084526020808501945080840160005b83811015610f6257815187529582019590820190600101610f46565b509495945050505050565b604081526000610f806040830185610f32565b90508260208301529392505050565b6020808252600e908201526d139bdd08105d5d1a1bdc9a5cd95960921b604082015260600190565b828152604060208201526000610fd06040830184610f32565b949350505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b80151581146108b657600080fdfea264697066735822122099ac68c2f93bbf082c886855ee2113c26de35467f8afefd4cb93d54b7c65e39b64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000007000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e69909
-----Decoded View---------------
Arg [0] : subscriptionId (uint64): 7
Arg [1] : _vrfCoordinator (address): 0x271682DEB8C4E0901D1a1550aD2e64D568E69909
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [1] : 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.