More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 556 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Submit Etf Appli... | 18447167 | 265 days ago | IN | 0 ETH | 0.00250466 | ||||
Submit Etf Appli... | 18447144 | 265 days ago | IN | 0 ETH | 0.00226725 | ||||
Submit Etf Appli... | 18423921 | 268 days ago | IN | 0 ETH | 0.00384128 | ||||
Submit Etf Appli... | 18419001 | 269 days ago | IN | 0 ETH | 0.00423909 | ||||
Submit Etf Appli... | 18418852 | 269 days ago | IN | 0 ETH | 0.0043328 | ||||
Submit Etf Appli... | 18413051 | 269 days ago | IN | 0 ETH | 0.00429137 | ||||
Submit Etf Appli... | 18413032 | 269 days ago | IN | 0 ETH | 0.00469188 | ||||
Submit Etf Appli... | 18413016 | 269 days ago | IN | 0 ETH | 0.00405229 | ||||
Submit Etf Appli... | 18413008 | 269 days ago | IN | 0 ETH | 0.00399067 | ||||
Submit Etf Appli... | 18405979 | 270 days ago | IN | 0 ETH | 0.00201859 | ||||
Submit Etf Appli... | 18402754 | 271 days ago | IN | 0 ETH | 0.00168685 | ||||
Submit Etf Appli... | 18401273 | 271 days ago | IN | 0 ETH | 0.00259636 | ||||
Submit Etf Appli... | 18400177 | 271 days ago | IN | 0 ETH | 0.00303758 | ||||
Submit Etf Appli... | 18399357 | 271 days ago | IN | 0 ETH | 0.00283886 | ||||
Submit Etf Appli... | 18399344 | 271 days ago | IN | 0 ETH | 0.00254252 | ||||
Submit Etf Appli... | 18399337 | 271 days ago | IN | 0 ETH | 0.00251496 | ||||
Submit Etf Appli... | 18398696 | 271 days ago | IN | 0 ETH | 0.00203174 | ||||
Submit Etf Appli... | 18392253 | 272 days ago | IN | 0 ETH | 0.00353301 | ||||
Submit Etf Appli... | 18391239 | 272 days ago | IN | 0 ETH | 0.00356364 | ||||
Submit Etf Appli... | 18388097 | 273 days ago | IN | 0 ETH | 0.00300817 | ||||
Submit Etf Appli... | 18386575 | 273 days ago | IN | 0 ETH | 0.00262004 | ||||
Submit Etf Appli... | 18385989 | 273 days ago | IN | 0 ETH | 0.00252186 | ||||
Submit Etf Appli... | 18385979 | 273 days ago | IN | 0 ETH | 0.00267373 | ||||
Submit Etf Appli... | 18385959 | 273 days ago | IN | 0 ETH | 0.00279299 | ||||
Submit Etf Appli... | 18385951 | 273 days ago | IN | 0 ETH | 0.00308231 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
ETFApplicationGame
Compiler Version
v0.8.21+commit.d9974bed
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-09-27 */ // SPDX-License-Identifier: Unlicensed pragma solidity ^0.8.21; // apply.etf.live /** **************************************************************************** * @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); } } 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; } /** *Submitted for verification at Etherscan.io on 2023-08-25 */ pragma solidity ^0.8.0; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } library Address { function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } 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. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling 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); } } interface IERC20 { /** * @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); /** * @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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount) external returns (bool); } 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); } contract ETFApplicationGame is VRFConsumerBaseV2, Ownable { address public gameToken = 0x667210a731447F8B385e068205759BE2311b86d4; // ETF The Token VRFCoordinatorV2Interface vrfCoord; LinkTokenInterface link; uint64 private _vrfSubscriptionId; bytes32 private _vrfKeyHash; uint16 private _vrfNumBlocks = 3; uint32 private _vrfCallbackGasLimit = 600000; mapping(uint256 => address) private _applicationWagerInitUser; mapping(uint256 => uint256) private _applicationWagerInitAmount; mapping(uint256 => uint256) private _applicationWagerInitNonce; mapping(uint256 => bool) private _applicationWagerInitSettled; mapping(address => uint256) public userWagerNonce; uint256 public poolSize; uint256 public maxWagerPercentage; uint256 private constant PERCENT_DENOMENATOR = 1000; uint256 public minBetAmount; uint256 public payoutPercentage = (PERCENT_DENOMENATOR * 92) / 100; uint256 public applicationsApproved; uint256 public applicationsDenied; uint256 public applicationAmountWon; uint256 public applicationAmountLost; mapping(address => uint256) public applicationsUserWon; mapping(address => uint256) public applicationsUserLost; mapping(address => uint256) public applicationUserAmountWon; mapping(address => uint256) public applicationUserAmountLost; mapping(address => bool) public lastApplicationWon; event InitiatedApplication( address indexed wagerer, uint256 indexed nonce, uint256 requestId, uint256 amountWagered ); event SettledApplication( address indexed wagerer, uint256 indexed nonce, uint256 requestId, uint256 amountWagered, bool isWinner, uint256 amountWon ); constructor( address _vrfCoordinator, uint64 _subscriptionId, address _linkToken, bytes32 _keyHash ) VRFConsumerBaseV2(_vrfCoordinator) { vrfCoord = VRFCoordinatorV2Interface(_vrfCoordinator); link = LinkTokenInterface(_linkToken); _vrfSubscriptionId = _subscriptionId; _vrfKeyHash = _keyHash; } function setMaxWagerPercentage(uint256 _maxWagerPercentage) external onlyOwner { maxWagerPercentage = _maxWagerPercentage; } function resetPoolSize() external onlyOwner { poolSize = IERC20(gameToken).balanceOf(address(this)); } function setMinBetAmount(uint256 _minBetAmount) external onlyOwner { minBetAmount = _minBetAmount; } function submitEtfApplication(uint256 amountBet) external payable { require(IERC20(gameToken).balanceOf(msg.sender) > 0, 'must have a bag to wager'); require( amountBet <= (poolSize * maxWagerPercentage) / 100, 'cannot exceed max wager' ); require(amountBet >= minBetAmount, 'bet more'); IERC20(gameToken).transferFrom(msg.sender, address(this), amountBet); uint256 requestId = vrfCoord.requestRandomWords( _vrfKeyHash, _vrfSubscriptionId, _vrfNumBlocks, _vrfCallbackGasLimit, uint16(1) ); _applicationWagerInitUser[requestId] = msg.sender; _applicationWagerInitAmount[requestId] = amountBet; _applicationWagerInitNonce[requestId] = userWagerNonce[msg.sender]; userWagerNonce[msg.sender]++; emit InitiatedApplication( msg.sender, _applicationWagerInitNonce[requestId], requestId, amountBet ); } function fulfillRandomWords(uint256 requestId, uint256[] memory randomWords) internal override { _settleEtfApplication(requestId, randomWords[0]); } function manualFulfillRandomWords( uint256 requestId, uint256[] memory randomWords ) external onlyOwner { _settleEtfApplication(requestId, randomWords[0]); } function _settleEtfApplication(uint256 requestId, uint256 randomNumber) internal { address _user = _applicationWagerInitUser[requestId]; require(_user != address(0), 'ETF application record does not exist'); require(!_applicationWagerInitSettled[requestId], 'already settled'); _applicationWagerInitSettled[requestId] = true; uint256 amountBet = _applicationWagerInitAmount[requestId]; uint256 _nonce = _applicationWagerInitNonce[requestId]; uint256 _amountToWin = (amountBet * payoutPercentage) / PERCENT_DENOMENATOR; uint256 amountPayout = amountBet + _amountToWin; bool _didUserWin = randomNumber % 2 == 0; if (_didUserWin) { IERC20(gameToken).transfer(_user, amountPayout); applicationsApproved++; applicationAmountWon += _amountToWin; applicationsUserWon[_user]++; applicationUserAmountWon[_user] += _amountToWin; lastApplicationWon[_user] = true; poolSize = IERC20(gameToken).balanceOf(address(this)); } else { applicationsDenied++; applicationAmountLost += amountBet; applicationsUserLost[_user]++; applicationUserAmountLost[_user] += amountBet; lastApplicationWon[_user] = false; poolSize = IERC20(gameToken).balanceOf(address(this)); } emit SettledApplication( _user, _nonce, requestId, amountBet, _didUserWin, _amountToWin ); } function setPayoutPercentage(uint256 _percentage) external onlyOwner { require(_percentage <= PERCENT_DENOMENATOR, 'cannot exceed 100%'); payoutPercentage = _percentage; } function getMaxWager() external view returns (uint256) { return (poolSize * maxWagerPercentage) / 100; } function setGameToken(address _token) external onlyOwner { gameToken = _token; } function setVrfSubscriptionId(uint64 _subId) external onlyOwner { _vrfSubscriptionId = _subId; } function setVrfNumBlocks(uint16 _numBlocks) external onlyOwner { _vrfNumBlocks = _numBlocks; } function setVrfCallbackGasLimit(uint32 _gas) external onlyOwner { _vrfCallbackGasLimit = _gas; } function withdrawGameTokens(uint256 amountToWithdraw) external onlyOwner { IERC20(gameToken).transfer(msg.sender, amountToWithdraw); poolSize = IERC20(gameToken).balanceOf(address(this)); } function withdrawEth() external onlyOwner { uint256 ethBalance = address(this).balance; if (ethBalance > 0) { payable(msg.sender).transfer(ethBalance); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_vrfCoordinator","type":"address"},{"internalType":"uint64","name":"_subscriptionId","type":"uint64"},{"internalType":"address","name":"_linkToken","type":"address"},{"internalType":"bytes32","name":"_keyHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"have","type":"address"},{"internalType":"address","name":"want","type":"address"}],"name":"OnlyCoordinatorCanFulfill","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wagerer","type":"address"},{"indexed":true,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"requestId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWagered","type":"uint256"}],"name":"InitiatedApplication","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":true,"internalType":"address","name":"wagerer","type":"address"},{"indexed":true,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"requestId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWagered","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isWinner","type":"bool"},{"indexed":false,"internalType":"uint256","name":"amountWon","type":"uint256"}],"name":"SettledApplication","type":"event"},{"inputs":[],"name":"applicationAmountLost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"applicationAmountWon","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"applicationUserAmountLost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"applicationUserAmountWon","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"applicationsApproved","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"applicationsDenied","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"applicationsUserLost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"applicationsUserWon","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gameToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxWager","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastApplicationWon","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256"},{"internalType":"uint256[]","name":"randomWords","type":"uint256[]"}],"name":"manualFulfillRandomWords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxWagerPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minBetAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payoutPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolSize","outputs":[{"internalType":"uint256","name":"","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":[],"name":"resetPoolSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"setGameToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWagerPercentage","type":"uint256"}],"name":"setMaxWagerPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minBetAmount","type":"uint256"}],"name":"setMinBetAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percentage","type":"uint256"}],"name":"setPayoutPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_gas","type":"uint32"}],"name":"setVrfCallbackGasLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_numBlocks","type":"uint16"}],"name":"setVrfNumBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"_subId","type":"uint64"}],"name":"setVrfSubscriptionId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountBet","type":"uint256"}],"name":"submitEtfApplication","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userWagerNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToWithdraw","type":"uint256"}],"name":"withdrawGameTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a0604052600180546001600160a01b03191673667210a731447f8b385e068205759be2311b86d417905560058054640927c0000365ffffffffffff199091161790556064620000536103e8605c6200014f565b6200005f919062000179565b600e553480156200006e575f80fd5b5060405162001692380380620016928339810160408190526200009191620001b5565b6001600160a01b038416608052620000a93362000100565b600280546001600160a01b039586166001600160a01b0319909116179055600380546001600160401b03909416600160a01b026001600160e01b031990941692909416919091179190911790915560045562000211565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80820281158282048414176200017357634e487b7160e01b5f52601160045260245ffd5b92915050565b5f826200019457634e487b7160e01b5f52601260045260245ffd5b500490565b80516001600160a01b0381168114620001b0575f80fd5b919050565b5f805f8060808587031215620001c9575f80fd5b620001d48562000199565b60208601519094506001600160401b0381168114620001f1575f80fd5b9250620002016040860162000199565b6060959095015193969295505050565b608051611461620002315f395f81816106ae01526106f001526114615ff3fe6080604052600436106101db575f3560e01c8063770f27d4116100fd578063c3dfdae611610092578063e791041411610062578063e791041414610550578063f081030914610565578063f2fde38b14610584578063fa968eea146105a3575f80fd5b8063c3dfdae6146104a9578063c84f032d146104c8578063de0c3c5014610506578063e74e05ee14610525575f80fd5b806396601924116100cd578063966019241461044f578063a0ef91df1461046e578063aa8562d514610482578063c2acf8fb14610495575f80fd5b8063770f27d4146103cd57806380d29e66146103ec5780638ac402591461040b5780638da5cb5b1461041f575f80fd5b80633d93be9f116101735780636bd907a4116101435780636bd907a41461035a5780636c1885931461036f5780636e8a47901461038e578063715018a6146103b9575f80fd5b80633d93be9f146102dc5780634ec18db91461030757806358686a991461031c5780635a405c871461033b575f80fd5b806328bab6a2116101ae57806328bab6a214610272578063290ee5c9146102875780632a8873991461029c57806332e2d4f2146102b1575f80fd5b8063059bae49146101df578063199d0a5b146102075780631b1e020c146102285780631fe543e314610253575b5f80fd5b3480156101ea575f80fd5b506101f4600c5481565b6040519081526020015b60405180910390f35b348015610212575f80fd5b506102266102213660046111c3565b6105b8565b005b348015610233575f80fd5b506101f46102423660046111da565b60146020525f908152604090205481565b34801561025e575f80fd5b5061022661026d36600461121b565b6106a3565b34801561027d575f80fd5b506101f460125481565b348015610292575f80fd5b506101f4600e5481565b3480156102a7575f80fd5b506101f4600f5481565b3480156102bc575f80fd5b506101f46102cb3660046111da565b60136020525f908152604090205481565b3480156102e7575f80fd5b506101f46102f63660046111da565b600a6020525f908152604090205481565b348015610312575f80fd5b506101f4600b5481565b348015610327575f80fd5b506102266103363660046111c3565b610730565b348015610346575f80fd5b506102266103553660046112e0565b610784565b348015610365575f80fd5b506101f460105481565b34801561037a575f80fd5b506102266103893660046111c3565b6107b0565b348015610399575f80fd5b506101f46103a83660046111da565b60156020525f908152604090205481565b3480156103c4575f80fd5b506102266107bd565b3480156103d8575f80fd5b506102266103e73660046111c3565b6107d0565b3480156103f7575f80fd5b506102266104063660046111da565b6107dd565b348015610416575f80fd5b506101f4610807565b34801561042a575f80fd5b505f546001600160a01b03165b6040516001600160a01b0390911681526020016101fe565b34801561045a575f80fd5b50610226610469366004611303565b610829565b348015610479575f80fd5b50610226610849565b6102266104903660046111c3565b610885565b3480156104a0575f80fd5b50610226610bb9565b3480156104b4575f80fd5b50600154610437906001600160a01b031681565b3480156104d3575f80fd5b506104f66104e23660046111da565b60176020525f908152604090205460ff1681565b60405190151581526020016101fe565b348015610511575f80fd5b5061022661052036600461121b565b610c30565b348015610530575f80fd5b506101f461053f3660046111da565b60166020525f908152604090205481565b34801561055b575f80fd5b506101f460115481565b348015610570575f80fd5b5061022661057f366004611324565b610c5b565b34801561058f575f80fd5b5061022661059e3660046111da565b610c91565b3480156105ae575f80fd5b506101f4600d5481565b6105c0610d07565b60015460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303815f875af115801561060e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610632919061134b565b506001546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610679573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061069d919061136a565b600b5550565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107225760405163073e64fd60e21b81523360048201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660248201526044015b60405180910390fd5b61072c8282610c38565b5050565b610738610d07565b6103e881111561077f5760405162461bcd60e51b815260206004820152601260248201527163616e6e6f7420657863656564203130302560701b6044820152606401610719565b600e55565b61078c610d07565b6005805463ffffffff909216620100000265ffffffff000019909216919091179055565b6107b8610d07565b600d55565b6107c5610d07565b6107ce5f610d60565b565b6107d8610d07565b600c55565b6107e5610d07565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b5f6064600c54600b5461081a9190611395565b61082491906113c6565b905090565b610831610d07565b6005805461ffff191661ffff92909216919091179055565b610851610d07565b47801561088257604051339082156108fc029083905f818181858888f1935050505015801561072c573d5f803e3d5ffd5b50565b6001546040516370a0823160e01b81523360048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa1580156108cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108ef919061136a565b1161093c5760405162461bcd60e51b815260206004820152601860248201527f6d757374206861766520612062616720746f20776167657200000000000000006044820152606401610719565b6064600c54600b5461094e9190611395565b61095891906113c6565b8111156109a75760405162461bcd60e51b815260206004820152601760248201527f63616e6e6f7420657863656564206d61782077616765720000000000000000006044820152606401610719565b600d548110156109e45760405162461bcd60e51b8152602060048201526008602482015267626574206d6f726560c01b6044820152606401610719565b6001546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd906064016020604051808303815f875af1158015610a38573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a5c919061134b565b50600254600480546003546005546040516305d3b1d360e41b815293840192909252600160a01b900467ffffffffffffffff16602483015261ffff8116604483015262010000900463ffffffff166064820152600160848201525f916001600160a01b031690635d3b1d309060a4016020604051808303815f875af1158015610ae7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b0b919061136a565b5f81815260066020908152604080832080546001600160a01b0319163390811790915560078352818420879055808452600a80845282852080548787526008865293862084905591855290925292935090610b65836113d9565b90915550505f818152600860209081526040918290205482518481529182018590529133917fd1abcb896eedfaa8bdec74a0926bb80b6971b08840f795a648da0d90f8e142e4910160405180910390a35050565b610bc1610d07565b6001546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610c07573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c2b919061136a565b600b55565b610c38610d07565b61072c82825f81518110610c4e57610c4e6113f1565b6020026020010151610daf565b610c63610d07565b6003805467ffffffffffffffff909216600160a01b0267ffffffffffffffff60a01b19909216919091179055565b610c99610d07565b6001600160a01b038116610cfe5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610719565b61088281610d60565b5f546001600160a01b031633146107ce5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610719565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f828152600660205260409020546001600160a01b031680610e215760405162461bcd60e51b815260206004820152602560248201527f455446206170706c69636174696f6e207265636f726420646f6573206e6f7420604482015264195e1a5cdd60da1b6064820152608401610719565b5f8381526009602052604090205460ff1615610e715760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e481cd95d1d1b1959608a1b6044820152606401610719565b5f838152600960209081526040808320805460ff1916600117905560078252808320546008909252822054600e54919290916103e890610eb19085611395565b610ebb91906113c6565b90505f610ec88285611405565b90505f610ed6600288611418565b15905080156110605760015460405163a9059cbb60e01b81526001600160a01b038881166004830152602482018590529091169063a9059cbb906044016020604051808303815f875af1158015610f2f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f53919061134b565b50600f8054905f610f63836113d9565b91905055508260115f828254610f799190611405565b90915550506001600160a01b0386165f908152601360205260408120805491610fa1836113d9565b90915550506001600160a01b0386165f9081526015602052604081208054859290610fcd908490611405565b90915550506001600160a01b038681165f9081526017602052604090819020805460ff191660019081179091555490516370a0823160e01b81523060048201529116906370a0823190602401602060405180830381865afa158015611034573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611058919061136a565b600b55611164565b60108054905f61106f836113d9565b91905055508460125f8282546110859190611405565b90915550506001600160a01b0386165f9081526014602052604081208054916110ad836113d9565b90915550506001600160a01b0386165f90815260166020526040812080548792906110d9908490611405565b90915550506001600160a01b038681165f9081526017602052604090819020805460ff1916905560015490516370a0823160e01b81523060048201529116906370a0823190602401602060405180830381865afa15801561113c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611160919061136a565b600b555b60408051898152602081018790528215158183015260608101859052905185916001600160a01b038916917f70bb88e44cc0bfb0899c7262abe2898bb6bbee1870ac14f832a4b3e5dc57bb399181900360800190a35050505050505050565b5f602082840312156111d3575f80fd5b5035919050565b5f602082840312156111ea575f80fd5b81356001600160a01b0381168114611200575f80fd5b9392505050565b634e487b7160e01b5f52604160045260245ffd5b5f806040838503121561122c575f80fd5b8235915060208084013567ffffffffffffffff8082111561124b575f80fd5b818601915086601f83011261125e575f80fd5b81358181111561127057611270611207565b8060051b604051601f19603f8301168101818110858211171561129557611295611207565b6040529182528482019250838101850191898311156112b2575f80fd5b938501935b828510156112d0578435845293850193928501926112b7565b8096505050505050509250929050565b5f602082840312156112f0575f80fd5b813563ffffffff81168114611200575f80fd5b5f60208284031215611313575f80fd5b813561ffff81168114611200575f80fd5b5f60208284031215611334575f80fd5b813567ffffffffffffffff81168114611200575f80fd5b5f6020828403121561135b575f80fd5b81518015158114611200575f80fd5b5f6020828403121561137a575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176113ac576113ac611381565b92915050565b634e487b7160e01b5f52601260045260245ffd5b5f826113d4576113d46113b2565b500490565b5f600182016113ea576113ea611381565b5060010190565b634e487b7160e01b5f52603260045260245ffd5b808201808211156113ac576113ac611381565b5f82611426576114266113b2565b50069056fea2646970667358221220da3d5944a8368ab591b08b5ecae79cdb6a990a079c14eddc3a11e14245fb769b64736f6c63430008150033000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e69909000000000000000000000000000000000000000000000000000000000000034c000000000000000000000000514910771af9ca656af840dff83e8264ecf986caff8dedfbfa60af186cf3c830acbc32c05aae823045ae5ea7da1e45fbfaba4f92
Deployed Bytecode
0x6080604052600436106101db575f3560e01c8063770f27d4116100fd578063c3dfdae611610092578063e791041411610062578063e791041414610550578063f081030914610565578063f2fde38b14610584578063fa968eea146105a3575f80fd5b8063c3dfdae6146104a9578063c84f032d146104c8578063de0c3c5014610506578063e74e05ee14610525575f80fd5b806396601924116100cd578063966019241461044f578063a0ef91df1461046e578063aa8562d514610482578063c2acf8fb14610495575f80fd5b8063770f27d4146103cd57806380d29e66146103ec5780638ac402591461040b5780638da5cb5b1461041f575f80fd5b80633d93be9f116101735780636bd907a4116101435780636bd907a41461035a5780636c1885931461036f5780636e8a47901461038e578063715018a6146103b9575f80fd5b80633d93be9f146102dc5780634ec18db91461030757806358686a991461031c5780635a405c871461033b575f80fd5b806328bab6a2116101ae57806328bab6a214610272578063290ee5c9146102875780632a8873991461029c57806332e2d4f2146102b1575f80fd5b8063059bae49146101df578063199d0a5b146102075780631b1e020c146102285780631fe543e314610253575b5f80fd5b3480156101ea575f80fd5b506101f4600c5481565b6040519081526020015b60405180910390f35b348015610212575f80fd5b506102266102213660046111c3565b6105b8565b005b348015610233575f80fd5b506101f46102423660046111da565b60146020525f908152604090205481565b34801561025e575f80fd5b5061022661026d36600461121b565b6106a3565b34801561027d575f80fd5b506101f460125481565b348015610292575f80fd5b506101f4600e5481565b3480156102a7575f80fd5b506101f4600f5481565b3480156102bc575f80fd5b506101f46102cb3660046111da565b60136020525f908152604090205481565b3480156102e7575f80fd5b506101f46102f63660046111da565b600a6020525f908152604090205481565b348015610312575f80fd5b506101f4600b5481565b348015610327575f80fd5b506102266103363660046111c3565b610730565b348015610346575f80fd5b506102266103553660046112e0565b610784565b348015610365575f80fd5b506101f460105481565b34801561037a575f80fd5b506102266103893660046111c3565b6107b0565b348015610399575f80fd5b506101f46103a83660046111da565b60156020525f908152604090205481565b3480156103c4575f80fd5b506102266107bd565b3480156103d8575f80fd5b506102266103e73660046111c3565b6107d0565b3480156103f7575f80fd5b506102266104063660046111da565b6107dd565b348015610416575f80fd5b506101f4610807565b34801561042a575f80fd5b505f546001600160a01b03165b6040516001600160a01b0390911681526020016101fe565b34801561045a575f80fd5b50610226610469366004611303565b610829565b348015610479575f80fd5b50610226610849565b6102266104903660046111c3565b610885565b3480156104a0575f80fd5b50610226610bb9565b3480156104b4575f80fd5b50600154610437906001600160a01b031681565b3480156104d3575f80fd5b506104f66104e23660046111da565b60176020525f908152604090205460ff1681565b60405190151581526020016101fe565b348015610511575f80fd5b5061022661052036600461121b565b610c30565b348015610530575f80fd5b506101f461053f3660046111da565b60166020525f908152604090205481565b34801561055b575f80fd5b506101f460115481565b348015610570575f80fd5b5061022661057f366004611324565b610c5b565b34801561058f575f80fd5b5061022661059e3660046111da565b610c91565b3480156105ae575f80fd5b506101f4600d5481565b6105c0610d07565b60015460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303815f875af115801561060e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610632919061134b565b506001546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610679573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061069d919061136a565b600b5550565b336001600160a01b037f000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e6990916146107225760405163073e64fd60e21b81523360048201526001600160a01b037f000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e699091660248201526044015b60405180910390fd5b61072c8282610c38565b5050565b610738610d07565b6103e881111561077f5760405162461bcd60e51b815260206004820152601260248201527163616e6e6f7420657863656564203130302560701b6044820152606401610719565b600e55565b61078c610d07565b6005805463ffffffff909216620100000265ffffffff000019909216919091179055565b6107b8610d07565b600d55565b6107c5610d07565b6107ce5f610d60565b565b6107d8610d07565b600c55565b6107e5610d07565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b5f6064600c54600b5461081a9190611395565b61082491906113c6565b905090565b610831610d07565b6005805461ffff191661ffff92909216919091179055565b610851610d07565b47801561088257604051339082156108fc029083905f818181858888f1935050505015801561072c573d5f803e3d5ffd5b50565b6001546040516370a0823160e01b81523360048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa1580156108cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108ef919061136a565b1161093c5760405162461bcd60e51b815260206004820152601860248201527f6d757374206861766520612062616720746f20776167657200000000000000006044820152606401610719565b6064600c54600b5461094e9190611395565b61095891906113c6565b8111156109a75760405162461bcd60e51b815260206004820152601760248201527f63616e6e6f7420657863656564206d61782077616765720000000000000000006044820152606401610719565b600d548110156109e45760405162461bcd60e51b8152602060048201526008602482015267626574206d6f726560c01b6044820152606401610719565b6001546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd906064016020604051808303815f875af1158015610a38573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a5c919061134b565b50600254600480546003546005546040516305d3b1d360e41b815293840192909252600160a01b900467ffffffffffffffff16602483015261ffff8116604483015262010000900463ffffffff166064820152600160848201525f916001600160a01b031690635d3b1d309060a4016020604051808303815f875af1158015610ae7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b0b919061136a565b5f81815260066020908152604080832080546001600160a01b0319163390811790915560078352818420879055808452600a80845282852080548787526008865293862084905591855290925292935090610b65836113d9565b90915550505f818152600860209081526040918290205482518481529182018590529133917fd1abcb896eedfaa8bdec74a0926bb80b6971b08840f795a648da0d90f8e142e4910160405180910390a35050565b610bc1610d07565b6001546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610c07573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c2b919061136a565b600b55565b610c38610d07565b61072c82825f81518110610c4e57610c4e6113f1565b6020026020010151610daf565b610c63610d07565b6003805467ffffffffffffffff909216600160a01b0267ffffffffffffffff60a01b19909216919091179055565b610c99610d07565b6001600160a01b038116610cfe5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610719565b61088281610d60565b5f546001600160a01b031633146107ce5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610719565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f828152600660205260409020546001600160a01b031680610e215760405162461bcd60e51b815260206004820152602560248201527f455446206170706c69636174696f6e207265636f726420646f6573206e6f7420604482015264195e1a5cdd60da1b6064820152608401610719565b5f8381526009602052604090205460ff1615610e715760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e481cd95d1d1b1959608a1b6044820152606401610719565b5f838152600960209081526040808320805460ff1916600117905560078252808320546008909252822054600e54919290916103e890610eb19085611395565b610ebb91906113c6565b90505f610ec88285611405565b90505f610ed6600288611418565b15905080156110605760015460405163a9059cbb60e01b81526001600160a01b038881166004830152602482018590529091169063a9059cbb906044016020604051808303815f875af1158015610f2f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f53919061134b565b50600f8054905f610f63836113d9565b91905055508260115f828254610f799190611405565b90915550506001600160a01b0386165f908152601360205260408120805491610fa1836113d9565b90915550506001600160a01b0386165f9081526015602052604081208054859290610fcd908490611405565b90915550506001600160a01b038681165f9081526017602052604090819020805460ff191660019081179091555490516370a0823160e01b81523060048201529116906370a0823190602401602060405180830381865afa158015611034573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611058919061136a565b600b55611164565b60108054905f61106f836113d9565b91905055508460125f8282546110859190611405565b90915550506001600160a01b0386165f9081526014602052604081208054916110ad836113d9565b90915550506001600160a01b0386165f90815260166020526040812080548792906110d9908490611405565b90915550506001600160a01b038681165f9081526017602052604090819020805460ff1916905560015490516370a0823160e01b81523060048201529116906370a0823190602401602060405180830381865afa15801561113c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611160919061136a565b600b555b60408051898152602081018790528215158183015260608101859052905185916001600160a01b038916917f70bb88e44cc0bfb0899c7262abe2898bb6bbee1870ac14f832a4b3e5dc57bb399181900360800190a35050505050505050565b5f602082840312156111d3575f80fd5b5035919050565b5f602082840312156111ea575f80fd5b81356001600160a01b0381168114611200575f80fd5b9392505050565b634e487b7160e01b5f52604160045260245ffd5b5f806040838503121561122c575f80fd5b8235915060208084013567ffffffffffffffff8082111561124b575f80fd5b818601915086601f83011261125e575f80fd5b81358181111561127057611270611207565b8060051b604051601f19603f8301168101818110858211171561129557611295611207565b6040529182528482019250838101850191898311156112b2575f80fd5b938501935b828510156112d0578435845293850193928501926112b7565b8096505050505050509250929050565b5f602082840312156112f0575f80fd5b813563ffffffff81168114611200575f80fd5b5f60208284031215611313575f80fd5b813561ffff81168114611200575f80fd5b5f60208284031215611334575f80fd5b813567ffffffffffffffff81168114611200575f80fd5b5f6020828403121561135b575f80fd5b81518015158114611200575f80fd5b5f6020828403121561137a575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176113ac576113ac611381565b92915050565b634e487b7160e01b5f52601260045260245ffd5b5f826113d4576113d46113b2565b500490565b5f600182016113ea576113ea611381565b5060010190565b634e487b7160e01b5f52603260045260245ffd5b808201808211156113ac576113ac611381565b5f82611426576114266113b2565b50069056fea2646970667358221220da3d5944a8368ab591b08b5ecae79cdb6a990a079c14eddc3a11e14245fb769b64736f6c63430008150033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e69909000000000000000000000000000000000000000000000000000000000000034c000000000000000000000000514910771af9ca656af840dff83e8264ecf986caff8dedfbfa60af186cf3c830acbc32c05aae823045ae5ea7da1e45fbfaba4f92
-----Decoded View---------------
Arg [0] : _vrfCoordinator (address): 0x271682DEB8C4E0901D1a1550aD2e64D568E69909
Arg [1] : _subscriptionId (uint64): 844
Arg [2] : _linkToken (address): 0x514910771AF9Ca656af840dff83E8264EcF986CA
Arg [3] : _keyHash (bytes32): 0xff8dedfbfa60af186cf3c830acbc32c05aae823045ae5ea7da1e45fbfaba4f92
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e69909
Arg [1] : 000000000000000000000000000000000000000000000000000000000000034c
Arg [2] : 000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca
Arg [3] : ff8dedfbfa60af186cf3c830acbc32c05aae823045ae5ea7da1e45fbfaba4f92
Deployed Bytecode Sourcemap
25861:6343:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26589:33;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;26589:33:0;;;;;;;;31811:202;;;;;;;;;;-1:-1:-1;31811:202:0;;;;;:::i;:::-;;:::i;:::-;;27004:55;;;;;;;;;;-1:-1:-1;27004:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;6775:261;;;;;;;;;;-1:-1:-1;6775:261:0;;;;;:::i;:::-;;:::i;26904:36::-;;;;;;;;;;;;;;;;26715:66;;;;;;;;;;;;;;;;26786:35;;;;;;;;;;;;;;;;26945:54;;;;;;;;;;-1:-1:-1;26945:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;26505:49;;;;;;;;;;-1:-1:-1;26505:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;26561:23;;;;;;;;;;;;;;;;31081:184;;;;;;;;;;-1:-1:-1;31081:184:0;;;;;:::i;:::-;;:::i;31701:104::-;;;;;;;;;;-1:-1:-1;31701:104:0;;;;;:::i;:::-;;:::i;26826:33::-;;;;;;;;;;;;;;;;28187:108;;;;;;;;;;-1:-1:-1;28187:108:0;;;;;:::i;:::-;;:::i;27064:59::-;;;;;;;;;;-1:-1:-1;27064:59:0;;;;;:::i;:::-;;;;;;;;;;;;;;21297:103;;;;;;;;;;;;;:::i;27933:132::-;;;;;;;;;;-1:-1:-1;27933:132:0;;;;;:::i;:::-;;:::i;31389:88::-;;;;;;;;;;-1:-1:-1;31389:88:0;;;;;:::i;:::-;;:::i;31271:112::-;;;;;;;;;;;;;:::i;20656:87::-;;;;;;;;;;-1:-1:-1;20702:7:0;20729:6;-1:-1:-1;;;;;20729:6:0;20656:87;;;-1:-1:-1;;;;;2437:32:1;;;2419:51;;2407:2;2392:18;20656:87:0;2273:203:1;31593:102:0;;;;;;;;;;-1:-1:-1;31593:102:0;;;;;:::i;:::-;;:::i;32019:182::-;;;;;;;;;;;;;:::i;28301:947::-;;;;;;:::i;:::-;;:::i;28071:110::-;;;;;;;;;;;;;:::i;25924:69::-;;;;;;;;;;-1:-1:-1;25924:69:0;;;;-1:-1:-1;;;;;25924:69:0;;;27193:50;;;;;;;;;;-1:-1:-1;27193:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2923:14:1;;2916:22;2898:41;;2886:2;2871:18;27193:50:0;2758:187:1;29429:178:0;;;;;;;;;;-1:-1:-1;29429:178:0;;;;;:::i;:::-;;:::i;27128:60::-;;;;;;;;;;-1:-1:-1;27128:60:0;;;;;:::i;:::-;;;;;;;;;;;;;;26864:35;;;;;;;;;;;;;;;;31483:104;;;;;;;;;;-1:-1:-1;31483:104:0;;;;;:::i;:::-;;:::i;21555:201::-;;;;;;;;;;-1:-1:-1;21555:201:0;;;;;:::i;:::-;;:::i;26683:27::-;;;;;;;;;;;;;;;;31811:202;20542:13;:11;:13::i;:::-;31898:9:::1;::::0;31891:56:::1;::::0;-1:-1:-1;;;31891:56:0;;31918:10:::1;31891:56;::::0;::::1;3413:51:1::0;3480:18;;;3473:34;;;-1:-1:-1;;;;;31898:9:0;;::::1;::::0;31891:26:::1;::::0;3386:18:1;;31891:56:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;31972:9:0::1;::::0;31965:42:::1;::::0;-1:-1:-1;;;31965:42:0;;32001:4:::1;31965:42;::::0;::::1;2419:51:1::0;-1:-1:-1;;;;;31972:9:0;;::::1;::::0;31965:27:::1;::::0;2392:18:1;;31965:42:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31954:8;:53:::0;-1:-1:-1;31811:202:0:o;6775:261::-;6875:10;-1:-1:-1;;;;;6889:14:0;6875:28;;6871:111;;6921:53;;-1:-1:-1;;;6921:53:0;;6947:10;6921:53;;;4201:34:1;-1:-1:-1;;;;;6959:14:0;4271:15:1;4251:18;;;4244:43;4136:18;;6921:53:0;;;;;;;;6871:111;6988:42;7007:9;7018:11;6988:18;:42::i;:::-;6775:261;;:::o;31081:184::-;20542:13;:11;:13::i;:::-;26674:4:::1;31165:11;:34;;31157:65;;;::::0;-1:-1:-1;;;31157:65:0;;4500:2:1;31157:65:0::1;::::0;::::1;4482:21:1::0;4539:2;4519:18;;;4512:30;-1:-1:-1;;;4558:18:1;;;4551:48;4616:18;;31157:65:0::1;4298:342:1::0;31157:65:0::1;31229:16;:30:::0;31081:184::o;31701:104::-;20542:13;:11;:13::i;:::-;31772:20:::1;:27:::0;;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;31772:27:0;;::::1;::::0;;;::::1;::::0;;31701:104::o;28187:108::-;20542:13;:11;:13::i;:::-;28261:12:::1;:28:::0;28187:108::o;21297:103::-;20542:13;:11;:13::i;:::-;21362:30:::1;21389:1;21362:18;:30::i;:::-;21297:103::o:0;27933:132::-;20542:13;:11;:13::i;:::-;28019:18:::1;:40:::0;27933:132::o;31389:88::-;20542:13;:11;:13::i;:::-;31453:9:::1;:18:::0;;-1:-1:-1;;;;;;31453:18:0::1;-1:-1:-1::0;;;;;31453:18:0;;;::::1;::::0;;;::::1;::::0;;31389:88::o;31271:112::-;31317:7;31374:3;31352:18;;31341:8;;:29;;;;:::i;:::-;31340:37;;;;:::i;:::-;31333:44;;31271:112;:::o;31593:102::-;20542:13;:11;:13::i;:::-;31663::::1;:26:::0;;-1:-1:-1;;31663:26:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;31593:102::o;32019:182::-;20542:13;:11;:13::i;:::-;32089:21:::1;32121:14:::0;;32117:79:::1;;32148:40;::::0;32156:10:::1;::::0;32148:40;::::1;;;::::0;32177:10;;32148:40:::1;::::0;;;32177:10;32156;32148:40;::::1;;;;;;;;;;;;;::::0;::::1;;;;32117:79;32061:140;32019:182::o:0;28301:947::-;28389:9;;28382:39;;-1:-1:-1;;;28382:39:0;;28410:10;28382:39;;;2419:51:1;28424:1:0;;-1:-1:-1;;;;;28389:9:0;;28382:27;;2392:18:1;;28382:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;28374:80;;;;-1:-1:-1;;;28374:80:0;;5409:2:1;28374:80:0;;;5391:21:1;5448:2;5428:18;;;5421:30;5487:26;5467:18;;;5460:54;5531:18;;28374:80:0;5207:348:1;28374:80:0;28524:3;28502:18;;28491:8;;:29;;;;:::i;:::-;28490:37;;;;:::i;:::-;28477:9;:50;;28461:107;;;;-1:-1:-1;;;28461:107:0;;5762:2:1;28461:107:0;;;5744:21:1;5801:2;5781:18;;;5774:30;5840:25;5820:18;;;5813:53;5883:18;;28461:107:0;5560:347:1;28461:107:0;28596:12;;28583:9;:25;;28575:46;;;;-1:-1:-1;;;28575:46:0;;6114:2:1;28575:46:0;;;6096:21:1;6153:1;6133:18;;;6126:29;-1:-1:-1;;;6171:18:1;;;6164:38;6219:18;;28575:46:0;5912:331:1;28575:46:0;28637:9;;28630:68;;-1:-1:-1;;;28630:68:0;;28661:10;28630:68;;;6488:34:1;28681:4:0;6538:18:1;;;6531:43;6590:18;;;6583:34;;;-1:-1:-1;;;;;28637:9:0;;;;28630:30;;6423:18:1;;28630:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;28727:8:0;;28763:11;;;28783:18;;28810:13;;28727:150;;-1:-1:-1;;;28727:150:0;;;;;6879:25:1;;;;-1:-1:-1;;;28783:18:0;;;;6920::1;;;6913:59;28810:13:0;;;7013:18:1;;;7006:43;28832:20:0;;;;;7065:18:1;;;7058:51;28727:8:0;7125:19:1;;;7118:44;28707:17:0;;-1:-1:-1;;;;;28727:8:0;;:27;;6851:19:1;;28727:150:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28886:36;;;;:25;:36;;;;;;;;:49;;-1:-1:-1;;;;;;28886:49:0;28925:10;28886:49;;;;;;28942:27;:38;;;;;:50;;;29039:26;;;:14;:26;;;;;;;;28999:37;;;:26;:37;;;;;:66;;;29072:26;;;;;;28707:170;;-1:-1:-1;29039:26:0;29072:28;29039:26;29072:28;:::i;:::-;;;;-1:-1:-1;;29162:37:0;;;;:26;:37;;;;;;;;;;29114:128;;7487:25:1;;;7528:18;;;7521:34;;;29162:37:0;29143:10;;29114:128;;7460:18:1;29114:128:0;;;;;;;28367:881;28301:947;:::o;28071:110::-;20542:13;:11;:13::i;:::-;28140:9:::1;::::0;28133:42:::1;::::0;-1:-1:-1;;;28133:42:0;;28169:4:::1;28133:42;::::0;::::1;2419:51:1::0;-1:-1:-1;;;;;28140:9:0;;::::1;::::0;28133:27:::1;::::0;2392:18:1;;28133:42:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28122:8;:53:::0;28071:110::o;29429:178::-;20542:13;:11;:13::i;:::-;29553:48:::1;29575:9;29586:11;29598:1;29586:14;;;;;;;;:::i;:::-;;;;;;;29553:21;:48::i;31483:104::-:0;20542:13;:11;:13::i;:::-;31554:18:::1;:27:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;31554:27:0::1;-1:-1:-1::0;;;;31554:27:0;;::::1;::::0;;;::::1;::::0;;31483:104::o;21555:201::-;20542:13;:11;:13::i;:::-;-1:-1:-1;;;;;21644:22:0;::::1;21636:73;;;::::0;-1:-1:-1;;;21636:73:0;;7900:2:1;21636:73:0::1;::::0;::::1;7882:21:1::0;7939:2;7919:18;;;7912:30;7978:34;7958:18;;;7951:62;-1:-1:-1;;;8029:18:1;;;8022:36;8075:19;;21636:73:0::1;7698:402:1::0;21636:73:0::1;21720:28;21739:8;21720:18;:28::i;20821:132::-:0;20702:7;20729:6;-1:-1:-1;;;;;20729:6:0;11770:10;20885:23;20877:68;;;;-1:-1:-1;;;20877:68:0;;8307:2:1;20877:68:0;;;8289:21:1;;;8326:18;;;8319:30;8385:34;8365:18;;;8358:62;8437:18;;20877:68:0;8105:356:1;21916:191:0;21990:16;22009:6;;-1:-1:-1;;;;;22026:17:0;;;-1:-1:-1;;;;;;22026:17:0;;;;;;22059:40;;22009:6;;;;;;;22059:40;;21990:16;22059:40;21979:128;21916:191;:::o;29613:1462::-;29701:13;29717:36;;;:25;:36;;;;;;-1:-1:-1;;;;;29717:36:0;;29760:69;;;;-1:-1:-1;;;29760:69:0;;8668:2:1;29760:69:0;;;8650:21:1;8707:2;8687:18;;;8680:30;8746:34;8726:18;;;8719:62;-1:-1:-1;;;8797:18:1;;;8790:35;8842:19;;29760:69:0;8466:401:1;29760:69:0;29845:39;;;;:28;:39;;;;;;;;29844:40;29836:68;;;;-1:-1:-1;;;29836:68:0;;9074:2:1;29836:68:0;;;9056:21:1;9113:2;9093:18;;;9086:30;-1:-1:-1;;;9132:18:1;;;9125:45;9187:18;;29836:68:0;8872:339:1;29836:68:0;29911:39;;;;:28;:39;;;;;;;;:46;;-1:-1:-1;;29911:46:0;29953:4;29911:46;;;29986:27;:38;;;;;;30048:26;:37;;;;;;30128:16;;29986:38;;30048:37;;26674:4;;30116:28;;29986:38;30116:28;:::i;:::-;30115:59;;;;:::i;:::-;30092:82;-1:-1:-1;30181:20:0;30204:24;30092:82;30204:9;:24;:::i;:::-;30181:47;-1:-1:-1;30235:16:0;30254;30269:1;30254:12;:16;:::i;:::-;:21;;-1:-1:-1;30284:643:0;;;;30317:9;;30310:47;;-1:-1:-1;;;30310:47:0;;-1:-1:-1;;;;;3431:32:1;;;30310:47:0;;;3413:51:1;3480:18;;;3473:34;;;30317:9:0;;;;30310:26;;3386:18:1;;30310:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;30366:20:0;:22;;;:20;:22;;;:::i;:::-;;;;;;30421:12;30397:20;;:36;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;30442:26:0;;;;;;:19;:26;;;;;:28;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;30479:31:0;;;;;;:24;:31;;;;;:47;;30514:12;;30479:31;:47;;30514:12;;30479:47;:::i;:::-;;;;-1:-1:-1;;;;;;;30535:25:0;;;;;;;:18;:25;;;;;;;:32;;-1:-1:-1;;30535:32:0;30563:4;30535:32;;;;;;30594:9;30587:42;;-1:-1:-1;;;30587:42:0;;30623:4;30587:42;;;2419:51:1;30594:9:0;;;30587:27;;2392:18:1;;30587:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30576:8;:53;30284:643;;;30654:18;:20;;;:18;:20;;;:::i;:::-;;;;;;30708:9;30683:21;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;30726:27:0;;;;;;:20;:27;;;;;:29;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;30764:32:0;;;;;;:25;:32;;;;;:45;;30800:9;;30764:32;:45;;30800:9;;30764:45;:::i;:::-;;;;-1:-1:-1;;;;;;;30818:25:0;;;30846:5;30818:25;;;:18;:25;;;;;;;:33;;-1:-1:-1;;30818:33:0;;;-1:-1:-1;30878:9:0;30871:42;;-1:-1:-1;;;30871:42:0;;30907:4;30871:42;;;2419:51:1;30878:9:0;;;30871:27;;2392:18:1;;30871:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30860:8;:53;30284:643;30938:131;;;9688:25:1;;;9744:2;9729:18;;9722:34;;;9799:14;;9792:22;9772:18;;;9765:50;9846:2;9831:18;;9824:34;;;30938:131:0;;30979:6;;-1:-1:-1;;;;;30938:131:0;;;;;;;;9675:3:1;30938:131:0;;;29694:1381;;;;;;29613:1462;;:::o;196:180:1:-;255:6;308:2;296:9;287:7;283:23;279:32;276:52;;;324:1;321;314:12;276:52;-1:-1:-1;347:23:1;;196:180;-1:-1:-1;196:180:1:o;381:286::-;440:6;493:2;481:9;472:7;468:23;464:32;461:52;;;509:1;506;499:12;461:52;535:23;;-1:-1:-1;;;;;587:31:1;;577:42;;567:70;;633:1;630;623:12;567:70;656:5;381:286;-1:-1:-1;;;381:286:1:o;672:127::-;733:10;728:3;724:20;721:1;714:31;764:4;761:1;754:15;788:4;785:1;778:15;804:1183;897:6;905;958:2;946:9;937:7;933:23;929:32;926:52;;;974:1;971;964:12;926:52;1010:9;997:23;987:33;;1039:2;1092;1081:9;1077:18;1064:32;1115:18;1156:2;1148:6;1145:14;1142:34;;;1172:1;1169;1162:12;1142:34;1210:6;1199:9;1195:22;1185:32;;1255:7;1248:4;1244:2;1240:13;1236:27;1226:55;;1277:1;1274;1267:12;1226:55;1313:2;1300:16;1335:2;1331;1328:10;1325:36;;;1341:18;;:::i;:::-;1387:2;1384:1;1380:10;1419:2;1413:9;1482:2;1478:7;1473:2;1469;1465:11;1461:25;1453:6;1449:38;1537:6;1525:10;1522:22;1517:2;1505:10;1502:18;1499:46;1496:72;;;1548:18;;:::i;:::-;1584:2;1577:22;1634:18;;;1668:15;;;;-1:-1:-1;1710:11:1;;;1706:20;;;1738:19;;;1735:39;;;1770:1;1767;1760:12;1735:39;1794:11;;;;1814:142;1830:6;1825:3;1822:15;1814:142;;;1896:17;;1884:30;;1847:12;;;;1934;;;;1814:142;;;1975:6;1965:16;;;;;;;;804:1183;;;;;:::o;1992:276::-;2050:6;2103:2;2091:9;2082:7;2078:23;2074:32;2071:52;;;2119:1;2116;2109:12;2071:52;2158:9;2145:23;2208:10;2201:5;2197:22;2190:5;2187:33;2177:61;;2234:1;2231;2224:12;2481:272;2539:6;2592:2;2580:9;2571:7;2567:23;2563:32;2560:52;;;2608:1;2605;2598:12;2560:52;2647:9;2634:23;2697:6;2690:5;2686:18;2679:5;2676:29;2666:57;;2719:1;2716;2709:12;2950:284;3008:6;3061:2;3049:9;3040:7;3036:23;3032:32;3029:52;;;3077:1;3074;3067:12;3029:52;3116:9;3103:23;3166:18;3159:5;3155:30;3148:5;3145:41;3135:69;;3200:1;3197;3190:12;3518:277;3585:6;3638:2;3626:9;3617:7;3613:23;3609:32;3606:52;;;3654:1;3651;3644:12;3606:52;3686:9;3680:16;3739:5;3732:13;3725:21;3718:5;3715:32;3705:60;;3761:1;3758;3751:12;3800:184;3870:6;3923:2;3911:9;3902:7;3898:23;3894:32;3891:52;;;3939:1;3936;3929:12;3891:52;-1:-1:-1;3962:16:1;;3800:184;-1:-1:-1;3800:184:1:o;4645:127::-;4706:10;4701:3;4697:20;4694:1;4687:31;4737:4;4734:1;4727:15;4761:4;4758:1;4751:15;4777:168;4850:9;;;4881;;4898:15;;;4892:22;;4878:37;4868:71;;4919:18;;:::i;:::-;4777:168;;;;:::o;4950:127::-;5011:10;5006:3;5002:20;4999:1;4992:31;5042:4;5039:1;5032:15;5066:4;5063:1;5056:15;5082:120;5122:1;5148;5138:35;;5153:18;;:::i;:::-;-1:-1:-1;5187:9:1;;5082:120::o;7173:135::-;7212:3;7233:17;;;7230:43;;7253:18;;:::i;:::-;-1:-1:-1;7300:1:1;7289:13;;7173:135::o;7566:127::-;7627:10;7622:3;7618:20;7615:1;7608:31;7658:4;7655:1;7648:15;7682:4;7679:1;7672:15;9216:125;9281:9;;;9302:10;;;9299:36;;;9315:18;;:::i;9346:112::-;9378:1;9404;9394:35;;9409:18;;:::i;:::-;-1:-1:-1;9443:9:1;;9346:112::o
Swarm Source
ipfs://da3d5944a8368ab591b08b5ecae79cdb6a990a079c14eddc3a11e14245fb769b
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $0.006052 | 30,153.7807 | $182.49 |
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.