Polygon Sponsored slots available. Book your slot here!
Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Contract Name:
GalaxyLottoGame
Compiler Version
v0.8.11+commit.d7f03943
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./ConfirmedOwnerWithProposal.sol"; /** * @title The ConfirmedOwner contract * @notice A contract with helpers for basic contract ownership. */ contract ConfirmedOwner is ConfirmedOwnerWithProposal { constructor(address newOwner) ConfirmedOwnerWithProposal(newOwner, address(0)) {} }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./interfaces/OwnableInterface.sol"; /** * @title The ConfirmedOwner contract * @notice A contract with helpers for basic contract ownership. */ contract ConfirmedOwnerWithProposal is OwnableInterface { address private s_owner; address private s_pendingOwner; event OwnershipTransferRequested(address indexed from, address indexed to); event OwnershipTransferred(address indexed from, address indexed to); constructor(address newOwner, address pendingOwner) { require(newOwner != address(0), "Cannot set owner to zero"); s_owner = newOwner; if (pendingOwner != address(0)) { _transferOwnership(pendingOwner); } } /** * @notice Allows an owner to begin transferring ownership to a new address, * pending. */ function transferOwnership(address to) public override onlyOwner { _transferOwnership(to); } /** * @notice Allows an ownership transfer to be completed by the recipient. */ function acceptOwnership() external override { require(msg.sender == s_pendingOwner, "Must be proposed owner"); address oldOwner = s_owner; s_owner = msg.sender; s_pendingOwner = address(0); emit OwnershipTransferred(oldOwner, msg.sender); } /** * @notice Get the current owner */ function owner() public view override returns (address) { return s_owner; } /** * @notice validate, transfer ownership, and emit relevant events */ function _transferOwnership(address to) private { require(to != msg.sender, "Cannot transfer to self"); s_pendingOwner = to; emit OwnershipTransferRequested(s_owner, to); } /** * @notice validate access */ function _validateOwnership() internal view { require(msg.sender == s_owner, "Only callable by owner"); } /** * @notice Reverts if called by anyone other than the contract owner. */ modifier onlyOwner() { _validateOwnership(); _; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface AggregatorV3Interface { function decimals() external view returns (uint8); function description() external view returns (string memory); function version() external view returns (uint256); function getRoundData(uint80 _roundId) external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); function latestRoundData() external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface OwnableInterface { function owner() external returns (address); function transferOwnership(address recipient) external; function acceptOwnership() external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface VRFCoordinatorV2Interface { /** * @notice Get configuration relevant for making requests * @return minimumRequestConfirmations global min for request confirmations * @return maxGasLimit global max for request gas limit * @return s_provingKeyHashes list of registered key hashes */ function getRequestConfig() external view returns ( uint16, uint32, bytes32[] memory ); /** * @notice Request a set of random words. * @param keyHash - Corresponds to a particular oracle job which uses * that key for generating the VRF proof. Different keyHash's have different gas price * ceilings, so you can select a specific one to bound your maximum per request cost. * @param subId - The ID of the VRF subscription. Must be funded * with the minimum subscription balance required for the selected keyHash. * @param minimumRequestConfirmations - How many blocks you'd like the * oracle to wait before responding to the request. See SECURITY CONSIDERATIONS * for why you may want to request more. The acceptable range is * [minimumRequestBlockConfirmations, 200]. * @param callbackGasLimit - How much gas you'd like to receive in your * fulfillRandomWords callback. Note that gasleft() inside fulfillRandomWords * may be slightly less than this amount because of gas used calling the function * (argument decoding etc.), so you may need to request slightly more than you expect * to have inside fulfillRandomWords. The acceptable range is * [0, maxGasLimit] * @param numWords - The number of uint256 random values you'd like to receive * in your fulfillRandomWords callback. Note these numbers are expanded in a * secure way by the VRFCoordinator from a single random value supplied by the oracle. * @return requestId - A unique identifier of the request. Can be used to match * a request to a response in fulfillRandomWords. */ function requestRandomWords( bytes32 keyHash, uint64 subId, uint16 minimumRequestConfirmations, uint32 callbackGasLimit, uint32 numWords ) external returns (uint256 requestId); /** * @notice Create a VRF subscription. * @return subId - A unique subscription id. * @dev You can manage the consumer set dynamically with addConsumer/removeConsumer. * @dev Note to fund the subscription, use transferAndCall. For example * @dev LINKTOKEN.transferAndCall( * @dev address(COORDINATOR), * @dev amount, * @dev abi.encode(subId)); */ function createSubscription() external returns (uint64 subId); /** * @notice Get a VRF subscription. * @param subId - ID of the subscription * @return balance - LINK balance of the subscription in juels. * @return reqCount - number of requests for this subscription, determines fee tier. * @return owner - owner of the subscription. * @return consumers - list of consumer address which are able to use this subscription. */ function getSubscription(uint64 subId) external view returns ( uint96 balance, uint64 reqCount, address owner, address[] memory consumers ); /** * @notice Request subscription owner transfer. * @param subId - ID of the subscription * @param newOwner - proposed new owner of the subscription */ function requestSubscriptionOwnerTransfer(uint64 subId, address newOwner) external; /** * @notice Request subscription owner transfer. * @param subId - ID of the subscription * @dev will revert if original owner of subId has * not requested that msg.sender become the new owner. */ function acceptSubscriptionOwnerTransfer(uint64 subId) external; /** * @notice Add a consumer to a VRF subscription. * @param subId - ID of the subscription * @param consumer - New consumer which can use the subscription */ function addConsumer(uint64 subId, address consumer) external; /** * @notice Remove a consumer from a VRF subscription. * @param subId - ID of the subscription * @param consumer - Consumer to remove from the subscription */ function removeConsumer(uint64 subId, address consumer) external; /** * @notice Cancel a subscription * @param subId - ID of the subscription * @param to - Where to send the remaining LINK to */ function cancelSubscription(uint64 subId, address to) external; /* * @notice Check to see if there exists a request commitment consumers * for all consumers and keyhashes for a given sub. * @param subId - ID of the subscription * @return true if there exists at least one unfulfilled request for the subscription, false * otherwise. */ function pendingRequestExists(uint64 subId) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; /** **************************************************************************** * @notice Interface for contracts using VRF randomness * ***************************************************************************** * @dev PURPOSE * * @dev Reggie the Random Oracle (not his real job) wants to provide randomness * @dev to Vera the verifier in such a way that Vera can be sure he's not * @dev making his output up to suit himself. Reggie provides Vera a public key * @dev to which he knows the secret key. Each time Vera provides a seed to * @dev Reggie, he gives back a value which is computed completely * @dev deterministically from the seed and the secret key. * * @dev Reggie provides a proof by which Vera can verify that the output was * @dev correctly computed once Reggie tells it to her, but without that proof, * @dev the output is indistinguishable to her from a uniform random sample * @dev from the output space. * * @dev The purpose of this contract is to make it easy for unrelated contracts * @dev to talk to Vera the verifier about the work Reggie is doing, to provide * @dev simple access to a verifiable source of randomness. It ensures 2 things: * @dev 1. The fulfillment came from the VRFCoordinator * @dev 2. The consumer contract implements fulfillRandomWords. * ***************************************************************************** * @dev USAGE * * @dev Calling contracts must inherit from VRFConsumerBase, and can * @dev initialize VRFConsumerBase's attributes in their constructor as * @dev shown: * * @dev contract VRFConsumer { * @dev constructor(<other arguments>, address _vrfCoordinator, address _link) * @dev VRFConsumerBase(_vrfCoordinator) public { * @dev <initialization with other arguments goes here> * @dev } * @dev } * * @dev The oracle will have given you an ID for the VRF keypair they have * @dev committed to (let's call it keyHash). Create subscription, fund it * @dev and your consumer contract as a consumer of it (see VRFCoordinatorInterface * @dev subscription management functions). * @dev Call requestRandomWords(keyHash, subId, minimumRequestConfirmations, * @dev callbackGasLimit, numWords), * @dev see (VRFCoordinatorInterface for a description of the arguments). * * @dev Once the VRFCoordinator has received and validated the oracle's response * @dev to your request, it will call your contract's fulfillRandomWords method. * * @dev The randomness argument to fulfillRandomWords is a set of random words * @dev generated from your requestId and the blockHash of the request. * * @dev If your contract could have concurrent requests open, you can use the * @dev requestId returned from requestRandomWords to track which response is associated * @dev with which randomness request. * @dev See "SECURITY CONSIDERATIONS" for principles to keep in mind, * @dev if your contract could have multiple requests in flight simultaneously. * * @dev Colliding `requestId`s are cryptographically impossible as long as seeds * @dev differ. * * ***************************************************************************** * @dev SECURITY CONSIDERATIONS * * @dev A method with the ability to call your fulfillRandomness method directly * @dev could spoof a VRF response with any random value, so it's critical that * @dev it cannot be directly called by anything other than this base contract * @dev (specifically, by the VRFConsumerBase.rawFulfillRandomness method). * * @dev For your users to trust that your contract's random behavior is free * @dev from malicious interference, it's best if you can write it so that all * @dev behaviors implied by a VRF response are executed *during* your * @dev fulfillRandomness method. If your contract must store the response (or * @dev anything derived from it) and use it later, you must ensure that any * @dev user-significant behavior which depends on that stored value cannot be * @dev manipulated by a subsequent VRF request. * * @dev Similarly, both miners and the VRF oracle itself have some influence * @dev over the order in which VRF responses appear on the blockchain, so if * @dev your contract could have multiple VRF requests in flight simultaneously, * @dev you must ensure that the order in which the VRF responses arrive cannot * @dev be used to manipulate your contract's user-significant behavior. * * @dev Since the block hash of the block which contains the requestRandomness * @dev call is mixed into the input to the VRF *last*, a sufficiently powerful * @dev miner could, in principle, fork the blockchain to evict the block * @dev containing the request, forcing the request to be included in a * @dev different block with a different hash, and therefore a different input * @dev to the VRF. However, such an attack would incur a substantial economic * @dev cost. This cost scales with the number of blocks the VRF oracle waits * @dev until it calls responds to a request. It is for this reason that * @dev that you can signal to an oracle you'd like them to wait longer before * @dev responding to the request (however this is not enforced in the contract * @dev and so remains effective only in the case of unmodified oracle software). */ abstract contract VRFConsumerBaseV2 { error OnlyCoordinatorCanFulfill(address have, address want); address private immutable vrfCoordinator; /** * @param _vrfCoordinator address of VRFCoordinator contract */ constructor(address _vrfCoordinator) { vrfCoordinator = _vrfCoordinator; } /** * @notice fulfillRandomness handles the VRF response. Your contract must * @notice implement it. See "SECURITY CONSIDERATIONS" above for important * @notice principles to keep in mind when implementing your fulfillRandomness * @notice method. * * @dev VRFConsumerBaseV2 expects its subcontracts to have a method with this * @dev signature, and will call it once it has verified the proof * @dev associated with the randomness. (It is triggered via a call to * @dev rawFulfillRandomness, below.) * * @param requestId The Id initially returned by requestRandomness * @param randomWords the VRF output expanded to the requested number of words */ function fulfillRandomWords(uint256 requestId, uint256[] memory randomWords) internal virtual; // rawFulfillRandomness is called by VRFCoordinator when it receives a valid VRF // proof. rawFulfillRandomness then calls fulfillRandomness, after validating // the origin of the call function rawFulfillRandomWords(uint256 requestId, uint256[] memory randomWords) external { if (msg.sender != vrfCoordinator) { revert OnlyCoordinatorCanFulfill(msg.sender, vrfCoordinator); } fulfillRandomWords(requestId, randomWords); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol) pragma solidity ^0.8.2; import "../../utils/AddressUpgradeable.sol"; /** * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. * * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be * reused. This mechanism prevents re-execution of each "step" but allows the creation of new initialization steps in * case an upgrade adds a module that needs to be initialized. * * For example: * * [.hljs-theme-light.nopadding] * ``` * contract MyToken is ERC20Upgradeable { * function initialize() initializer public { * __ERC20_init("MyToken", "MTK"); * } * } * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable { * function initializeV2() reinitializer(2) public { * __ERC20Permit_init("MyToken"); * } * } * ``` * * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. * * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. * * [CAUTION] * ==== * Avoid leaving a contract uninitialized. * * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed: * * [.hljs-theme-light.nopadding] * ``` * /// @custom:oz-upgrades-unsafe-allow constructor * constructor() { * _disableInitializers(); * } * ``` * ==== */ abstract contract Initializable { /** * @dev Indicates that the contract has been initialized. * @custom:oz-retyped-from bool */ uint8 private _initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private _initializing; /** * @dev Triggered when the contract has been initialized or reinitialized. */ event Initialized(uint8 version); /** * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope, * `onlyInitializing` functions can be used to initialize parent contracts. * * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a * constructor. * * Emits an {Initialized} event. */ modifier initializer() { bool isTopLevelCall = !_initializing; require( (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1), "Initializable: contract is already initialized" ); _initialized = 1; if (isTopLevelCall) { _initializing = true; } _; if (isTopLevelCall) { _initializing = false; emit Initialized(1); } } /** * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be * used to initialize parent contracts. * * A reinitializer may be used after the original initialization step. This is essential to configure modules that * are added through upgrades and that require initialization. * * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer` * cannot be nested. If one is invoked in the context of another, execution will revert. * * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in * a contract, executing them in the right order is up to the developer or operator. * * WARNING: setting the version to 255 will prevent any future reinitialization. * * Emits an {Initialized} event. */ modifier reinitializer(uint8 version) { require(!_initializing && _initialized < version, "Initializable: contract is already initialized"); _initialized = version; _initializing = true; _; _initializing = false; emit Initialized(version); } /** * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the * {initializer} and {reinitializer} modifiers, directly or indirectly. */ modifier onlyInitializing() { require(_initializing, "Initializable: contract is not initializing"); _; } /** * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call. * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized * to any version. It is recommended to use this to lock implementation contracts that are designed to be called * through proxies. * * Emits an {Initialized} event the first time it is successfully executed. */ function _disableInitializers() internal virtual { require(!_initializing, "Initializable: contract is initializing"); if (_initialized < type(uint8).max) { _initialized = type(uint8).max; emit Initialized(type(uint8).max); } } /** * @dev Internal function that returns the initialized version. Returns `_initialized` */ function _getInitializedVersion() internal view returns (uint8) { return _initialized; } /** * @dev Internal function that returns the initialized version. Returns `_initializing` */ function _isInitializing() internal view returns (bool) { return _initializing; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library AddressUpgradeable { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ 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://diligence.consensys.net/posts/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.5.11/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 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); } } }
// SPDX-License-Identifier: MIT /*** * * *░██████╗░░█████╗░██╗░░░░░░█████╗░██╗░░██╗██╗░░░██╗ ██╗░░░░░░█████╗░████████╗████████╗░█████╗░ *██╔════╝░██╔══██╗██║░░░░░██╔══██╗╚██╗██╔╝╚██╗░██╔╝ ██║░░░░░██╔══██╗╚══██╔══╝╚══██╔══╝██╔══██╗ *██║░░██╗░███████║██║░░░░░███████║░╚███╔╝░░╚████╔╝░ ██║░░░░░██║░░██║░░░██║░░░░░░██║░░░██║░░██║ *██║░░╚██╗██╔══██║██║░░░░░██╔══██║░██╔██╗░░░╚██╔╝░░ ██║░░░░░██║░░██║░░░██║░░░░░░██║░░░██║░░██║ *╚██████╔╝██║░░██║███████╗██║░░██║██╔╝╚██╗░░░██║░░░ ███████╗╚█████╔╝░░░██║░░░░░░██║░░░╚█████╔╝ *░╚═════╝░╚═╝░░╚═╝╚══════╝╚═╝░░╚═╝╚═╝░░╚═╝░░░╚═╝░░░ ╚══════╝░╚════╝░░░░╚═╝░░░░░░╚═╝░░░░╚════╝░ * * * __ *|__) | _ _ | _ |_ _ . _ | _ |_ |_ _ _ *|__) | (_) (_ |( (_ | ) (_| | | ) |__ (_) |_ |_ (-' | \/ * / * * * ✅GalaxyLotto Lotto brings the traditional lottery industry * and improves it to launch it on the Blockchain * where anyone in the world can join and take advantage of its benefits. * * ✅Each person who purchases their ticket will be contributing to bringing * this wonderful ecosystem to life. * * Request more information through our Service Channels. * -Telegram : https://t.me/galaxylotto * -Web Site : https://galaxylotto.app * * **************** * * GALAXY LOTTO * * **************** * * * */ pragma solidity ^0.8.11; import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import "@chainlink/contracts/src/v0.8/interfaces/VRFCoordinatorV2Interface.sol"; import "@chainlink/contracts/src/v0.8/VRFConsumerBaseV2.sol"; import "@chainlink/contracts/src/v0.8/ConfirmedOwner.sol"; interface IERC20 { function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); } contract GalaxyLottoGame is VRFConsumerBaseV2, ConfirmedOwner { address payable public ownerAddress; address public authAddress; VRFCoordinatorV2Interface COORDINATOR; uint256 public gameStartTime; IERC20 BUSD; Lotto lottoContract; uint256 betId = 1; mapping(uint256 => uint256) public winnerCount; mapping(uint256 => uint256) public winningAmount; //Nft contract NftMintInterface NftMint; uint16 constant percentDivider = 10000; uint256 public availableTimeToClaim = 24 hours; uint256 public availableTimeToClaimJackpot = 24 hours; uint256 public gameSpan = 24 hours; uint256 public lastActiveGameId = 1; uint256 public resultDeclaredGameId; uint64 public s_subscriptionId; uint256[] public requestIds; uint256[] public getRandomNumbers; bytes32 keyHash = 0xcc294a196eeeb44da2888d17c0625cc88d70d9760a69d58d853ba6581a9ab0cd; uint32 callbackGasLimit = 2500000; uint16 requestConfirmations = 3; uint32 numWords = 6; uint32 maxNo = 70; uint256[6] public hitsAndRewards = [0, 0, 0, 1*1e6, 10*1e6, 2000*1e6]; struct playerStruct { address userAddress; uint256 totalReward; } struct bet { uint256 betId; bool isClaim; uint256[6] betsNumber; uint256 totalMatchNumber; bool isJackpotAvailable; bool isJackpotClaimed; } struct GameResult { uint8 status; uint256[] randomWords; uint256 prizeMoney; uint256 time; } mapping(address => playerStruct) public player; mapping(uint256 => mapping(uint256 => bet)) public bets; mapping(uint256 => GameResult) public gameResult; mapping(uint256 => mapping(uint256 => bool)) public isPlayed; mapping(uint256 => uint256) public requestIdWithGameId; mapping(uint256 => uint256) public jackpotWinnerCount; mapping(uint256 => bool) public s_requests; /* requestId --> requestStatus */ event ClaimDataEvent(uint256 nftId,uint256 gameId,uint256 betId,uint256 matchedNumber,uint256 reward,address walletAddress,bool isJackpotAvailable); event BetPlayEvent(uint256 betId,uint256 gameId,uint256 nftId,address walletAddress,bool isClaim,uint256[6] betsNumber,uint256 time); event GameResultEvent(uint256 gameId,uint256[] resultNumber,uint256 winPrice,uint256 timestamp); event EarningEvent(uint256 referralAmount,address walletAddress,address referral,uint8 status,uint256 time); event JackpotClaimed(address user,uint256 winPrice,uint256 gameId,uint256 nftId,uint256 betId,uint256 timestamp); constructor( address payable _ownerAddress, address _authAddress, address lottoAddress, uint256 _gameStartTime, uint64 subscriptionId ) VRFConsumerBaseV2(0xAE975071Be8F8eE67addBC1A82488F1C24858067) ConfirmedOwner(msg.sender) { COORDINATOR = VRFCoordinatorV2Interface( 0xAE975071Be8F8eE67addBC1A82488F1C24858067 ); s_subscriptionId = subscriptionId; BUSD = IERC20(0xc2132D05D31c914a87C6611C10748AEb04B58e8F); lottoContract = Lotto(lottoAddress); NftMint = NftMintInterface(0xF616117a36df000766c9D0B381cE025377DBeaA3); ownerAddress = _ownerAddress; authAddress = _authAddress; gameStartTime = _gameStartTime; } function setLottoContract(address _lotto) external { require(ownerAddress==msg.sender,"Only owner"); lottoContract = Lotto(_lotto); } function getCurrentGameId() public view returns (uint256) { return ((block.timestamp - gameStartTime)/gameSpan) + 1; } function play(uint256[6] memory selectNum, uint256 _nftId) public { declareResult(); uint256 nftBuyDate = NftMint.getNftMintedDate(_nftId); require( block.timestamp < nftBuyDate + 365 days, "You can play upto one year after nft buy" ); require( NftMint.ownerOf(_nftId) == msg.sender, "You are not owner of nft" ); uint256 gameId = getCurrentGameId(); require( isPlayed[gameId][_nftId] == false, "You can play once in 24 hrs" ); isPlayed[gameId][_nftId] = true; //check duplicate numbers for (uint256 i = 0; i < 6; i++) { //if (1 <= x && x <= 100) require( selectNum[i] > 0 && selectNum[i] <= maxNo, "Selected number should be in range of 1 to 50" ); for (uint256 j = i + 1; j < 6; j++) { require(selectNum[i] != selectNum[j], "Enter unique number"); } } uint256 _betId = betId; betId++; bet memory _bet = bet({ betId: _betId, isClaim: false, betsNumber: selectNum, totalMatchNumber: 0, isJackpotAvailable : false, isJackpotClaimed : false }); bets[gameId][_nftId] = _bet; gameResult[gameId].status = 1; lastActiveGameId = gameId; emit BetPlayEvent( _betId, gameId, _nftId, msg.sender, false, selectNum, block.timestamp ); } function settleBet(uint256 gameId,uint256 _nftId) public { require(bets[gameId][_nftId].betId > 0, "Invalid game"); require(bets[gameId][_nftId].isClaim == false, "Already claimed"); require(gameResult[gameId].status == 10,"Not declared "); require(gameResult[gameId].time+(availableTimeToClaim) > block.timestamp,"Claim time passed"); require( NftMint.ownerOf(_nftId) == msg.sender, "You are not owner of nft" ); uint256 counter = 0; uint256[6] memory userSelectedNumbers = bets[gameId][_nftId] .betsNumber; for (uint256 i = 0; i < gameResult[gameId].randomWords.length; i++) { for (uint256 j = 0; j < userSelectedNumbers.length; j++) { if (gameResult[gameId].randomWords[i] == userSelectedNumbers[j]) { counter++; } } } bets[gameId][_nftId].totalMatchNumber = counter; winnerCount[counter]++; bets[gameId][_nftId].isClaim = true; if(counter<6){ if(hitsAndRewards[counter]>0){ player[msg.sender].totalReward += hitsAndRewards[counter]; winningAmount[counter] += hitsAndRewards[counter]; BUSD.transfer(msg.sender, hitsAndRewards[counter]); emit EarningEvent(hitsAndRewards[counter], msg.sender, address(0),8, block.timestamp); address ref = lottoContract.getUpline(msg.sender); if(ref!=address(0)){ uint256 refAmount = hitsAndRewards[counter]*20/100; player[ref].totalReward += refAmount; BUSD.transfer(ref, refAmount); emit EarningEvent(refAmount, ref, msg.sender,9, block.timestamp); } } emit ClaimDataEvent( _nftId, gameId, bets[gameId][_nftId].betId, counter, hitsAndRewards[counter], msg.sender, false ); } else{ bets[gameId][_nftId].isJackpotAvailable = true; jackpotWinnerCount[gameId]++; emit ClaimDataEvent(_nftId, gameId, bets[gameId][_nftId].betId, counter, 0, msg.sender, true ); } } function claimJackpot(uint256 gameId,uint256 _nftId) external { require(gameResult[gameId].prizeMoney>0,"No prize money"); require(bets[gameId][_nftId].isJackpotAvailable,"No reward available"); require(block.timestamp >= gameResult[gameId].time+(availableTimeToClaim),"Not started yet..."); require(gameResult[gameId].time+(availableTimeToClaim)+availableTimeToClaimJackpot > block.timestamp,"Claim time passed"); require( NftMint.ownerOf(_nftId) == msg.sender, "You are not owner of nft" ); uint256 amount = (gameResult[gameId].prizeMoney*70/100)/jackpotWinnerCount[gameId]; BUSD.transfer(msg.sender, amount); winningAmount[6] += amount; emit EarningEvent(amount, msg.sender, address(0),8, block.timestamp); emit JackpotClaimed(msg.sender,amount,gameId,_nftId,bets[gameId][_nftId].betId,block.timestamp); address ref = lottoContract.getUpline(msg.sender); if(ref!=address(0)){ uint256 refamount = (gameResult[gameId].prizeMoney*20/100)/jackpotWinnerCount[gameId]; player[ref].totalReward += refamount; BUSD.transfer(ref, refamount); emit EarningEvent(refamount, ref, msg.sender,9, block.timestamp); } bets[gameId][_nftId].isJackpotAvailable = false; } function declareResult() internal { uint256 _gameId = lastActiveGameId; if (gameResult[_gameId].status == 1) { if (_gameId < getCurrentGameId()) { requestRandomWords(_gameId); } } } function getResult(uint256 _gameId) external { require(msg.sender == authAddress, "Only auth can declare result"); require(gameResult[_gameId].status != 10,"Result declared"); require(gameResult[_gameId].status != 2,"In process"); if (gameResult[_gameId].status <= 1) { require( _gameId < getCurrentGameId(), "Result can declared only after 24 hrs" ); requestRandomWords(_gameId); } else if(gameResult[_gameId].status == 3) { delete gameResult[_gameId].randomWords; requestRandomWords(_gameId); } } // Assumes the subscription is funded sufficiently. function requestRandomWords(uint256 _gameId) internal returns (uint256 requestId) { // Will revert if subscription is not set and funded. requestId = COORDINATOR.requestRandomWords( keyHash, s_subscriptionId, requestConfirmations, callbackGasLimit, numWords ); s_requests[requestId] = true; requestIds.push(requestId); requestIdWithGameId[requestId] = _gameId; if(gameResult[_gameId].status==1){ gameResult[_gameId].prizeMoney = BUSD.balanceOf(address(this)); } gameResult[_gameId].status = 2; return requestId; } function fulfillRandomWords( uint256 _requestId, uint256[] memory _randomWords ) internal override { require(s_requests[_requestId], "request not found"); uint256 gameId = requestIdWithGameId[_requestId]; for (uint256 _index = 0; _index < 6; _index++) { gameResult[gameId].randomWords.push((_randomWords[_index] % maxNo) + 1); } bool checkDuplicate; for (uint256 k = 0; k < gameResult[gameId].randomWords.length; k++) { for (uint256 j = k+1; j < gameResult[gameId].randomWords.length; j++) { if (gameResult[gameId].randomWords[k] == gameResult[gameId].randomWords[j]) { checkDuplicate = true; } } } if(checkDuplicate) { gameResult[gameId].status = 3; // requestRandomWords(gameId); } else{ gameResult[gameId].status = 10; resultDeclaredGameId = gameId; gameResult[gameId].time = block.timestamp; emit GameResultEvent( gameId, gameResult[gameId].randomWords, gameResult[gameId].prizeMoney, block.timestamp ); } } function setOwnerAddress(address payable _address) public { require(msg.sender == ownerAddress, "Only owner can set authaddress"); ownerAddress = _address; } function setAuthAddress(address _address) public { require(msg.sender == ownerAddress, "Only owner can set authaddress"); authAddress = _address; } function getGameResult(uint256 _gameId) external view returns (uint8 status, uint256[] memory randomNos) { return (gameResult[_gameId].status, gameResult[_gameId].randomWords); } function getBetDetails(uint256 _betId, uint256 _nftId) public view returns (bet memory) { return bets[_betId][_nftId]; } function getResultDetails() external view returns(uint256 gameId,uint8 status,uint256 _resultDeclaredGameId) { return (lastActiveGameId,gameResult[lastActiveGameId].status,resultDeclaredGameId); } function getGameInfo() external view returns(uint256 _gameSpan,uint256 _availableTimeToClaim,uint256 _availableTimeToClaimJackpot,uint256 _currentTime,uint256 _gameId,uint256 _gameStartTime){ return (gameSpan,availableTimeToClaim,availableTimeToClaimJackpot,block.timestamp,getCurrentGameId(),gameStartTime); } } // contract interface interface NftMintInterface { // function definition of the method we want to interact with function mintReward(address to, uint256 nftPrice) external; function ownerOf(uint256 tokenId) external view returns (address); function getNftMintedDate(uint256 nftId) external view returns (uint256); function getNftNftPrice(uint256 nftId) external view returns (uint256); } interface Lotto { function getUpline(address _addr) external view returns(address); }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address payable","name":"_ownerAddress","type":"address"},{"internalType":"address","name":"_authAddress","type":"address"},{"internalType":"address","name":"lottoAddress","type":"address"},{"internalType":"uint256","name":"_gameStartTime","type":"uint256"},{"internalType":"uint64","name":"subscriptionId","type":"uint64"}],"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":"uint256","name":"betId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"gameId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nftId","type":"uint256"},{"indexed":false,"internalType":"address","name":"walletAddress","type":"address"},{"indexed":false,"internalType":"bool","name":"isClaim","type":"bool"},{"indexed":false,"internalType":"uint256[6]","name":"betsNumber","type":"uint256[6]"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"BetPlayEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"nftId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"gameId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"betId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"matchedNumber","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"},{"indexed":false,"internalType":"address","name":"walletAddress","type":"address"},{"indexed":false,"internalType":"bool","name":"isJackpotAvailable","type":"bool"}],"name":"ClaimDataEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"referralAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"walletAddress","type":"address"},{"indexed":false,"internalType":"address","name":"referral","type":"address"},{"indexed":false,"internalType":"uint8","name":"status","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"EarningEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"gameId","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"resultNumber","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"winPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"GameResultEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"winPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"gameId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nftId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"betId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"JackpotClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"OwnershipTransferRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"authAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"availableTimeToClaim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"availableTimeToClaimJackpot","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"bets","outputs":[{"internalType":"uint256","name":"betId","type":"uint256"},{"internalType":"bool","name":"isClaim","type":"bool"},{"internalType":"uint256","name":"totalMatchNumber","type":"uint256"},{"internalType":"bool","name":"isJackpotAvailable","type":"bool"},{"internalType":"bool","name":"isJackpotClaimed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gameId","type":"uint256"},{"internalType":"uint256","name":"_nftId","type":"uint256"}],"name":"claimJackpot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"gameResult","outputs":[{"internalType":"uint8","name":"status","type":"uint8"},{"internalType":"uint256","name":"prizeMoney","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gameSpan","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gameStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_betId","type":"uint256"},{"internalType":"uint256","name":"_nftId","type":"uint256"}],"name":"getBetDetails","outputs":[{"components":[{"internalType":"uint256","name":"betId","type":"uint256"},{"internalType":"bool","name":"isClaim","type":"bool"},{"internalType":"uint256[6]","name":"betsNumber","type":"uint256[6]"},{"internalType":"uint256","name":"totalMatchNumber","type":"uint256"},{"internalType":"bool","name":"isJackpotAvailable","type":"bool"},{"internalType":"bool","name":"isJackpotClaimed","type":"bool"}],"internalType":"struct GalaxyLottoGame.bet","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentGameId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGameInfo","outputs":[{"internalType":"uint256","name":"_gameSpan","type":"uint256"},{"internalType":"uint256","name":"_availableTimeToClaim","type":"uint256"},{"internalType":"uint256","name":"_availableTimeToClaimJackpot","type":"uint256"},{"internalType":"uint256","name":"_currentTime","type":"uint256"},{"internalType":"uint256","name":"_gameId","type":"uint256"},{"internalType":"uint256","name":"_gameStartTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_gameId","type":"uint256"}],"name":"getGameResult","outputs":[{"internalType":"uint8","name":"status","type":"uint8"},{"internalType":"uint256[]","name":"randomNos","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getRandomNumbers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_gameId","type":"uint256"}],"name":"getResult","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getResultDetails","outputs":[{"internalType":"uint256","name":"gameId","type":"uint256"},{"internalType":"uint8","name":"status","type":"uint8"},{"internalType":"uint256","name":"_resultDeclaredGameId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"hitsAndRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"isPlayed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"jackpotWinnerCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastActiveGameId","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":"ownerAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[6]","name":"selectNum","type":"uint256[6]"},{"internalType":"uint256","name":"_nftId","type":"uint256"}],"name":"play","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"player","outputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"uint256","name":"totalReward","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":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"requestIdWithGameId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"requestIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"resultDeclaredGameId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"s_requests","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"s_subscriptionId","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setAuthAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lotto","type":"address"}],"name":"setLottoContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_address","type":"address"}],"name":"setOwnerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gameId","type":"uint256"},{"internalType":"uint256","name":"_nftId","type":"uint256"}],"name":"settleBet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"winnerCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"winningAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a0604052600160085562015180600c5562015180600d5562015180600e556001600f557fcc294a196eeeb44da2888d17c0625cc88d70d9760a69d58d853ba6581a9ab0cd60001b601455622625a0601560006101000a81548163ffffffff021916908363ffffffff1602179055506003601560046101000a81548161ffff021916908361ffff1602179055506006601560066101000a81548163ffffffff021916908363ffffffff16021790555060466015600a6101000a81548163ffffffff021916908363ffffffff1602179055506040518060c00160405280600063ffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001620f424063ffffffff1681526020016298968063ffffffff168152602001637735940063ffffffff16815250601690600662000140929190620005ec565b503480156200014e57600080fd5b50604051620056e6380380620056e6833981810160405281019062000174919062000787565b3380600073ae975071be8f8ee67addbc1a82488f1c248580678073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000235576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200022c9062000870565b60405180910390fd5b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614620002bc57620002bb81620004bc60201b60201c565b5b50505073ae975071be8f8ee67addbc1a82488f1c24858067600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555073c2132d05d31c914a87c6611c10748aeb04b58e8f600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073f616117a36df000766c9d0b381ce025377dbeaa3600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600581905550505050505062000904565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156200052e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200052590620008e2565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae127860405160405180910390a350565b826006810192821562000626579160200282015b8281111562000625578251829063ffffffff1690559160200191906001019062000600565b5b50905062000635919062000639565b5090565b5b80821115620006545760008160009055506001016200063a565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200068a826200065d565b9050919050565b6200069c816200067d565b8114620006a857600080fd5b50565b600081519050620006bc8162000691565b92915050565b6000620006cf826200065d565b9050919050565b620006e181620006c2565b8114620006ed57600080fd5b50565b6000815190506200070181620006d6565b92915050565b6000819050919050565b6200071c8162000707565b81146200072857600080fd5b50565b6000815190506200073c8162000711565b92915050565b600067ffffffffffffffff82169050919050565b620007618162000742565b81146200076d57600080fd5b50565b600081519050620007818162000756565b92915050565b600080600080600060a08688031215620007a657620007a562000658565b5b6000620007b688828901620006ab565b9550506020620007c988828901620006f0565b9450506040620007dc88828901620006f0565b9350506060620007ef888289016200072b565b9250506080620008028882890162000770565b9150509295509295909350565b600082825260208201905092915050565b7f43616e6e6f7420736574206f776e657220746f207a65726f0000000000000000600082015250565b6000620008586018836200080f565b9150620008658262000820565b602082019050919050565b600060208201905081810360008301526200088b8162000849565b9050919050565b7f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000600082015250565b6000620008ca6017836200080f565b9150620008d78262000892565b602082019050919050565b60006020820190508181036000830152620008fd81620008bb565b9050919050565b608051614dbf62000927600039600081816119c80152611a1c0152614dbf6000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c806386a2cf9311610130578063a168fa89116100b8578063dc514a7a1161007c578063dc514a7a1461069a578063e0d65b69146106ca578063ed2df26d146106fc578063f2fde38b1461072d578063f353df561461074957610227565b8063a168fa89146105f2578063a263540114610622578063a64719d714610640578063c92ce21a1461065e578063d4b2961d1461067c57610227565b80638b2c5d6f116100ff5780638b2c5d6f1461053a5780638da5cb5b1461056a5780638f84aa0914610588578063995e4339146105a65780639e14d659146105c257610227565b806386a2cf93146104a05780638796ba8c146104d05780638a47c051146105005780638ac000211461051c57610227565b8063331a6bf5116101b35780637096a999116101825780637096a999146103ea57806374528bd11461041a57806379ba50971461044a57806381a87ad3146104545780638451db021461048457610227565b8063331a6bf5146103395780633789b1eb146103555780634c54e1b5146103855780636a09f6be146103b657610227565b806310265693116101fa57806310265693146102a05780631746bd1b146102bc57806319f4e117146102df5780631fe543e3146102ff578063328c2a5b1461031b57610227565b80630252b9951461022c578063033385141461024a578063065be620146102685780630d2cbe1314610284575b600080fd5b610234610767565b60405161024191906132b0565b60405180910390f35b61025261076d565b60405161025f91906132b0565b60405180910390f35b610282600480360381019061027d919061330b565b610773565b005b61029e6004803603810190610299919061330b565b610e8e565b005b6102ba60048036038101906102b591906133a9565b611884565b005b6102c4611958565b6040516102d6969594939291906133d6565b60405180910390f35b6102e761198a565b6040516102f693929190613453565b60405180910390f35b610319600480360381019061031491906135e3565b6119c6565b005b610323611a86565b60405161033091906132b0565b60405180910390f35b610353600480360381019061034e919061367d565b611a8c565b005b61036f600480360381019061036a91906136aa565b611b60565b60405161037c91906132b0565b60405180910390f35b61039f600480360381019061039a91906133a9565b611b7b565b6040516103ad9291906136e6565b60405180910390f35b6103d060048036038101906103cb919061330b565b611bbf565b6040516103e195949392919061372a565b60405180910390f35b61040460048036038101906103ff91906136aa565b611c29565b60405161041191906132b0565b60405180910390f35b610434600480360381019061042f91906136aa565b611c40565b60405161044191906132b0565b60405180910390f35b610452611c64565b005b61046e600480360381019061046991906136aa565b611df9565b60405161047b91906132b0565b60405180910390f35b61049e6004803603810190610499919061382e565b611e11565b005b6104ba60048036038101906104b591906136aa565b6123ba565b6040516104c791906132b0565b60405180910390f35b6104ea60048036038101906104e591906136aa565b6123d2565b6040516104f791906132b0565b60405180910390f35b61051a600480360381019061051591906133a9565b6123f6565b005b6105246124ca565b6040516105319190613891565b60405180910390f35b610554600480360381019061054f91906136aa565b6124e4565b60405161056191906132b0565b60405180910390f35b6105726124fc565b60405161057f91906138ac565b60405180910390f35b610590612525565b60405161059d91906138d6565b60405180910390f35b6105c060048036038101906105bb91906136aa565b61254b565b005b6105dc60048036038101906105d7919061330b565b612795565b6040516105e991906138f1565b60405180910390f35b61060c600480360381019061060791906136aa565b6127c4565b60405161061991906138f1565b60405180910390f35b61062a6127e4565b60405161063791906132b0565b60405180910390f35b610648612812565b60405161065591906138ac565b60405180910390f35b610666612838565b60405161067391906132b0565b60405180910390f35b61068461283e565b60405161069191906132b0565b60405180910390f35b6106b460048036038101906106af919061330b565b612844565b6040516106c19190613a45565b60405180910390f35b6106e460048036038101906106df91906136aa565b61292d565b6040516106f393929190613a61565b60405180910390f35b610716600480360381019061071191906136aa565b612964565b604051610724929190613b2f565b60405180910390f35b610747600480360381019061074291906133a9565b6129fd565b005b610751612a11565b60405161075e91906132b0565b60405180910390f35b60055481565b600d5481565b6000601e600084815260200190815260200160002060020154116107cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c390613bbc565b60405180910390fd5b601d6000838152602001908152602001600020600082815260200190815260200160002060090160009054906101000a900460ff16610840576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083790613c28565b60405180910390fd5b600c54601e6000848152602001908152602001600020600301546108649190613c77565b4210156108a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089d90613d19565b60405180910390fd5b42600d54600c54601e6000868152602001908152602001600020600301546108ce9190613c77565b6108d89190613c77565b11610918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090f90613d85565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b815260040161098a91906132b0565b602060405180830381865afa1580156109a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109cb9190613dba565b73ffffffffffffffffffffffffffffffffffffffff1614610a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1890613e33565b60405180910390fd5b6000602160008481526020019081526020016000205460646046601e600087815260200190815260200160002060020154610a5c9190613e53565b610a669190613edc565b610a709190613edc565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610acf9291906136e6565b6020604051808303816000875af1158015610aee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b129190613f39565b5080600a6000600681526020019081526020016000206000828254610b379190613c77565b925050819055507f316b36f47f5b192c79719720545fd785dbbf7fbe7702b82e2a4242a258218fca81336000600842604051610b77959493929190613fab565b60405180910390a17fab4217b624a0cf3f6d89c227348baf1a3b268ca70bfc19aad0a1504c32653a4633828585601d600089815260200190815260200160002060008881526020019081526020016000206000015442604051610bdf96959493929190613ffe565b60405180910390a16000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cb6f37ab336040518263ffffffff1660e01b8152600401610c4491906138ac565b602060405180830381865afa158015610c61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c859190613dba565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e48576000602160008681526020019081526020016000205460646014601e600089815260200190815260200160002060020154610cf69190613e53565b610d009190613edc565b610d0a9190613edc565b905080601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000828254610d5e9190613c77565b92505081905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401610dc29291906136e6565b6020604051808303816000875af1158015610de1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e059190613f39565b507f316b36f47f5b192c79719720545fd785dbbf7fbe7702b82e2a4242a258218fca818333600942604051610e3e95949392919061409a565b60405180910390a1505b6000601d6000868152602001908152602001600020600085815260200190815260200160002060090160006101000a81548160ff02191690831515021790555050505050565b6000601d600084815260200190815260200160002060008381526020019081526020016000206000015411610ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eef90614139565b60405180910390fd5b60001515601d6000848152602001908152602001600020600083815260200190815260200160002060010160009054906101000a900460ff16151514610f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6a906141a5565b60405180910390fd5b600a601e600084815260200190815260200160002060000160009054906101000a900460ff1660ff1614610fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd390614211565b60405180910390fd5b42600c54601e6000858152602001908152602001600020600301546110019190613c77565b11611041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103890613d85565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016110b391906132b0565b602060405180830381865afa1580156110d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f49190613dba565b73ffffffffffffffffffffffffffffffffffffffff161461114a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114190613e33565b60405180910390fd5b600080601d600085815260200190815260200160002060008481526020019081526020016000206002016006806020026040519081016040528092919082600680156111ab576020028201915b815481526020019060010190808311611197575b5050505050905060005b601e6000868152602001908152602001600020600101805490508110156112695760005b6006811015611255578281600681106111f5576111f4614231565b5b6020020151601e6000888152602001908152602001600020600101838154811061122257611221614231565b5b9060005260206000200154141561124257838061123e90614260565b9450505b808061124d90614260565b9150506111d9565b50808061126190614260565b9150506111b5565b5081601d60008681526020019081526020016000206000858152602001908152602001600020600801819055506009600083815260200190815260200160002060008154809291906112ba90614260565b91905055506001601d6000868152602001908152602001600020600085815260200190815260200160002060010160006101000a81548160ff02191690831515021790555060068210156117a85760006016836006811061131e5761131d614231565b5b01541115611723576016826006811061133a57611339614231565b5b0154601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101600082825461138d9190613c77565b92505081905550601682600681106113a8576113a7614231565b5b0154600a600084815260200190815260200160002060008282546113cc9190613c77565b92505081905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb336016856006811061142657611425614231565b5b01546040518363ffffffff1660e01b81526004016114459291906136e6565b6020604051808303816000875af1158015611464573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114889190613f39565b507f316b36f47f5b192c79719720545fd785dbbf7fbe7702b82e2a4242a258218fca601683600681106114be576114bd614231565b5b01543360006008426040516114d7959493929190613fab565b60405180910390a16000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cb6f37ab336040518263ffffffff1660e01b815260040161153c91906138ac565b602060405180830381865afa158015611559573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157d9190613dba565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461172157600060646014601686600681106115cd576115cc614231565b5b01546115d99190613e53565b6115e39190613edc565b905080601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160008282546116379190613c77565b92505081905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b815260040161169b9291906136e6565b6020604051808303816000875af11580156116ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116de9190613f39565b507f316b36f47f5b192c79719720545fd785dbbf7fbe7702b82e2a4242a258218fca81833360094260405161171795949392919061409a565b60405180910390a1505b505b7f898198fb1a70995c17e19de9002055ff1e4bc143999592053130ae7839f0714a8385601d6000888152602001908152602001600020600087815260200190815260200160002060000154856016876006811061178357611782614231565b5b015433600060405161179b97969594939291906142a9565b60405180910390a161187e565b6001601d6000868152602001908152602001600020600085815260200190815260200160002060090160006101000a81548160ff02191690831515021790555060216000858152602001908152602001600020600081548092919061180c90614260565b91905055507f898198fb1a70995c17e19de9002055ff1e4bc143999592053130ae7839f0714a8385601d60008881526020019081526020016000206000878152602001908152602001600020600001548560003360016040516118759796959493929190614353565b60405180910390a15b50505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190b9061440e565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600080600080600e54600c54600d54426119736127e4565b600554955095509550955095509550909192939495565b6000806000600f54601e6000600f54815260200190815260200160002060000160009054906101000a900460ff16601054925092509250909192565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a7857337f00000000000000000000000000000000000000000000000000000000000000006040517f1cf993f4000000000000000000000000000000000000000000000000000000008152600401611a6f92919061442e565b60405180910390fd5b611a828282612a17565b5050565b600f5481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b139061440e565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60168160068110611b7057600080fd5b016000915090505481565b601c6020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b601d602052816000526040600020602052806000526040600020600091509150508060000154908060010160009054906101000a900460ff16908060080154908060090160009054906101000a900460ff16908060090160019054906101000a900460ff16905085565b602080528060005260406000206000915090505481565b60138181548110611c5057600080fd5b906000526020600020016000915090505481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611cf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ceb906144a3565b60405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b60216020528060005260406000206000915090505481565b611e19612d26565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d1e3e898836040518263ffffffff1660e01b8152600401611e7691906132b0565b602060405180830381865afa158015611e93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb791906144d8565b90506301e1338081611ec99190613c77565b4210611f0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0190614577565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b8152600401611f7c91906132b0565b602060405180830381865afa158015611f99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fbd9190613dba565b73ffffffffffffffffffffffffffffffffffffffff1614612013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200a90613e33565b60405180910390fd5b600061201d6127e4565b905060001515601f6000838152602001908152602001600020600085815260200190815260200160002060009054906101000a900460ff16151514612097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208e906145e3565b60405180910390fd5b6001601f6000838152602001908152602001600020600085815260200190815260200160002060006101000a81548160ff02191690831515021790555060005b60068110156122285760008582600681106120f5576120f4614231565b5b602002015111801561213657506015600a9054906101000a900463ffffffff1663ffffffff1685826006811061212e5761212d614231565b5b602002015111155b612175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216c90614675565b60405180910390fd5b60006001826121849190613c77565b90505b6006811015612214578581600681106121a3576121a2614231565b5b60200201518683600681106121bb576121ba614231565b5b60200201511415612201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f8906146e1565b60405180910390fd5b808061220c90614260565b915050612187565b50808061222090614260565b9150506120d7565b50600060085490506008600081548092919061224390614260565b919050555060006040518060c001604052808381526020016000151581526020018781526020016000815260200160001515815260200160001515815250905080601d600085815260200190815260200160002060008781526020019081526020016000206000820151816000015560208201518160010160006101000a81548160ff0219169083151502179055506040820151816002019060066122e99291906131b5565b506060820151816008015560808201518160090160006101000a81548160ff02191690831515021790555060a08201518160090160016101000a81548160ff0219169083151502179055509050506001601e600085815260200190815260200160002060000160006101000a81548160ff021916908360ff16021790555082600f819055507f9e9446da9ff7fb6a0879bbd74af2f61d45ec59428e1b73b884220be921ec7c228284873360008b426040516123aa9796959493929190614763565b60405180910390a1505050505050565b60096020528060005260406000206000915090505481565b601281815481106123e257600080fd5b906000526020600020016000915090505481565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247d90614820565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601160009054906101000a900467ffffffffffffffff1681565b600a6020528060005260406000206000915090505481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146125db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d29061488c565b60405180910390fd5b600a601e600083815260200190815260200160002060000160009054906101000a900460ff1660ff161415612645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263c906148f8565b60405180910390fd5b6002601e600083815260200190815260200160002060000160009054906101000a900460ff1660ff1614156126af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a690614964565b60405180910390fd5b6001601e600083815260200190815260200160002060000160009054906101000a900460ff1660ff1611612735576126e56127e4565b8110612726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271d906149f6565b60405180910390fd5b61272f81612d7a565b50612792565b6003601e600083815260200190815260200160002060000160009054906101000a900460ff1660ff16141561279157601e6000828152602001908152602001600020600101600061278691906131f5565b61278f81612d7a565b505b5b50565b601f6020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60226020528060005260406000206000915054906101000a900460ff1681565b60006001600e54600554426127f99190614a16565b6128039190613edc565b61280d9190613c77565b905090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b600e5481565b61284c613216565b601d600084815260200190815260200160002060008381526020019081526020016000206040518060c0016040529081600082015481526020016001820160009054906101000a900460ff16151515158152602001600282016006806020026040519081016040528092919082600680156128dc576020028201915b8154815260200190600101908083116128c8575b50505050508152602001600882015481526020016009820160009054906101000a900460ff161515151581526020016009820160019054906101000a900460ff161515151581525050905092915050565b601e6020528060005260406000206000915090508060000160009054906101000a900460ff16908060020154908060030154905083565b60006060601e600084815260200190815260200160002060000160009054906101000a900460ff16601e6000858152602001908152602001600020600101808054806020026020016040519081016040528092919081815260200182805480156129ed57602002820191906000526020600020905b8154815260200190600101908083116129d9575b5050505050905091509150915091565b612a05612ff8565b612a0e81613088565b50565b60105481565b6022600083815260200190815260200160002060009054906101000a900460ff16612a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6e90614a96565b60405180910390fd5b60006020600084815260200190815260200160002054905060005b6006811015612b3457601e600083815260200190815260200160002060010160016015600a9054906101000a900463ffffffff1663ffffffff16858481518110612adf57612ade614231565b5b6020026020010151612af19190614ab6565b612afb9190613c77565b90806001815401808255809150506001900390600052602060002001600090919091909150558080612b2c90614260565b915050612a92565b50600080600090505b601e600084815260200190815260200160002060010180549050811015612c29576000600182612b6d9190613c77565b90505b601e600085815260200190815260200160002060010180549050811015612c1557601e60008581526020019081526020016000206001018181548110612bb957612bb8614231565b5b9060005260206000200154601e60008681526020019081526020016000206001018381548110612bec57612beb614231565b5b90600052602060002001541415612c0257600192505b8080612c0d90614260565b915050612b70565b508080612c2190614260565b915050612b3d565b508015612c65576003601e600084815260200190815260200160002060000160006101000a81548160ff021916908360ff160217905550612d20565b600a601e600084815260200190815260200160002060000160006101000a81548160ff021916908360ff1602179055508160108190555042601e6000848152602001908152602001600020600301819055507f9a13cfefe85b3f4ca1cd2317cd97a533c279c24d42e34c2b74aaa2f8ebcbfcee82601e6000858152602001908152602001600020600101601e60008681526020019081526020016000206002015442604051612d179493929190614bbd565b60405180910390a15b50505050565b6000600f5490506001601e600083815260200190815260200160002060000160009054906101000a900460ff1660ff161415612d7757612d646127e4565b811015612d7657612d7481612d7a565b505b5b50565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635d3b1d30601454601160009054906101000a900467ffffffffffffffff16601560049054906101000a900461ffff16601560009054906101000a900463ffffffff16601560069054906101000a900463ffffffff166040518663ffffffff1660e01b8152600401612e2b959493929190614c5e565b6020604051808303816000875af1158015612e4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e6e91906144d8565b905060016022600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060128190806001815401808255809150506001900390600052602060002001600090919091909150558160206000838152602001908152602001600020819055506001601e600084815260200190815260200160002060000160009054906101000a900460ff1660ff161415612fc357600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612f6791906138ac565b602060405180830381865afa158015612f84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fa891906144d8565b601e6000848152602001908152602001600020600201819055505b6002601e600084815260200190815260200160002060000160006101000a81548160ff021916908360ff160217905550919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613086576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307d90614cfd565b60405180910390fd5b565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156130f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ee90614d69565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae127860405160405180910390a350565b82600681019282156131e4579160200282015b828111156131e35782518255916020019190600101906131c8565b5b5090506131f19190613258565b5090565b50805460008255906000526020600020908101906132139190613258565b50565b6040518060c0016040528060008152602001600015158152602001613239613275565b8152602001600081526020016000151581526020016000151581525090565b5b80821115613271576000816000905550600101613259565b5090565b6040518060c00160405280600690602082028036833780820191505090505090565b6000819050919050565b6132aa81613297565b82525050565b60006020820190506132c560008301846132a1565b92915050565b6000604051905090565b600080fd5b600080fd5b6132e881613297565b81146132f357600080fd5b50565b600081359050613305816132df565b92915050565b60008060408385031215613322576133216132d5565b5b6000613330858286016132f6565b9250506020613341858286016132f6565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133768261334b565b9050919050565b6133868161336b565b811461339157600080fd5b50565b6000813590506133a38161337d565b92915050565b6000602082840312156133bf576133be6132d5565b5b60006133cd84828501613394565b91505092915050565b600060c0820190506133eb60008301896132a1565b6133f860208301886132a1565b61340560408301876132a1565b61341260608301866132a1565b61341f60808301856132a1565b61342c60a08301846132a1565b979650505050505050565b600060ff82169050919050565b61344d81613437565b82525050565b600060608201905061346860008301866132a1565b6134756020830185613444565b61348260408301846132a1565b949350505050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6134d88261348f565b810181811067ffffffffffffffff821117156134f7576134f66134a0565b5b80604052505050565b600061350a6132cb565b905061351682826134cf565b919050565b600067ffffffffffffffff821115613536576135356134a0565b5b602082029050602081019050919050565b600080fd5b600061355f61355a8461351b565b613500565b9050808382526020820190506020840283018581111561358257613581613547565b5b835b818110156135ab578061359788826132f6565b845260208401935050602081019050613584565b5050509392505050565b600082601f8301126135ca576135c961348a565b5b81356135da84826020860161354c565b91505092915050565b600080604083850312156135fa576135f96132d5565b5b6000613608858286016132f6565b925050602083013567ffffffffffffffff811115613629576136286132da565b5b613635858286016135b5565b9150509250929050565b600061364a8261334b565b9050919050565b61365a8161363f565b811461366557600080fd5b50565b60008135905061367781613651565b92915050565b600060208284031215613693576136926132d5565b5b60006136a184828501613668565b91505092915050565b6000602082840312156136c0576136bf6132d5565b5b60006136ce848285016132f6565b91505092915050565b6136e08161336b565b82525050565b60006040820190506136fb60008301856136d7565b61370860208301846132a1565b9392505050565b60008115159050919050565b6137248161370f565b82525050565b600060a08201905061373f60008301886132a1565b61374c602083018761371b565b61375960408301866132a1565b613766606083018561371b565b613773608083018461371b565b9695505050505050565b600067ffffffffffffffff821115613798576137976134a0565b5b602082029050919050565b60006137b66137b18461377d565b613500565b905080602084028301858111156137d0576137cf613547565b5b835b818110156137f957806137e588826132f6565b8452602084019350506020810190506137d2565b5050509392505050565b600082601f8301126138185761381761348a565b5b60066138258482856137a3565b91505092915050565b60008060e08385031215613845576138446132d5565b5b600061385385828601613803565b92505060c0613864858286016132f6565b9150509250929050565b600067ffffffffffffffff82169050919050565b61388b8161386e565b82525050565b60006020820190506138a66000830184613882565b92915050565b60006020820190506138c160008301846136d7565b92915050565b6138d08161363f565b82525050565b60006020820190506138eb60008301846138c7565b92915050565b6000602082019050613906600083018461371b565b92915050565b61391581613297565b82525050565b6139248161370f565b82525050565b600060069050919050565b600081905092915050565b6000819050919050565b6000613956838361390c565b60208301905092915050565b6000602082019050919050565b6139788161392a565b6139828184613935565b925061398d82613940565b8060005b838110156139be5781516139a5878261394a565b96506139b083613962565b925050600181019050613991565b505050505050565b610160820160008201516139dd600085018261390c565b5060208201516139f0602085018261391b565b506040820151613a03604085018261396f565b506060820151613a1761010085018261390c565b506080820151613a2b61012085018261391b565b5060a0820151613a3f61014085018261391b565b50505050565b600061016082019050613a5b60008301846139c6565b92915050565b6000606082019050613a766000830186613444565b613a8360208301856132a1565b613a9060408301846132a1565b949350505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000602082019050919050565b6000613adc82613a98565b613ae68185613aa3565b9350613af183613ab4565b8060005b83811015613b22578151613b09888261394a565b9750613b1483613ac4565b925050600181019050613af5565b5085935050505092915050565b6000604082019050613b446000830185613444565b8181036020830152613b568184613ad1565b90509392505050565b600082825260208201905092915050565b7f4e6f207072697a65206d6f6e6579000000000000000000000000000000000000600082015250565b6000613ba6600e83613b5f565b9150613bb182613b70565b602082019050919050565b60006020820190508181036000830152613bd581613b99565b9050919050565b7f4e6f2072657761726420617661696c61626c6500000000000000000000000000600082015250565b6000613c12601383613b5f565b9150613c1d82613bdc565b602082019050919050565b60006020820190508181036000830152613c4181613c05565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c8282613297565b9150613c8d83613297565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613cc257613cc1613c48565b5b828201905092915050565b7f4e6f742073746172746564207965742e2e2e0000000000000000000000000000600082015250565b6000613d03601283613b5f565b9150613d0e82613ccd565b602082019050919050565b60006020820190508181036000830152613d3281613cf6565b9050919050565b7f436c61696d2074696d6520706173736564000000000000000000000000000000600082015250565b6000613d6f601183613b5f565b9150613d7a82613d39565b602082019050919050565b60006020820190508181036000830152613d9e81613d62565b9050919050565b600081519050613db48161337d565b92915050565b600060208284031215613dd057613dcf6132d5565b5b6000613dde84828501613da5565b91505092915050565b7f596f7520617265206e6f74206f776e6572206f66206e66740000000000000000600082015250565b6000613e1d601883613b5f565b9150613e2882613de7565b602082019050919050565b60006020820190508181036000830152613e4c81613e10565b9050919050565b6000613e5e82613297565b9150613e6983613297565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613ea257613ea1613c48565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613ee782613297565b9150613ef283613297565b925082613f0257613f01613ead565b5b828204905092915050565b613f168161370f565b8114613f2157600080fd5b50565b600081519050613f3381613f0d565b92915050565b600060208284031215613f4f57613f4e6132d5565b5b6000613f5d84828501613f24565b91505092915050565b6000819050919050565b6000819050919050565b6000613f95613f90613f8b84613f66565b613f70565b613437565b9050919050565b613fa581613f7a565b82525050565b600060a082019050613fc060008301886132a1565b613fcd60208301876136d7565b613fda60408301866136d7565b613fe76060830185613f9c565b613ff460808301846132a1565b9695505050505050565b600060c08201905061401360008301896136d7565b61402060208301886132a1565b61402d60408301876132a1565b61403a60608301866132a1565b61404760808301856132a1565b61405460a08301846132a1565b979650505050505050565b6000819050919050565b600061408461407f61407a8461405f565b613f70565b613437565b9050919050565b61409481614069565b82525050565b600060a0820190506140af60008301886132a1565b6140bc60208301876136d7565b6140c960408301866136d7565b6140d6606083018561408b565b6140e360808301846132a1565b9695505050505050565b7f496e76616c69642067616d650000000000000000000000000000000000000000600082015250565b6000614123600c83613b5f565b915061412e826140ed565b602082019050919050565b6000602082019050818103600083015261415281614116565b9050919050565b7f416c726561647920636c61696d65640000000000000000000000000000000000600082015250565b600061418f600f83613b5f565b915061419a82614159565b602082019050919050565b600060208201905081810360008301526141be81614182565b9050919050565b7f4e6f74206465636c617265642000000000000000000000000000000000000000600082015250565b60006141fb600d83613b5f565b9150614206826141c5565b602082019050919050565b6000602082019050818103600083015261422a816141ee565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061426b82613297565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561429e5761429d613c48565b5b600182019050919050565b600060e0820190506142be600083018a6132a1565b6142cb60208301896132a1565b6142d860408301886132a1565b6142e560608301876132a1565b6142f260808301866132a1565b6142ff60a08301856136d7565b61430c60c083018461371b565b98975050505050505050565b6000819050919050565b600061433d61433861433384614318565b613f70565b613297565b9050919050565b61434d81614322565b82525050565b600060e082019050614368600083018a6132a1565b61437560208301896132a1565b61438260408301886132a1565b61438f60608301876132a1565b61439c6080830186614344565b6143a960a08301856136d7565b6143b660c083018461371b565b98975050505050505050565b7f4f6e6c79206f776e65722063616e207365742061757468616464726573730000600082015250565b60006143f8601e83613b5f565b9150614403826143c2565b602082019050919050565b60006020820190508181036000830152614427816143eb565b9050919050565b600060408201905061444360008301856136d7565b61445060208301846136d7565b9392505050565b7f4d7573742062652070726f706f736564206f776e657200000000000000000000600082015250565b600061448d601683613b5f565b915061449882614457565b602082019050919050565b600060208201905081810360008301526144bc81614480565b9050919050565b6000815190506144d2816132df565b92915050565b6000602082840312156144ee576144ed6132d5565b5b60006144fc848285016144c3565b91505092915050565b7f596f752063616e20706c6179207570746f206f6e65207965617220616674657260008201527f206e667420627579000000000000000000000000000000000000000000000000602082015250565b6000614561602883613b5f565b915061456c82614505565b604082019050919050565b6000602082019050818103600083015261459081614554565b9050919050565b7f596f752063616e20706c6179206f6e636520696e203234206872730000000000600082015250565b60006145cd601b83613b5f565b91506145d882614597565b602082019050919050565b600060208201905081810360008301526145fc816145c0565b9050919050565b7f53656c6563746564206e756d6265722073686f756c6420626520696e2072616e60008201527f6765206f66203120746f20353000000000000000000000000000000000000000602082015250565b600061465f602d83613b5f565b915061466a82614603565b604082019050919050565b6000602082019050818103600083015261468e81614652565b9050919050565b7f456e74657220756e69717565206e756d62657200000000000000000000000000600082015250565b60006146cb601383613b5f565b91506146d682614695565b602082019050919050565b600060208201905081810360008301526146fa816146be565b9050919050565b600081905092915050565b6147158161392a565b61471f8184614701565b925061472a82613940565b8060005b8381101561475b578151614742878261394a565b965061474d83613962565b92505060018101905061472e565b505050505050565b600061018082019050614779600083018a6132a1565b61478660208301896132a1565b61479360408301886132a1565b6147a060608301876136d7565b6147ad608083018661371b565b6147ba60a083018561470c565b6147c86101608301846132a1565b98975050505050505050565b7f4f6e6c79206f776e657200000000000000000000000000000000000000000000600082015250565b600061480a600a83613b5f565b9150614815826147d4565b602082019050919050565b60006020820190508181036000830152614839816147fd565b9050919050565b7f4f6e6c7920617574682063616e206465636c61726520726573756c7400000000600082015250565b6000614876601c83613b5f565b915061488182614840565b602082019050919050565b600060208201905081810360008301526148a581614869565b9050919050565b7f526573756c74206465636c617265640000000000000000000000000000000000600082015250565b60006148e2600f83613b5f565b91506148ed826148ac565b602082019050919050565b60006020820190508181036000830152614911816148d5565b9050919050565b7f496e2070726f6365737300000000000000000000000000000000000000000000600082015250565b600061494e600a83613b5f565b915061495982614918565b602082019050919050565b6000602082019050818103600083015261497d81614941565b9050919050565b7f526573756c742063616e206465636c61726564206f6e6c79206166746572203260008201527f3420687273000000000000000000000000000000000000000000000000000000602082015250565b60006149e0602583613b5f565b91506149eb82614984565b604082019050919050565b60006020820190508181036000830152614a0f816149d3565b9050919050565b6000614a2182613297565b9150614a2c83613297565b925082821015614a3f57614a3e613c48565b5b828203905092915050565b7f72657175657374206e6f7420666f756e64000000000000000000000000000000600082015250565b6000614a80601183613b5f565b9150614a8b82614a4a565b602082019050919050565b60006020820190508181036000830152614aaf81614a73565b9050919050565b6000614ac182613297565b9150614acc83613297565b925082614adc57614adb613ead565b5b828206905092915050565b600081549050919050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b6000614b31614b2c83614b07565b614b14565b9050919050565b6000614b448254614b1e565b9050919050565b6000600182019050919050565b6000614b6382614ae7565b614b6d8185613aa3565b9350614b7883614af2565b8060005b83811015614bb057614b8d82614b38565b614b97888261394a565b9750614ba283614b4b565b925050600181019050614b7c565b5085935050505092915050565b6000608082019050614bd260008301876132a1565b8181036020830152614be48186614b58565b9050614bf360408301856132a1565b614c0060608301846132a1565b95945050505050565b6000819050919050565b614c1c81614c09565b82525050565b600061ffff82169050919050565b614c3981614c22565b82525050565b600063ffffffff82169050919050565b614c5881614c3f565b82525050565b600060a082019050614c736000830188614c13565b614c806020830187613882565b614c8d6040830186614c30565b614c9a6060830185614c4f565b614ca76080830184614c4f565b9695505050505050565b7f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000600082015250565b6000614ce7601683613b5f565b9150614cf282614cb1565b602082019050919050565b60006020820190508181036000830152614d1681614cda565b9050919050565b7f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000600082015250565b6000614d53601783613b5f565b9150614d5e82614d1d565b602082019050919050565b60006020820190508181036000830152614d8281614d46565b905091905056fea2646970667358221220617057ba9e0af32f1db6ee858a82e8f0cfeaea50a40516f1a73389d5ec38b3e464736f6c634300080b00330000000000000000000000006cbc536f73328460b479206845400f312a2ce87b000000000000000000000000cba825d8f4927bf3a7033f4a04e6fb5280cc336c0000000000000000000000000a599376fa1f9eed0b0219b02246b58e5992a5a50000000000000000000000000000000000000000000000000000000063a31f700000000000000000000000000000000000000000000000000000000000000213
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000006cbc536f73328460b479206845400f312a2ce87b000000000000000000000000cba825d8f4927bf3a7033f4a04e6fb5280cc336c0000000000000000000000000a599376fa1f9eed0b0219b02246b58e5992a5a50000000000000000000000000000000000000000000000000000000063a31f700000000000000000000000000000000000000000000000000000000000000213
-----Decoded View---------------
Arg [0] : _ownerAddress (address): 0x6cbc536f73328460b479206845400f312a2ce87b
Arg [1] : _authAddress (address): 0xcba825d8f4927bf3a7033f4a04e6fb5280cc336c
Arg [2] : lottoAddress (address): 0x0a599376fa1f9eed0b0219b02246b58e5992a5a5
Arg [3] : _gameStartTime (uint256): 1671634800
Arg [4] : subscriptionId (uint64): 531
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000006cbc536f73328460b479206845400f312a2ce87b
Arg [1] : 000000000000000000000000cba825d8f4927bf3a7033f4a04e6fb5280cc336c
Arg [2] : 0000000000000000000000000a599376fa1f9eed0b0219b02246b58e5992a5a5
Arg [3] : 0000000000000000000000000000000000000000000000000000000063a31f70
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000213
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.