Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 492 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Flip Paused | 14929577 | 765 days ago | IN | 0 ETH | 0.00143946 | ||||
Draw | 14929564 | 765 days ago | IN | 0 ETH | 0.00408743 | ||||
Enter With R Was... | 14929559 | 765 days ago | IN | 0 ETH | 0.00240783 | ||||
Enter With Scale... | 14929549 | 765 days ago | IN | 0 ETH | 0.00340417 | ||||
Enter With Scale... | 14929546 | 765 days ago | IN | 0 ETH | 0.0030519 | ||||
Enter With R Was... | 14929545 | 765 days ago | IN | 0 ETH | 0.0042324 | ||||
Enter With Scale... | 14929541 | 765 days ago | IN | 0 ETH | 0.00329493 | ||||
Enter With R Was... | 14929536 | 765 days ago | IN | 0 ETH | 0.00415464 | ||||
Enter With Scale... | 14929531 | 765 days ago | IN | 0 ETH | 0.0065909 | ||||
Enter With R Was... | 14929516 | 765 days ago | IN | 0 ETH | 0.00620752 | ||||
Enter With R Was... | 14929505 | 765 days ago | IN | 0 ETH | 0.0036503 | ||||
Enter With Scale... | 14929502 | 765 days ago | IN | 0 ETH | 0.00431675 | ||||
Enter With Scale... | 14929485 | 765 days ago | IN | 0 ETH | 0.00584335 | ||||
Enter With Scale... | 14929481 | 765 days ago | IN | 0 ETH | 0.00405288 | ||||
Enter With R Was... | 14929476 | 765 days ago | IN | 0 ETH | 0.003081 | ||||
Enter With Scale... | 14929475 | 765 days ago | IN | 0 ETH | 0.00286902 | ||||
Set Vrf Request ... | 14929467 | 765 days ago | IN | 0 ETH | 0.00341018 | ||||
Set Draw Script ... | 14929447 | 765 days ago | IN | 0 ETH | 0.0045812 | ||||
Enter With Scale... | 14929388 | 765 days ago | IN | 0 ETH | 0.00282783 | ||||
Enter With R Was... | 14929383 | 765 days ago | IN | 0 ETH | 0.0020904 | ||||
Enter With R Was... | 14929374 | 765 days ago | IN | 0 ETH | 0.00219232 | ||||
Enter With R Was... | 14929367 | 765 days ago | IN | 0 ETH | 0.00229902 | ||||
Enter With R Was... | 14929259 | 765 days ago | IN | 0 ETH | 0.00352286 | ||||
Enter With Scale... | 14929249 | 765 days ago | IN | 0 ETH | 0.0032895 | ||||
Enter With Scale... | 14929244 | 765 days ago | IN | 0 ETH | 0.00395454 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
AswangTribeAllowlistRaffle
Compiler Version
v0.8.9+commit.e5eed63a
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "../Augminted/OpenAllowlistRaffleBase.sol"; error MustBeAKing(); interface IKaiju is IERC721 {} interface IMutants is IERC721 {} interface IScientists is IERC721 {} interface IRWaste { function burn(address, uint256) external; } interface IScales { function spend(address, uint256) external; } contract AswangTribeAllowlistRaffle is OpenAllowlistRaffleBase { IKaiju public immutable KAIJU; IMutants public immutable MUTANTS; IScientists public immutable SCIENTISTS; IRWaste public immutable RWASTE; IScales public immutable SCALES; uint256 public constant RWASTE_FEE = 1 ether; uint256 public constant SCALES_FEE = 5 ether; uint256 public constant RWASTE_MULTIPLIER = 2; constructor( IKaiju kaiju, IMutants mutants, IScientists scientists, IRWaste rwaste, IScales scales, uint256 numberOfWinners, address vrfCoordinator ) OpenAllowlistRaffleBase( numberOfWinners, vrfCoordinator ) { KAIJU = kaiju; MUTANTS = mutants; SCIENTISTS = scientists; RWASTE = rwaste; SCALES = scales; } /** * @notice Modifier that requires a sender to be part of the KaijuKingz ecosystem */ modifier onlyKingz() { if ( SCIENTISTS.balanceOf(_msgSender()) == 0 && KAIJU.balanceOf(_msgSender()) == 0 && MUTANTS.balanceOf(_msgSender()) == 0 ) revert MustBeAKing(); _; } /** * @notice Purchase entries into the raffle with $RWASTE * @param amount Amount of entries to purchase */ function enterWithRWaste(uint256 amount) public whenNotPaused onlyKingz { RWASTE.burn(_msgSender(), amount * RWASTE_FEE); OpenAllowlistRaffleBase.enter(amount * RWASTE_MULTIPLIER); } /** * @notice Purchase entries into the raffle with $SCALES * @param amount Amount of entries to purchase */ function enterWithScales(uint256 amount) public whenNotPaused onlyKingz { SCALES.spend(_msgSender(), amount * SCALES_FEE); OpenAllowlistRaffleBase.enter(amount); } /** * @inheritdoc OpenAllowlistRaffleBase * @dev Disable entering with parent contract's enter function */ function enter(uint256 amount) public override payable { revert(); } }
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.0; import "@chainlink/contracts/src/v0.8/interfaces/VRFCoordinatorV2Interface.sol"; import "@chainlink/contracts/src/v0.8/VRFConsumerBaseV2.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/security/Pausable.sol"; import "@openzeppelin/contracts/utils/Address.sol"; error AlreadyDrawn(); error DrawScriptNotSet(); /** ..',,;;;;:::;;;,,'.. .';:ccccc:::;;,,,,,;;;:::ccccc:;'. .,:ccc:;'.. ..';:ccc:,. .':cc:,. .,ccc:'. .,clc,. .,clc,. 'clc' 'clc' .;ll,. .;ll;. .:ol. 'co:. ;oc. .co; 'oo' 'lo' .cd; ;dc. .ol. .,. .lo. ,dc. 'cxKWK; cd, ;d; .;oONWMMMMXc ;d; ;d; 'cxKWMMMMMMMMMXl. ;x; ,x: ;dxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx0NMMMMMMMMMMMMMMNd. :x, .dc .lXMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNd. cd. ld. .oNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWXkl' .dl ,x; .xWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN0d:. ;x, oo. .kWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWKxc'. .oo 'x: .kWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNOo;. :x' :x. .xWMMMMMMMMMMM0occcccccccccccccccccccccccccccccccccccc:' .x: lo. .oNMMMMMMMMMX; .ol .ol .lXMMMMMMMWd. ,dddddddddddddddo;. .:dddddddddddddo, lo. .dl cXMMMMMM0, 'OMMMMMMMMMMMMMMNd. .xWMMMMMMMMMMMMXo. ld. .dl ;KMMMMNl oWMMMMMMMMMMMMMXc. ,OWMMMMMMMMMMMMK: ld. oo ,OWMMO. ,KMMMMMMMMMMMMW0; .cKMMMMMMMMMMMMWO, oo cd. 'kWX: .xWMMMMMMMMMMMWx. .dKNMMMMMMMMMMMMNd. .dc ,x, .dd. ;KMMMMMMMMMMMXo. 'kWMMMMMMMMMMMMMXl. ,x; .dc . .,:loxOKNWMMK: ;0WMMMMMMMMMMMMW0; cd. :d. ... ..,:c' .lXMMMMMMMMMMMMMWk' .d: .dl :OKOxoc:,.. .xNMMMMMMMMMMMMMNo. cd. ;x, ;0MMMMWWXKOxoclOWMMMMMMMMMMMMMKc ,x; cd. ,OWMMMMMMMMMMMMMMMMMMMMMMMMWO, .dc .oo. .kWMMMMMMMMMMMMMMMMMMMMMMNx. .oo. .oo. .xWMMMMMMMMMMMMMMMMMMMMXl. .oo. .lo. .oNMMMMMMMMMMMMMMMMMW0; .ol. .cd, .lXMMMMMMMMMMMMMMMWk' ,dc. ;dc. :KMMMMMMMMMMMMNKo. .cd; .lo, ;0WWWWWWWWWWKc. 'ol. ,ol. .,,,,,,,,,,. .lo, .;oc. .co:. .;ol' 'lo;. ,ll:. .:ll, .:ll;. .;ll:. .:ll:,. .,:ll:. .,:ccc;'. .';ccc:,. .';cccc::;'... ...';:ccccc;'. .',;::cc::cc::::::::::::;,.. ........ * @title Base contract for an open allowlist raffle * @author Augminted Labs, LLC * @notice Winners are calculated deterministically off-chain using a provided script */ contract OpenAllowlistRaffleBase is Ownable, Pausable, VRFConsumerBaseV2 { using Address for address; struct VrfRequestConfig { bytes32 keyHash; uint64 subId; uint32 callbackGasLimit; uint16 requestConfirmations; } event EnterRaffle( address indexed account, uint256 indexed amount ); uint256 public immutable NUMBER_OF_WINNERS; VrfRequestConfig public vrfRequestConfig; string public drawScriptURI; bool public drawn; uint256 public seed; uint256 public totalEntries; VRFCoordinatorV2Interface internal immutable COORDINATOR; constructor( uint256 numberOfWinners, address vrfCoordinator ) VRFConsumerBaseV2(vrfCoordinator) { NUMBER_OF_WINNERS = numberOfWinners; COORDINATOR = VRFCoordinatorV2Interface(vrfCoordinator); } /** * @notice Set configuration data for Chainlink VRF * @param _vrfRequestConfig Struct with updated configuration values */ function setVrfRequestConfig(VrfRequestConfig memory _vrfRequestConfig) public onlyOwner { vrfRequestConfig = _vrfRequestConfig; } /** * @notice Set URI for script used to determine winners * @param uri IPFS URI for determining the winners */ function setDrawScriptURI(string calldata uri) public onlyOwner { if (drawn) revert AlreadyDrawn(); drawScriptURI = uri; } /** * @notice Flip paused state to disable entry */ function flipPaused() public onlyOwner { paused() ? _unpause() : _pause(); } /** * @notice Add specified amount of entries into the raffle * @param amount Amount of entries to add */ function enter(uint256 amount) public virtual payable whenNotPaused { if (drawn) revert AlreadyDrawn(); totalEntries += amount; emit EnterRaffle(_msgSender(), amount); } /** * @notice Set seed for drawing winners * @dev Must set the deterministic draw script before to ensure fairness */ function draw() public onlyOwner { if (drawn) revert AlreadyDrawn(); if (bytes(drawScriptURI).length == 0) revert DrawScriptNotSet(); COORDINATOR.requestRandomWords( vrfRequestConfig.keyHash, vrfRequestConfig.subId, vrfRequestConfig.requestConfirmations, vrfRequestConfig.callbackGasLimit, 1 // number of random words ); } /** * @inheritdoc VRFConsumerBaseV2 */ function fulfillRandomWords(uint256 requestId, uint256[] memory randomWords) internal override { seed = randomWords[0]; drawn = true; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @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 functionCall(target, data, "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"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(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) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason 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 { // 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 assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (security/Pausable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT 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 pragma solidity ^0.8.0; interface VRFCoordinatorV2Interface { /** * @notice Get configuration relevant for making requests * @return minimumRequestConfirmations global min for request confirmations * @return maxGasLimit global max for request gas limit * @return s_provingKeyHashes list of registered key hashes */ function getRequestConfig() external view returns ( uint16, uint32, bytes32[] memory ); /** * @notice Request a set of random words. * @param keyHash - Corresponds to a particular oracle job which uses * that key for generating the VRF proof. Different keyHash's have different gas price * ceilings, so you can select a specific one to bound your maximum per request cost. * @param subId - The ID of the VRF subscription. Must be funded * with the minimum subscription balance required for the selected keyHash. * @param minimumRequestConfirmations - How many blocks you'd like the * oracle to wait before responding to the request. See SECURITY CONSIDERATIONS * for why you may want to request more. The acceptable range is * [minimumRequestBlockConfirmations, 200]. * @param callbackGasLimit - How much gas you'd like to receive in your * fulfillRandomWords callback. Note that gasleft() inside fulfillRandomWords * may be slightly less than this amount because of gas used calling the function * (argument decoding etc.), so you may need to request slightly more than you expect * to have inside fulfillRandomWords. The acceptable range is * [0, maxGasLimit] * @param numWords - The number of uint256 random values you'd like to receive * in your fulfillRandomWords callback. Note these numbers are expanded in a * secure way by the VRFCoordinator from a single random value supplied by the oracle. * @return requestId - A unique identifier of the request. Can be used to match * a request to a response in fulfillRandomWords. */ function requestRandomWords( bytes32 keyHash, uint64 subId, uint16 minimumRequestConfirmations, uint32 callbackGasLimit, uint32 numWords ) external returns (uint256 requestId); /** * @notice Create a VRF subscription. * @return subId - A unique subscription id. * @dev You can manage the consumer set dynamically with addConsumer/removeConsumer. * @dev Note to fund the subscription, use transferAndCall. For example * @dev LINKTOKEN.transferAndCall( * @dev address(COORDINATOR), * @dev amount, * @dev abi.encode(subId)); */ function createSubscription() external returns (uint64 subId); /** * @notice Get a VRF subscription. * @param subId - ID of the subscription * @return balance - LINK balance of the subscription in juels. * @return reqCount - number of requests for this subscription, determines fee tier. * @return owner - owner of the subscription. * @return consumers - list of consumer address which are able to use this subscription. */ function getSubscription(uint64 subId) external view returns ( uint96 balance, uint64 reqCount, address owner, address[] memory consumers ); /** * @notice Request subscription owner transfer. * @param subId - ID of the subscription * @param newOwner - proposed new owner of the subscription */ function requestSubscriptionOwnerTransfer(uint64 subId, address newOwner) external; /** * @notice Request subscription owner transfer. * @param subId - ID of the subscription * @dev will revert if original owner of subId has * not requested that msg.sender become the new owner. */ function acceptSubscriptionOwnerTransfer(uint64 subId) external; /** * @notice Add a consumer to a VRF subscription. * @param subId - ID of the subscription * @param consumer - New consumer which can use the subscription */ function addConsumer(uint64 subId, address consumer) external; /** * @notice Remove a consumer from a VRF subscription. * @param subId - ID of the subscription * @param consumer - Consumer to remove from the subscription */ function removeConsumer(uint64 subId, address consumer) external; /** * @notice Cancel a subscription * @param subId - ID of the subscription * @param to - Where to send the remaining LINK to */ function cancelSubscription(uint64 subId, address to) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IKaiju","name":"kaiju","type":"address"},{"internalType":"contract IMutants","name":"mutants","type":"address"},{"internalType":"contract IScientists","name":"scientists","type":"address"},{"internalType":"contract IRWaste","name":"rwaste","type":"address"},{"internalType":"contract IScales","name":"scales","type":"address"},{"internalType":"uint256","name":"numberOfWinners","type":"uint256"},{"internalType":"address","name":"vrfCoordinator","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyDrawn","type":"error"},{"inputs":[],"name":"DrawScriptNotSet","type":"error"},{"inputs":[],"name":"MustBeAKing","type":"error"},{"inputs":[{"internalType":"address","name":"have","type":"address"},{"internalType":"address","name":"want","type":"address"}],"name":"OnlyCoordinatorCanFulfill","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EnterRaffle","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"KAIJU","outputs":[{"internalType":"contract IKaiju","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MUTANTS","outputs":[{"internalType":"contract IMutants","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NUMBER_OF_WINNERS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RWASTE","outputs":[{"internalType":"contract IRWaste","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RWASTE_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RWASTE_MULTIPLIER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SCALES","outputs":[{"internalType":"contract IScales","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SCALES_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SCIENTISTS","outputs":[{"internalType":"contract IScientists","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"draw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"drawScriptURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"drawn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"enter","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"enterWithRWaste","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"enterWithScales","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256"},{"internalType":"uint256[]","name":"randomWords","type":"uint256[]"}],"name":"rawFulfillRandomWords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"seed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setDrawScriptURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"bytes32","name":"keyHash","type":"bytes32"},{"internalType":"uint64","name":"subId","type":"uint64"},{"internalType":"uint32","name":"callbackGasLimit","type":"uint32"},{"internalType":"uint16","name":"requestConfirmations","type":"uint16"}],"internalType":"struct OpenAllowlistRaffleBase.VrfRequestConfig","name":"_vrfRequestConfig","type":"tuple"}],"name":"setVrfRequestConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalEntries","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vrfRequestConfig","outputs":[{"internalType":"bytes32","name":"keyHash","type":"bytes32"},{"internalType":"uint64","name":"subId","type":"uint64"},{"internalType":"uint32","name":"callbackGasLimit","type":"uint32"},{"internalType":"uint16","name":"requestConfirmations","type":"uint16"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6101806040523480156200001257600080fd5b50604051620018d6380380620018d68339810160408190526200003591620000f9565b818180620000433362000090565b6000805460ff60a01b191690556001600160a01b0390811660805260a092909252811660c05296871660e05250509284166101005290831661012052821661014052166101605262000198565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620000f657600080fd5b50565b600080600080600080600060e0888a0312156200011557600080fd5b87516200012281620000e0565b60208901519097506200013581620000e0565b60408901519096506200014881620000e0565b60608901519095506200015b81620000e0565b60808901519094506200016e81620000e0565b60a089015160c08a015191945092506200018881620000e0565b8091505092959891949750929550565b60805160a05160c05160e051610100516101205161014051610160516116996200023d600039600081816104f10152610e260152600081816103d20152610a1201526000818161039e015281816107ec0152610c000152600081816104060152818161094b0152610d5f0152600081816102e80152818161089b0152610caf015260006106a90152600061029f01526000818161073b015261077d01526116996000f3fe6080604052600436106101805760003560e01c80638da5cb5b116100d1578063adb7cbc21161008a578063c50197d011610064578063c50197d0146104df578063c5a5949814610513578063f2fde38b14610533578063fd915ef21461055357600080fd5b8063adb7cbc214610436578063b72e9f361461044b578063bf1557e4146104c357600080fd5b80638da5cb5b1461034e578063931936231461036c57806393b5d9231461038c5780639af6bc97146103c0578063a3a44c09146103f4578063a59f3e0c1461042857600080fd5b80634281e60e1161013e578063715018a611610118578063715018a6146102c15780637792cf21146102d65780637d94792a146103225780637fef036e1461033857600080fd5b80634281e60e146102405780635c975abb146102625780636926726e1461028d57600080fd5b80627f3089146101855780630eecae21146101a75780631fe543e3146101bc57806325791ea5146101dc57806327f5c97d146101fc578063333171bb1461022b575b600080fd5b34801561019157600080fd5b506101a56101a03660046112a0565b61056d565b005b3480156101b357600080fd5b506101a56105d5565b3480156101c857600080fd5b506101a56101d7366004611359565b610730565b3480156101e857600080fd5b506101a56101f736600461140b565b6107b8565b34801561020857600080fd5b50610218670de0b6b3a764000081565b6040519081526020015b60405180910390f35b34801561023757600080fd5b506101a5610abd565b34801561024c57600080fd5b50610255610b0a565b6040516102229190611424565b34801561026e57600080fd5b50600054600160a01b900460ff165b6040519015158152602001610222565b34801561029957600080fd5b506102187f000000000000000000000000000000000000000000000000000000000000000081565b3480156102cd57600080fd5b506101a5610b98565b3480156102e257600080fd5b5061030a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610222565b34801561032e57600080fd5b5061021860055481565b34801561034457600080fd5b5061021860065481565b34801561035a57600080fd5b506000546001600160a01b031661030a565b34801561037857600080fd5b506101a561038736600461140b565b610bcc565b34801561039857600080fd5b5061030a7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103cc57600080fd5b5061030a7f000000000000000000000000000000000000000000000000000000000000000081565b34801561040057600080fd5b5061030a7f000000000000000000000000000000000000000000000000000000000000000081565b6101a561018036600461140b565b34801561044257600080fd5b50610218600281565b34801561045757600080fd5b5060015460025461048b919067ffffffffffffffff811690600160401b810463ffffffff1690600160601b900461ffff1684565b6040805194855267ffffffffffffffff909316602085015263ffffffff9091169183019190915261ffff166060820152608001610222565b3480156104cf57600080fd5b50610218674563918244f4000081565b3480156104eb57600080fd5b5061030a7f000000000000000000000000000000000000000000000000000000000000000081565b34801561051f57600080fd5b506101a561052e366004611490565b610ec5565b34801561053f57600080fd5b506101a561054e36600461151d565b610f52565b34801561055f57600080fd5b5060045461027d9060ff1681565b6000546001600160a01b031633146105a05760405162461bcd60e51b81526004016105979061154d565b60405180910390fd5b60045460ff16156105c45760405163097e1d9b60e01b815260040160405180910390fd5b6105d060038383611207565b505050565b6000546001600160a01b031633146105ff5760405162461bcd60e51b81526004016105979061154d565b60045460ff16156106235760405163097e1d9b60e01b815260040160405180910390fd5b6003805461063090611582565b15159050610651576040516319eefa8d60e11b815260040160405180910390fd5b600180546002546040516305d3b1d360e41b8152600481019290925267ffffffffffffffff81166024830152600160601b810461ffff166044830152600160401b900463ffffffff16606482015260848101919091527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635d3b1d309060a401602060405180830381600087803b1580156106f557600080fd5b505af1158015610709573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072d91906115bd565b50565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107aa5760405163073e64fd60e21b81523360048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166024820152604401610597565b6107b48282610fea565b5050565b600054600160a01b900460ff16156107e25760405162461bcd60e51b8152600401610597906115d6565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166370a08231336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b15801561085157600080fd5b505afa158015610865573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088991906115bd565b15801561093a57506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166370a08231336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b15801561090057600080fd5b505afa158015610914573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093891906115bd565b155b80156109ea57506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166370a08231336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b1580156109b057600080fd5b505afa1580156109c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e891906115bd565b155b15610a085760405163012e7f8360e41b815260040160405180910390fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016639dc29fac33610a4a670de0b6b3a764000085611616565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015610a9057600080fd5b505af1158015610aa4573d6000803e3d6000fd5b5050505061072d600282610ab89190611616565b61101c565b6000546001600160a01b03163314610ae75760405162461bcd60e51b81526004016105979061154d565b600054600160a01b900460ff16610b0257610b006110b1565b565b610b00611133565b60038054610b1790611582565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4390611582565b8015610b905780601f10610b6557610100808354040283529160200191610b90565b820191906000526020600020905b815481529060010190602001808311610b7357829003601f168201915b505050505081565b6000546001600160a01b03163314610bc25760405162461bcd60e51b81526004016105979061154d565b610b0060006111b7565b600054600160a01b900460ff1615610bf65760405162461bcd60e51b8152600401610597906115d6565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166370a08231336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b158015610c6557600080fd5b505afa158015610c79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9d91906115bd565b158015610d4e57506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166370a08231336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b158015610d1457600080fd5b505afa158015610d28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4c91906115bd565b155b8015610dfe57506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166370a08231336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b158015610dc457600080fd5b505afa158015610dd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfc91906115bd565b155b15610e1c5760405163012e7f8360e41b815260040160405180910390fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663af7d6ca333610e5e674563918244f4000085611616565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015610ea457600080fd5b505af1158015610eb8573d6000803e3d6000fd5b5050505061072d8161101c565b6000546001600160a01b03163314610eef5760405162461bcd60e51b81526004016105979061154d565b8051600155602081015160028054604084015160609094015161ffff16600160601b0261ffff60601b1963ffffffff909516600160401b026bffffffffffffffffffffffff1990921667ffffffffffffffff909416939093171792909216179055565b6000546001600160a01b03163314610f7c5760405162461bcd60e51b81526004016105979061154d565b6001600160a01b038116610fe15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610597565b61072d816111b7565b80600081518110610ffd57610ffd611635565b602090810291909101015160055550506004805460ff19166001179055565b600054600160a01b900460ff16156110465760405162461bcd60e51b8152600401610597906115d6565b60045460ff161561106a5760405163097e1d9b60e01b815260040160405180910390fd5b806006600082825461107c919061164b565b9091555050604051819033907f9a81ce3a679d7c14ca6cb068b89fe35b2f18101c15a5562856dcd93d488bce6990600090a350565b600054600160a01b900460ff16156110db5760405162461bcd60e51b8152600401610597906115d6565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586111163390565b6040516001600160a01b03909116815260200160405180910390a1565b600054600160a01b900460ff166111835760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610597565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611116565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b82805461121390611582565b90600052602060002090601f016020900481019282611235576000855561127b565b82601f1061124e5782800160ff1982351617855561127b565b8280016001018555821561127b579182015b8281111561127b578235825591602001919060010190611260565b5061128792915061128b565b5090565b5b80821115611287576000815560010161128c565b600080602083850312156112b357600080fd5b823567ffffffffffffffff808211156112cb57600080fd5b818501915085601f8301126112df57600080fd5b8135818111156112ee57600080fd5b86602082850101111561130057600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561135157611351611312565b604052919050565b6000806040838503121561136c57600080fd5b8235915060208084013567ffffffffffffffff8082111561138c57600080fd5b818601915086601f8301126113a057600080fd5b8135818111156113b2576113b2611312565b8060051b91506113c3848301611328565b81815291830184019184810190898411156113dd57600080fd5b938501935b838510156113fb578435825293850193908501906113e2565b8096505050505050509250929050565b60006020828403121561141d57600080fd5b5035919050565b600060208083528351808285015260005b8181101561145157858101830151858201604001528201611435565b81811115611463576000604083870101525b50601f01601f1916929092016040019392505050565b803561ffff8116811461148b57600080fd5b919050565b6000608082840312156114a257600080fd5b6040516080810167ffffffffffffffff82821081831117156114c6576114c6611312565b81604052843583526020850135915080821682146114e357600080fd5b506020820152604083013563ffffffff8116811461150057600080fd5b604082015261151160608401611479565b60608201529392505050565b60006020828403121561152f57600080fd5b81356001600160a01b038116811461154657600080fd5b9392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061159657607f821691505b602082108114156115b757634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156115cf57600080fd5b5051919050565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561163057611630611600565b500290565b634e487b7160e01b600052603260045260246000fd5b6000821982111561165e5761165e611600565b50019056fea2646970667358221220f82bb1660c3b66a043d37ca6d55ec533ecd2d041aa5d6b5825d8de34a55ff8cf64736f6c6343000809003300000000000000000000000017d389f373975beed23d7aef8ca8e66b88e8d81800000000000000000000000083f82414b5065bb9a85e330c67b4a10f798f4ed2000000000000000000000000a310425046661c523d98344f7e9d66b32195365d0000000000000000000000005cd2fac9702d68dde5a94b1af95962bcfb80fc7d00000000000000000000000027192b750ff796514f039512aaf5a3655a095ea00000000000000000000000000000000000000000000000000000000000000028000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e69909
Deployed Bytecode
0x6080604052600436106101805760003560e01c80638da5cb5b116100d1578063adb7cbc21161008a578063c50197d011610064578063c50197d0146104df578063c5a5949814610513578063f2fde38b14610533578063fd915ef21461055357600080fd5b8063adb7cbc214610436578063b72e9f361461044b578063bf1557e4146104c357600080fd5b80638da5cb5b1461034e578063931936231461036c57806393b5d9231461038c5780639af6bc97146103c0578063a3a44c09146103f4578063a59f3e0c1461042857600080fd5b80634281e60e1161013e578063715018a611610118578063715018a6146102c15780637792cf21146102d65780637d94792a146103225780637fef036e1461033857600080fd5b80634281e60e146102405780635c975abb146102625780636926726e1461028d57600080fd5b80627f3089146101855780630eecae21146101a75780631fe543e3146101bc57806325791ea5146101dc57806327f5c97d146101fc578063333171bb1461022b575b600080fd5b34801561019157600080fd5b506101a56101a03660046112a0565b61056d565b005b3480156101b357600080fd5b506101a56105d5565b3480156101c857600080fd5b506101a56101d7366004611359565b610730565b3480156101e857600080fd5b506101a56101f736600461140b565b6107b8565b34801561020857600080fd5b50610218670de0b6b3a764000081565b6040519081526020015b60405180910390f35b34801561023757600080fd5b506101a5610abd565b34801561024c57600080fd5b50610255610b0a565b6040516102229190611424565b34801561026e57600080fd5b50600054600160a01b900460ff165b6040519015158152602001610222565b34801561029957600080fd5b506102187f000000000000000000000000000000000000000000000000000000000000002881565b3480156102cd57600080fd5b506101a5610b98565b3480156102e257600080fd5b5061030a7f00000000000000000000000017d389f373975beed23d7aef8ca8e66b88e8d81881565b6040516001600160a01b039091168152602001610222565b34801561032e57600080fd5b5061021860055481565b34801561034457600080fd5b5061021860065481565b34801561035a57600080fd5b506000546001600160a01b031661030a565b34801561037857600080fd5b506101a561038736600461140b565b610bcc565b34801561039857600080fd5b5061030a7f000000000000000000000000a310425046661c523d98344f7e9d66b32195365d81565b3480156103cc57600080fd5b5061030a7f0000000000000000000000005cd2fac9702d68dde5a94b1af95962bcfb80fc7d81565b34801561040057600080fd5b5061030a7f00000000000000000000000083f82414b5065bb9a85e330c67b4a10f798f4ed281565b6101a561018036600461140b565b34801561044257600080fd5b50610218600281565b34801561045757600080fd5b5060015460025461048b919067ffffffffffffffff811690600160401b810463ffffffff1690600160601b900461ffff1684565b6040805194855267ffffffffffffffff909316602085015263ffffffff9091169183019190915261ffff166060820152608001610222565b3480156104cf57600080fd5b50610218674563918244f4000081565b3480156104eb57600080fd5b5061030a7f00000000000000000000000027192b750ff796514f039512aaf5a3655a095ea081565b34801561051f57600080fd5b506101a561052e366004611490565b610ec5565b34801561053f57600080fd5b506101a561054e36600461151d565b610f52565b34801561055f57600080fd5b5060045461027d9060ff1681565b6000546001600160a01b031633146105a05760405162461bcd60e51b81526004016105979061154d565b60405180910390fd5b60045460ff16156105c45760405163097e1d9b60e01b815260040160405180910390fd5b6105d060038383611207565b505050565b6000546001600160a01b031633146105ff5760405162461bcd60e51b81526004016105979061154d565b60045460ff16156106235760405163097e1d9b60e01b815260040160405180910390fd5b6003805461063090611582565b15159050610651576040516319eefa8d60e11b815260040160405180910390fd5b600180546002546040516305d3b1d360e41b8152600481019290925267ffffffffffffffff81166024830152600160601b810461ffff166044830152600160401b900463ffffffff16606482015260848101919091527f000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e699096001600160a01b031690635d3b1d309060a401602060405180830381600087803b1580156106f557600080fd5b505af1158015610709573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072d91906115bd565b50565b336001600160a01b037f000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e6990916146107aa5760405163073e64fd60e21b81523360048201526001600160a01b037f000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e69909166024820152604401610597565b6107b48282610fea565b5050565b600054600160a01b900460ff16156107e25760405162461bcd60e51b8152600401610597906115d6565b6001600160a01b037f000000000000000000000000a310425046661c523d98344f7e9d66b32195365d166370a08231336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b15801561085157600080fd5b505afa158015610865573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088991906115bd565b15801561093a57506001600160a01b037f00000000000000000000000017d389f373975beed23d7aef8ca8e66b88e8d818166370a08231336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b15801561090057600080fd5b505afa158015610914573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093891906115bd565b155b80156109ea57506001600160a01b037f00000000000000000000000083f82414b5065bb9a85e330c67b4a10f798f4ed2166370a08231336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b1580156109b057600080fd5b505afa1580156109c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e891906115bd565b155b15610a085760405163012e7f8360e41b815260040160405180910390fd5b6001600160a01b037f0000000000000000000000005cd2fac9702d68dde5a94b1af95962bcfb80fc7d16639dc29fac33610a4a670de0b6b3a764000085611616565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015610a9057600080fd5b505af1158015610aa4573d6000803e3d6000fd5b5050505061072d600282610ab89190611616565b61101c565b6000546001600160a01b03163314610ae75760405162461bcd60e51b81526004016105979061154d565b600054600160a01b900460ff16610b0257610b006110b1565b565b610b00611133565b60038054610b1790611582565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4390611582565b8015610b905780601f10610b6557610100808354040283529160200191610b90565b820191906000526020600020905b815481529060010190602001808311610b7357829003601f168201915b505050505081565b6000546001600160a01b03163314610bc25760405162461bcd60e51b81526004016105979061154d565b610b0060006111b7565b600054600160a01b900460ff1615610bf65760405162461bcd60e51b8152600401610597906115d6565b6001600160a01b037f000000000000000000000000a310425046661c523d98344f7e9d66b32195365d166370a08231336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b158015610c6557600080fd5b505afa158015610c79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9d91906115bd565b158015610d4e57506001600160a01b037f00000000000000000000000017d389f373975beed23d7aef8ca8e66b88e8d818166370a08231336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b158015610d1457600080fd5b505afa158015610d28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4c91906115bd565b155b8015610dfe57506001600160a01b037f00000000000000000000000083f82414b5065bb9a85e330c67b4a10f798f4ed2166370a08231336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b158015610dc457600080fd5b505afa158015610dd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfc91906115bd565b155b15610e1c5760405163012e7f8360e41b815260040160405180910390fd5b6001600160a01b037f00000000000000000000000027192b750ff796514f039512aaf5a3655a095ea01663af7d6ca333610e5e674563918244f4000085611616565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015610ea457600080fd5b505af1158015610eb8573d6000803e3d6000fd5b5050505061072d8161101c565b6000546001600160a01b03163314610eef5760405162461bcd60e51b81526004016105979061154d565b8051600155602081015160028054604084015160609094015161ffff16600160601b0261ffff60601b1963ffffffff909516600160401b026bffffffffffffffffffffffff1990921667ffffffffffffffff909416939093171792909216179055565b6000546001600160a01b03163314610f7c5760405162461bcd60e51b81526004016105979061154d565b6001600160a01b038116610fe15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610597565b61072d816111b7565b80600081518110610ffd57610ffd611635565b602090810291909101015160055550506004805460ff19166001179055565b600054600160a01b900460ff16156110465760405162461bcd60e51b8152600401610597906115d6565b60045460ff161561106a5760405163097e1d9b60e01b815260040160405180910390fd5b806006600082825461107c919061164b565b9091555050604051819033907f9a81ce3a679d7c14ca6cb068b89fe35b2f18101c15a5562856dcd93d488bce6990600090a350565b600054600160a01b900460ff16156110db5760405162461bcd60e51b8152600401610597906115d6565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586111163390565b6040516001600160a01b03909116815260200160405180910390a1565b600054600160a01b900460ff166111835760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610597565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611116565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b82805461121390611582565b90600052602060002090601f016020900481019282611235576000855561127b565b82601f1061124e5782800160ff1982351617855561127b565b8280016001018555821561127b579182015b8281111561127b578235825591602001919060010190611260565b5061128792915061128b565b5090565b5b80821115611287576000815560010161128c565b600080602083850312156112b357600080fd5b823567ffffffffffffffff808211156112cb57600080fd5b818501915085601f8301126112df57600080fd5b8135818111156112ee57600080fd5b86602082850101111561130057600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561135157611351611312565b604052919050565b6000806040838503121561136c57600080fd5b8235915060208084013567ffffffffffffffff8082111561138c57600080fd5b818601915086601f8301126113a057600080fd5b8135818111156113b2576113b2611312565b8060051b91506113c3848301611328565b81815291830184019184810190898411156113dd57600080fd5b938501935b838510156113fb578435825293850193908501906113e2565b8096505050505050509250929050565b60006020828403121561141d57600080fd5b5035919050565b600060208083528351808285015260005b8181101561145157858101830151858201604001528201611435565b81811115611463576000604083870101525b50601f01601f1916929092016040019392505050565b803561ffff8116811461148b57600080fd5b919050565b6000608082840312156114a257600080fd5b6040516080810167ffffffffffffffff82821081831117156114c6576114c6611312565b81604052843583526020850135915080821682146114e357600080fd5b506020820152604083013563ffffffff8116811461150057600080fd5b604082015261151160608401611479565b60608201529392505050565b60006020828403121561152f57600080fd5b81356001600160a01b038116811461154657600080fd5b9392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061159657607f821691505b602082108114156115b757634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156115cf57600080fd5b5051919050565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561163057611630611600565b500290565b634e487b7160e01b600052603260045260246000fd5b6000821982111561165e5761165e611600565b50019056fea2646970667358221220f82bb1660c3b66a043d37ca6d55ec533ecd2d041aa5d6b5825d8de34a55ff8cf64736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000017d389f373975beed23d7aef8ca8e66b88e8d81800000000000000000000000083f82414b5065bb9a85e330c67b4a10f798f4ed2000000000000000000000000a310425046661c523d98344f7e9d66b32195365d0000000000000000000000005cd2fac9702d68dde5a94b1af95962bcfb80fc7d00000000000000000000000027192b750ff796514f039512aaf5a3655a095ea00000000000000000000000000000000000000000000000000000000000000028000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e69909
-----Decoded View---------------
Arg [0] : kaiju (address): 0x17D389f373975beED23d7Aef8Ca8e66B88E8D818
Arg [1] : mutants (address): 0x83f82414b5065bB9A85E330C67B4A10f798F4eD2
Arg [2] : scientists (address): 0xA310425046661c523d98344F7E9D66B32195365d
Arg [3] : rwaste (address): 0x5cd2FAc9702D68dde5a94B1af95962bCFb80fC7d
Arg [4] : scales (address): 0x27192b750fF796514f039512aaf5A3655a095ea0
Arg [5] : numberOfWinners (uint256): 40
Arg [6] : vrfCoordinator (address): 0x271682DEB8C4E0901D1a1550aD2e64D568E69909
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 00000000000000000000000017d389f373975beed23d7aef8ca8e66b88e8d818
Arg [1] : 00000000000000000000000083f82414b5065bb9a85e330c67b4a10f798f4ed2
Arg [2] : 000000000000000000000000a310425046661c523d98344f7e9d66b32195365d
Arg [3] : 0000000000000000000000005cd2fac9702d68dde5a94b1af95962bcfb80fc7d
Arg [4] : 00000000000000000000000027192b750ff796514f039512aaf5a3655a095ea0
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000028
Arg [6] : 000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e69909
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.