Source Code
Latest 25 from a total of 1,032 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Draw | 16601808 | 1064 days ago | IN | 0 ETH | 0.00161664 | ||||
| Set Draw Script ... | 16601652 | 1064 days ago | IN | 0 ETH | 0.00262364 | ||||
| Set Vrf Request ... | 16601648 | 1064 days ago | IN | 0 ETH | 0.00153444 | ||||
| Flip Paused | 16599121 | 1064 days ago | IN | 0 ETH | 0.00170298 | ||||
| Enter With Scale... | 16595530 | 1064 days ago | IN | 0 ETH | 0.00200788 | ||||
| Enter With R Was... | 16595524 | 1064 days ago | IN | 0 ETH | 0.0019241 | ||||
| Enter With R Was... | 16595523 | 1064 days ago | IN | 0 ETH | 0.00205369 | ||||
| Enter With R Was... | 16595517 | 1064 days ago | IN | 0 ETH | 0.00177452 | ||||
| Enter With R Was... | 16595514 | 1064 days ago | IN | 0 ETH | 0.0019241 | ||||
| Enter With R Was... | 16595512 | 1064 days ago | IN | 0 ETH | 0.00197271 | ||||
| Enter With R Was... | 16595511 | 1064 days ago | IN | 0 ETH | 0.00184128 | ||||
| Enter With R Was... | 16595505 | 1064 days ago | IN | 0 ETH | 0.00201585 | ||||
| Enter With R Was... | 16595499 | 1064 days ago | IN | 0 ETH | 0.0022075 | ||||
| Enter With Scale... | 16595494 | 1064 days ago | IN | 0 ETH | 0.00249734 | ||||
| Enter With R Was... | 16595492 | 1064 days ago | IN | 0 ETH | 0.00233901 | ||||
| Enter With R Was... | 16595484 | 1064 days ago | IN | 0 ETH | 0.00287533 | ||||
| Enter With Scale... | 16595480 | 1064 days ago | IN | 0 ETH | 0.00327723 | ||||
| Enter With Scale... | 16595472 | 1064 days ago | IN | 0 ETH | 0.00215849 | ||||
| Enter With Scale... | 16595467 | 1064 days ago | IN | 0 ETH | 0.00241015 | ||||
| Enter With R Was... | 16595461 | 1064 days ago | IN | 0 ETH | 0.00278422 | ||||
| Enter With Scale... | 16595438 | 1064 days ago | IN | 0 ETH | 0.00211912 | ||||
| Enter With R Was... | 16595429 | 1064 days ago | IN | 0 ETH | 0.00212901 | ||||
| Enter With R Was... | 16595425 | 1064 days ago | IN | 0 ETH | 0.00213595 | ||||
| Enter With Scale... | 16595424 | 1064 days ago | IN | 0 ETH | 0.00198771 | ||||
| Enter With R Was... | 16595422 | 1064 days ago | IN | 0 ETH | 0.00171141 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
GhostBoyAllowlistRaffle
Compiler Version
v0.8.16+commit.07a7930e
Optimization Enabled:
No 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 GhostBoyAllowlistRaffle_MustBeAKing();
interface IRWaste { function burn(address, uint256) external; }
interface IScales { function spend(address, uint256) external; }
contract GhostBoyAllowlistRaffle is OpenAllowlistRaffleBase {
IERC721 public immutable KAIJUS;
IERC721 public immutable MUTANTS;
IERC721 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;
uint256 public constant KOK_MULTIPLIER = 2;
constructor(
IERC721 kaijus,
IERC721 mutants,
IERC721 scientists,
IRWaste rwaste,
IScales scales,
uint256 numberOfWinners,
address vrfCoordinator
)
OpenAllowlistRaffleBase(numberOfWinners, vrfCoordinator)
{
KAIJUS = kaijus;
MUTANTS = mutants;
SCIENTISTS = scientists;
RWASTE = rwaste;
SCALES = scales;
}
/**
* @notice Modifier that requires a sender to be part of the KaijuKingz ecosystem
*/
modifier onlyKingz() {
if (
KAIJUS.balanceOf(msg.sender) == 0
&& MUTANTS.balanceOf(msg.sender) == 0
&& SCIENTISTS.balanceOf(msg.sender) == 0
) revert GhostBoyAllowlistRaffle_MustBeAKing();
_;
}
/**
* @notice Returns whether or not a specified address holds as least 10 genesis or baby kaijus
* @param entrant Address to check King of Kingz status
* @return bool King of Kingz status of entrant
*/
function _isKingOfKingz(address entrant) private view returns (bool) {
return KAIJUS.balanceOf(entrant) > 9;
}
/**
* @notice Purchase entries into the raffle with $RWASTE
* @param amount Amount of entries to purchase
*/
function enterWithRWaste(uint256 amount) public payable onlyKingz {
RWASTE.burn(msg.sender, amount * RWASTE_FEE);
_enter(msg.sender, amount * RWASTE_MULTIPLIER);
}
/**
* @notice Purchase entries into the raffle with $SCALES
* @param amount Amount of entries to purchase
*/
function enterWithScales(uint256 amount) public payable onlyKingz {
SCALES.spend(msg.sender, amount * SCALES_FEE);
_enter(msg.sender, amount);
}
/**
* @notice Add specified amount of entries into the raffle
* @param entrant Address entering the raffle
* @param amount Amount of entries to add
*/
function _enter(address entrant, uint256 amount) internal override {
OpenAllowlistRaffleBase._enter(
entrant,
_isKingOfKingz(entrant) ? amount * KOK_MULTIPLIER : amount
);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)
pragma solidity ^0.8.0;
import "../../utils/introspection/IERC165.sol";
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
}// SPDX-License-Identifier: 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 OpenAllowlistRaffleBase_AlreadyDrawn();
error OpenAllowlistRaffleBase_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 OpenAllowlistRaffleBase_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 entrant Address entering the raffle
* @param amount Amount of entries to add
*/
function _enter(address entrant, uint256 amount) internal virtual whenNotPaused {
if (drawn) revert OpenAllowlistRaffleBase_AlreadyDrawn();
totalEntries += amount;
emit EnterRaffle(entrant, 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 OpenAllowlistRaffleBase_AlreadyDrawn();
if (bytes(drawScriptURI).length == 0) revert OpenAllowlistRaffleBase_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 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
pragma solidity ^0.8.0;
interface VRFCoordinatorV2Interface {
/**
* @notice Get configuration relevant for making requests
* @return minimumRequestConfirmations global min for request confirmations
* @return maxGasLimit global max for request gas limit
* @return s_provingKeyHashes list of registered key hashes
*/
function getRequestConfig()
external
view
returns (
uint16,
uint32,
bytes32[] memory
);
/**
* @notice Request a set of random words.
* @param keyHash - Corresponds to a particular oracle job which uses
* that key for generating the VRF proof. Different keyHash's have different gas price
* ceilings, so you can select a specific one to bound your maximum per request cost.
* @param subId - The ID of the VRF subscription. Must be funded
* with the minimum subscription balance required for the selected keyHash.
* @param minimumRequestConfirmations - How many blocks you'd like the
* oracle to wait before responding to the request. See SECURITY CONSIDERATIONS
* for why you may want to request more. The acceptable range is
* [minimumRequestBlockConfirmations, 200].
* @param callbackGasLimit - How much gas you'd like to receive in your
* fulfillRandomWords callback. Note that gasleft() inside fulfillRandomWords
* may be slightly less than this amount because of gas used calling the function
* (argument decoding etc.), so you may need to request slightly more than you expect
* to have inside fulfillRandomWords. The acceptable range is
* [0, maxGasLimit]
* @param numWords - The number of uint256 random values you'd like to receive
* in your fulfillRandomWords callback. Note these numbers are expanded in a
* secure way by the VRFCoordinator from a single random value supplied by the oracle.
* @return requestId - A unique identifier of the request. Can be used to match
* a request to a response in fulfillRandomWords.
*/
function requestRandomWords(
bytes32 keyHash,
uint64 subId,
uint16 minimumRequestConfirmations,
uint32 callbackGasLimit,
uint32 numWords
) external returns (uint256 requestId);
/**
* @notice Create a VRF subscription.
* @return subId - A unique subscription id.
* @dev You can manage the consumer set dynamically with addConsumer/removeConsumer.
* @dev Note to fund the subscription, use transferAndCall. For example
* @dev LINKTOKEN.transferAndCall(
* @dev address(COORDINATOR),
* @dev amount,
* @dev abi.encode(subId));
*/
function createSubscription() external returns (uint64 subId);
/**
* @notice Get a VRF subscription.
* @param subId - ID of the subscription
* @return balance - LINK balance of the subscription in juels.
* @return reqCount - number of requests for this subscription, determines fee tier.
* @return owner - owner of the subscription.
* @return consumers - list of consumer address which are able to use this subscription.
*/
function getSubscription(uint64 subId)
external
view
returns (
uint96 balance,
uint64 reqCount,
address owner,
address[] memory consumers
);
/**
* @notice Request subscription owner transfer.
* @param subId - ID of the subscription
* @param newOwner - proposed new owner of the subscription
*/
function requestSubscriptionOwnerTransfer(uint64 subId, address newOwner) external;
/**
* @notice Request subscription owner transfer.
* @param subId - ID of the subscription
* @dev will revert if original owner of subId has
* not requested that msg.sender become the new owner.
*/
function acceptSubscriptionOwnerTransfer(uint64 subId) external;
/**
* @notice Add a consumer to a VRF subscription.
* @param subId - ID of the subscription
* @param consumer - New consumer which can use the subscription
*/
function addConsumer(uint64 subId, address consumer) external;
/**
* @notice Remove a consumer from a VRF subscription.
* @param subId - ID of the subscription
* @param consumer - Consumer to remove from the subscription
*/
function removeConsumer(uint64 subId, address consumer) external;
/**
* @notice Cancel a subscription
* @param subId - ID of the subscription
* @param to - Where to send the remaining LINK to
*/
function cancelSubscription(uint64 subId, address to) external;
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/** ****************************************************************************
* @notice Interface for contracts using VRF randomness
* *****************************************************************************
* @dev PURPOSE
*
* @dev Reggie the Random Oracle (not his real job) wants to provide randomness
* @dev to Vera the verifier in such a way that Vera can be sure he's not
* @dev making his output up to suit himself. Reggie provides Vera a public key
* @dev to which he knows the secret key. Each time Vera provides a seed to
* @dev Reggie, he gives back a value which is computed completely
* @dev deterministically from the seed and the secret key.
*
* @dev Reggie provides a proof by which Vera can verify that the output was
* @dev correctly computed once Reggie tells it to her, but without that proof,
* @dev the output is indistinguishable to her from a uniform random sample
* @dev from the output space.
*
* @dev The purpose of this contract is to make it easy for unrelated contracts
* @dev to talk to Vera the verifier about the work Reggie is doing, to provide
* @dev simple access to a verifiable source of randomness. It ensures 2 things:
* @dev 1. The fulfillment came from the VRFCoordinator
* @dev 2. The consumer contract implements fulfillRandomWords.
* *****************************************************************************
* @dev USAGE
*
* @dev Calling contracts must inherit from VRFConsumerBase, and can
* @dev initialize VRFConsumerBase's attributes in their constructor as
* @dev shown:
*
* @dev contract VRFConsumer {
* @dev constructor(<other arguments>, address _vrfCoordinator, address _link)
* @dev VRFConsumerBase(_vrfCoordinator) public {
* @dev <initialization with other arguments goes here>
* @dev }
* @dev }
*
* @dev The oracle will have given you an ID for the VRF keypair they have
* @dev committed to (let's call it keyHash). Create subscription, fund it
* @dev and your consumer contract as a consumer of it (see VRFCoordinatorInterface
* @dev subscription management functions).
* @dev Call requestRandomWords(keyHash, subId, minimumRequestConfirmations,
* @dev callbackGasLimit, numWords),
* @dev see (VRFCoordinatorInterface for a description of the arguments).
*
* @dev Once the VRFCoordinator has received and validated the oracle's response
* @dev to your request, it will call your contract's fulfillRandomWords method.
*
* @dev The randomness argument to fulfillRandomWords is a set of random words
* @dev generated from your requestId and the blockHash of the request.
*
* @dev If your contract could have concurrent requests open, you can use the
* @dev requestId returned from requestRandomWords to track which response is associated
* @dev with which randomness request.
* @dev See "SECURITY CONSIDERATIONS" for principles to keep in mind,
* @dev if your contract could have multiple requests in flight simultaneously.
*
* @dev Colliding `requestId`s are cryptographically impossible as long as seeds
* @dev differ.
*
* *****************************************************************************
* @dev SECURITY CONSIDERATIONS
*
* @dev A method with the ability to call your fulfillRandomness method directly
* @dev could spoof a VRF response with any random value, so it's critical that
* @dev it cannot be directly called by anything other than this base contract
* @dev (specifically, by the VRFConsumerBase.rawFulfillRandomness method).
*
* @dev For your users to trust that your contract's random behavior is free
* @dev from malicious interference, it's best if you can write it so that all
* @dev behaviors implied by a VRF response are executed *during* your
* @dev fulfillRandomness method. If your contract must store the response (or
* @dev anything derived from it) and use it later, you must ensure that any
* @dev user-significant behavior which depends on that stored value cannot be
* @dev manipulated by a subsequent VRF request.
*
* @dev Similarly, both miners and the VRF oracle itself have some influence
* @dev over the order in which VRF responses appear on the blockchain, so if
* @dev your contract could have multiple VRF requests in flight simultaneously,
* @dev you must ensure that the order in which the VRF responses arrive cannot
* @dev be used to manipulate your contract's user-significant behavior.
*
* @dev Since the block hash of the block which contains the requestRandomness
* @dev call is mixed into the input to the VRF *last*, a sufficiently powerful
* @dev miner could, in principle, fork the blockchain to evict the block
* @dev containing the request, forcing the request to be included in a
* @dev different block with a different hash, and therefore a different input
* @dev to the VRF. However, such an attack would incur a substantial economic
* @dev cost. This cost scales with the number of blocks the VRF oracle waits
* @dev until it calls responds to a request. It is for this reason that
* @dev that you can signal to an oracle you'd like them to wait longer before
* @dev responding to the request (however this is not enforced in the contract
* @dev and so remains effective only in the case of unmodified oracle software).
*/
abstract contract VRFConsumerBaseV2 {
error OnlyCoordinatorCanFulfill(address have, address want);
address private immutable vrfCoordinator;
/**
* @param _vrfCoordinator address of VRFCoordinator contract
*/
constructor(address _vrfCoordinator) {
vrfCoordinator = _vrfCoordinator;
}
/**
* @notice fulfillRandomness handles the VRF response. Your contract must
* @notice implement it. See "SECURITY CONSIDERATIONS" above for important
* @notice principles to keep in mind when implementing your fulfillRandomness
* @notice method.
*
* @dev VRFConsumerBaseV2 expects its subcontracts to have a method with this
* @dev signature, and will call it once it has verified the proof
* @dev associated with the randomness. (It is triggered via a call to
* @dev rawFulfillRandomness, below.)
*
* @param requestId The Id initially returned by requestRandomness
* @param randomWords the VRF output expanded to the requested number of words
*/
function fulfillRandomWords(uint256 requestId, uint256[] memory randomWords) internal virtual;
// rawFulfillRandomness is called by VRFCoordinator when it receives a valid VRF
// proof. rawFulfillRandomness then calls fulfillRandomness, after validating
// the origin of the call
function rawFulfillRandomWords(uint256 requestId, uint256[] memory randomWords) external {
if (msg.sender != vrfCoordinator) {
revert OnlyCoordinatorCanFulfill(msg.sender, vrfCoordinator);
}
fulfillRandomWords(requestId, randomWords);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)
pragma solidity ^0.8.0;
import "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (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 (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 (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": false,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract IERC721","name":"kaijus","type":"address"},{"internalType":"contract IERC721","name":"mutants","type":"address"},{"internalType":"contract IERC721","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":"GhostBoyAllowlistRaffle_MustBeAKing","type":"error"},{"inputs":[{"internalType":"address","name":"have","type":"address"},{"internalType":"address","name":"want","type":"address"}],"name":"OnlyCoordinatorCanFulfill","type":"error"},{"inputs":[],"name":"OpenAllowlistRaffleBase_AlreadyDrawn","type":"error"},{"inputs":[],"name":"OpenAllowlistRaffleBase_DrawScriptNotSet","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":"KAIJUS","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"KOK_MULTIPLIER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MUTANTS","outputs":[{"internalType":"contract IERC721","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 IERC721","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":"enterWithRWaste","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"enterWithScales","outputs":[],"stateMutability":"payable","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
6101806040523480156200001257600080fd5b5060405162002c4d38038062002c4d83398181016040528101906200003891906200043d565b8181806200005b6200004f620001fd60201b60201c565b6200020560201b60201c565b60008060146101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050508160a081815250508073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505050508673ffffffffffffffffffffffffffffffffffffffff1660e08173ffffffffffffffffffffffffffffffffffffffff16815250508573ffffffffffffffffffffffffffffffffffffffff166101008173ffffffffffffffffffffffffffffffffffffffff16815250508473ffffffffffffffffffffffffffffffffffffffff166101208173ffffffffffffffffffffffffffffffffffffffff16815250508373ffffffffffffffffffffffffffffffffffffffff166101408173ffffffffffffffffffffffffffffffffffffffff16815250508273ffffffffffffffffffffffffffffffffffffffff166101608173ffffffffffffffffffffffffffffffffffffffff168152505050505050505050620004f0565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002fb82620002ce565b9050919050565b60006200030f82620002ee565b9050919050565b620003218162000302565b81146200032d57600080fd5b50565b600081519050620003418162000316565b92915050565b60006200035482620002ee565b9050919050565b620003668162000347565b81146200037257600080fd5b50565b60008151905062000386816200035b565b92915050565b60006200039982620002ee565b9050919050565b620003ab816200038c565b8114620003b757600080fd5b50565b600081519050620003cb81620003a0565b92915050565b6000819050919050565b620003e681620003d1565b8114620003f257600080fd5b50565b6000815190506200040681620003db565b92915050565b6200041781620002ee565b81146200042357600080fd5b50565b60008151905062000437816200040c565b92915050565b600080600080600080600060e0888a0312156200045f576200045e620002c9565b5b60006200046f8a828b0162000330565b9750506020620004828a828b0162000330565b9650506040620004958a828b0162000330565b9550506060620004a88a828b0162000375565b9450506080620004bb8a828b01620003ba565b93505060a0620004ce8a828b01620003f5565b92505060c0620004e18a828b0162000426565b91505092959891949750929550565b60805160a05160c05160e051610100516101205161014051610160516126b16200059c6000396000818161106401526111de015260008181610b330152611135015260008181610a6001528181610f9101526111110152600081816109bb01528181610eec015261115901526000818161091701528181610ded01528181610e4801526116970152600061076a01526000610d4101526000818161085501526108a901526126b16000f3fe6080604052600436106101805760003560e01c80637fef036e116100d1578063adb7cbc21161008a578063c50197d011610064578063c50197d0146104dc578063c5a5949814610507578063f2fde38b14610530578063fd915ef21461055957610180565b8063adb7cbc214610458578063b72e9f3614610483578063bf1557e4146104b157610180565b80637fef036e146103655780638da5cb5b1461039057806393193623146103bb57806393b5d923146103d75780639af6bc9714610402578063a3a44c091461042d57610180565b8063410ba1c31161013e5780636926726e116101185780636926726e146102cd578063715018a6146102f85780637a2fa3381461030f5780637d94792a1461033a57610180565b8063410ba1c31461024c5780634281e60e146102775780635c975abb146102a257610180565b80627f3089146101855780630eecae21146101ae5780631fe543e3146101c557806325791ea5146101ee57806327f5c97d1461020a578063333171bb14610235575b600080fd5b34801561019157600080fd5b506101ac60048036038101906101a791906118a0565b610584565b005b3480156101ba57600080fd5b506101c361065d565b005b3480156101d157600080fd5b506101ec60048036038101906101e79190611a72565b610853565b005b61020860048036038101906102039190611ace565b610913565b005b34801561021657600080fd5b5061021f610bea565b60405161022c9190611b0a565b60405180910390f35b34801561024157600080fd5b5061024a610bf6565b005b34801561025857600080fd5b50610261610c96565b60405161026e9190611b0a565b60405180910390f35b34801561028357600080fd5b5061028c610c9b565b6040516102999190611ba4565b60405180910390f35b3480156102ae57600080fd5b506102b7610d29565b6040516102c49190611be1565b60405180910390f35b3480156102d957600080fd5b506102e2610d3f565b6040516102ef9190611b0a565b60405180910390f35b34801561030457600080fd5b5061030d610d63565b005b34801561031b57600080fd5b50610324610deb565b6040516103319190611c7b565b60405180910390f35b34801561034657600080fd5b5061034f610e0f565b60405161035c9190611b0a565b60405180910390f35b34801561037157600080fd5b5061037a610e15565b6040516103879190611b0a565b60405180910390f35b34801561039c57600080fd5b506103a5610e1b565b6040516103b29190611cb7565b60405180910390f35b6103d560048036038101906103d09190611ace565b610e44565b005b3480156103e357600080fd5b506103ec61110f565b6040516103f99190611c7b565b60405180910390f35b34801561040e57600080fd5b50610417611133565b6040516104249190611cf3565b60405180910390f35b34801561043957600080fd5b50610442611157565b60405161044f9190611c7b565b60405180910390f35b34801561046457600080fd5b5061046d61117b565b60405161047a9190611b0a565b60405180910390f35b34801561048f57600080fd5b50610498611180565b6040516104a89493929190611d86565b60405180910390f35b3480156104bd57600080fd5b506104c66111d0565b6040516104d39190611b0a565b60405180910390f35b3480156104e857600080fd5b506104f16111dc565b6040516104fe9190611dec565b60405180910390f35b34801561051357600080fd5b5061052e60048036038101906105299190611f34565b611200565b005b34801561053c57600080fd5b5061055760048036038101906105529190611f8d565b611308565b005b34801561056557600080fd5b5061056e6113ff565b60405161057b9190611be1565b60405180910390f35b61058c611412565b73ffffffffffffffffffffffffffffffffffffffff166105aa610e1b565b73ffffffffffffffffffffffffffffffffffffffff1614610600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105f790612006565b60405180910390fd5b600460009054906101000a900460ff1615610647576040517fbf44beb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818160039182610658929190612233565b505050565b610665611412565b73ffffffffffffffffffffffffffffffffffffffff16610683610e1b565b73ffffffffffffffffffffffffffffffffffffffff16146106d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d090612006565b60405180910390fd5b600460009054906101000a900460ff1615610720576040517fbf44beb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006003805461072f90612060565b905003610768576040517fe70a01ab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635d3b1d306001600001546001800160009054906101000a900467ffffffffffffffff1660018001600c9054906101000a900461ffff166001800160089054906101000a900463ffffffff1660016040518663ffffffff1660e01b815260040161080d95949392919061233e565b6020604051808303816000875af115801561082c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085091906123a6565b50565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461090557337f00000000000000000000000000000000000000000000000000000000000000006040517f1cf993f40000000000000000000000000000000000000000000000000000000081526004016108fc9291906123d3565b60405180910390fd5b61090f828261141a565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161096e9190611cb7565b602060405180830381865afa15801561098b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109af91906123a6565b148015610a55575060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610a129190611cb7565b602060405180830381865afa158015610a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5391906123a6565b145b8015610afa575060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610ab79190611cb7565b602060405180830381865afa158015610ad4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af891906123a6565b145b15610b31576040517f06e121bb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639dc29fac33670de0b6b3a764000084610b82919061242b565b6040518363ffffffff1660e01b8152600401610b9f929190612485565b600060405180830381600087803b158015610bb957600080fd5b505af1158015610bcd573d6000803e3d6000fd5b50505050610be733600283610be2919061242b565b61145b565b50565b670de0b6b3a764000081565b610bfe611412565b73ffffffffffffffffffffffffffffffffffffffff16610c1c610e1b565b73ffffffffffffffffffffffffffffffffffffffff1614610c72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6990612006565b60405180910390fd5b610c7a610d29565b610c8b57610c86611489565b610c94565b610c9361152c565b5b565b600281565b60038054610ca890612060565b80601f0160208091040260200160405190810160405280929190818152602001828054610cd490612060565b8015610d215780601f10610cf657610100808354040283529160200191610d21565b820191906000526020600020905b815481529060010190602001808311610d0457829003601f168201915b505050505081565b60008060149054906101000a900460ff16905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b610d6b611412565b73ffffffffffffffffffffffffffffffffffffffff16610d89610e1b565b73ffffffffffffffffffffffffffffffffffffffff1614610ddf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd690612006565b60405180910390fd5b610de960006115cd565b565b7f000000000000000000000000000000000000000000000000000000000000000081565b60055481565b60065481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610e9f9190611cb7565b602060405180830381865afa158015610ebc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee091906123a6565b148015610f86575060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610f439190611cb7565b602060405180830381865afa158015610f60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8491906123a6565b145b801561102b575060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610fe89190611cb7565b602060405180830381865afa158015611005573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061102991906123a6565b145b15611062576040517f06e121bb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663af7d6ca333674563918244f40000846110b3919061242b565b6040518363ffffffff1660e01b81526004016110d0929190612485565b600060405180830381600087803b1580156110ea57600080fd5b505af11580156110fe573d6000803e3d6000fd5b5050505061110c338261145b565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b600281565b60018060000154908060010160009054906101000a900467ffffffffffffffff16908060010160089054906101000a900463ffffffff169080600101600c9054906101000a900461ffff16905084565b674563918244f4000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b611208611412565b73ffffffffffffffffffffffffffffffffffffffff16611226610e1b565b73ffffffffffffffffffffffffffffffffffffffff161461127c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127390612006565b60405180910390fd5b8060016000820151816000015560208201518160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060408201518160010160086101000a81548163ffffffff021916908363ffffffff160217905550606082015181600101600c6101000a81548161ffff021916908361ffff16021790555090505050565b611310611412565b73ffffffffffffffffffffffffffffffffffffffff1661132e610e1b565b73ffffffffffffffffffffffffffffffffffffffff1614611384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137b90612006565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036113f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ea90612520565b60405180910390fd5b6113fc816115cd565b50565b600460009054906101000a900460ff1681565b600033905090565b8060008151811061142e5761142d612540565b5b60200260200101516005819055506001600460006101000a81548160ff0219169083151502179055505050565b6114858261146884611691565b6114725782611480565b60028361147f919061242b565b5b611737565b5050565b611491610d29565b156114d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c8906125bb565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611515611412565b6040516115229190611cb7565b60405180910390a1565b611534610d29565b611573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156a90612627565b60405180910390fd5b60008060146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6115b6611412565b6040516115c39190611cb7565b60405180910390a1565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600060097f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b81526004016116ee9190611cb7565b602060405180830381865afa15801561170b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172f91906123a6565b119050919050565b61173f610d29565b1561177f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611776906125bb565b60405180910390fd5b600460009054906101000a900460ff16156117c6576040517fbf44beb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600660008282546117d89190612647565b92505081905550808273ffffffffffffffffffffffffffffffffffffffff167f9a81ce3a679d7c14ca6cb068b89fe35b2f18101c15a5562856dcd93d488bce6960405160405180910390a35050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126118605761185f61183b565b5b8235905067ffffffffffffffff81111561187d5761187c611840565b5b60208301915083600182028301111561189957611898611845565b5b9250929050565b600080602083850312156118b7576118b6611831565b5b600083013567ffffffffffffffff8111156118d5576118d4611836565b5b6118e18582860161184a565b92509250509250929050565b6000819050919050565b611900816118ed565b811461190b57600080fd5b50565b60008135905061191d816118f7565b92915050565b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61196c82611923565b810181811067ffffffffffffffff8211171561198b5761198a611934565b5b80604052505050565b600061199e611827565b90506119aa8282611963565b919050565b600067ffffffffffffffff8211156119ca576119c9611934565b5b602082029050602081019050919050565b60006119ee6119e9846119af565b611994565b90508083825260208201905060208402830185811115611a1157611a10611845565b5b835b81811015611a3a5780611a26888261190e565b845260208401935050602081019050611a13565b5050509392505050565b600082601f830112611a5957611a5861183b565b5b8135611a698482602086016119db565b91505092915050565b60008060408385031215611a8957611a88611831565b5b6000611a978582860161190e565b925050602083013567ffffffffffffffff811115611ab857611ab7611836565b5b611ac485828601611a44565b9150509250929050565b600060208284031215611ae457611ae3611831565b5b6000611af28482850161190e565b91505092915050565b611b04816118ed565b82525050565b6000602082019050611b1f6000830184611afb565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611b5f578082015181840152602081019050611b44565b60008484015250505050565b6000611b7682611b25565b611b808185611b30565b9350611b90818560208601611b41565b611b9981611923565b840191505092915050565b60006020820190508181036000830152611bbe8184611b6b565b905092915050565b60008115159050919050565b611bdb81611bc6565b82525050565b6000602082019050611bf66000830184611bd2565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000611c41611c3c611c3784611bfc565b611c1c565b611bfc565b9050919050565b6000611c5382611c26565b9050919050565b6000611c6582611c48565b9050919050565b611c7581611c5a565b82525050565b6000602082019050611c906000830184611c6c565b92915050565b6000611ca182611bfc565b9050919050565b611cb181611c96565b82525050565b6000602082019050611ccc6000830184611ca8565b92915050565b6000611cdd82611c48565b9050919050565b611ced81611cd2565b82525050565b6000602082019050611d086000830184611ce4565b92915050565b6000819050919050565b611d2181611d0e565b82525050565b600067ffffffffffffffff82169050919050565b611d4481611d27565b82525050565b600063ffffffff82169050919050565b611d6381611d4a565b82525050565b600061ffff82169050919050565b611d8081611d69565b82525050565b6000608082019050611d9b6000830187611d18565b611da86020830186611d3b565b611db56040830185611d5a565b611dc26060830184611d77565b95945050505050565b6000611dd682611c48565b9050919050565b611de681611dcb565b82525050565b6000602082019050611e016000830184611ddd565b92915050565b600080fd5b611e1581611d0e565b8114611e2057600080fd5b50565b600081359050611e3281611e0c565b92915050565b611e4181611d27565b8114611e4c57600080fd5b50565b600081359050611e5e81611e38565b92915050565b611e6d81611d4a565b8114611e7857600080fd5b50565b600081359050611e8a81611e64565b92915050565b611e9981611d69565b8114611ea457600080fd5b50565b600081359050611eb681611e90565b92915050565b600060808284031215611ed257611ed1611e07565b5b611edc6080611994565b90506000611eec84828501611e23565b6000830152506020611f0084828501611e4f565b6020830152506040611f1484828501611e7b565b6040830152506060611f2884828501611ea7565b60608301525092915050565b600060808284031215611f4a57611f49611831565b5b6000611f5884828501611ebc565b91505092915050565b611f6a81611c96565b8114611f7557600080fd5b50565b600081359050611f8781611f61565b92915050565b600060208284031215611fa357611fa2611831565b5b6000611fb184828501611f78565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611ff0602083611b30565b9150611ffb82611fba565b602082019050919050565b6000602082019050818103600083015261201f81611fe3565b9050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061207857607f821691505b60208210810361208b5761208a612031565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026120f37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826120b6565b6120fd86836120b6565b95508019841693508086168417925050509392505050565b600061213061212b612126846118ed565b611c1c565b6118ed565b9050919050565b6000819050919050565b61214a83612115565b61215e61215682612137565b8484546120c3565b825550505050565b600090565b612173612166565b61217e818484612141565b505050565b5b818110156121a25761219760008261216b565b600181019050612184565b5050565b601f8211156121e7576121b881612091565b6121c1846120a6565b810160208510156121d0578190505b6121e46121dc856120a6565b830182612183565b50505b505050565b600082821c905092915050565b600061220a600019846008026121ec565b1980831691505092915050565b600061222383836121f9565b9150826002028217905092915050565b61223d8383612026565b67ffffffffffffffff81111561225657612255611934565b5b6122608254612060565b61226b8282856121a6565b6000601f83116001811461229a5760008415612288578287013590505b6122928582612217565b8655506122fa565b601f1984166122a886612091565b60005b828110156122d0578489013582556001820191506020850194506020810190506122ab565b868310156122ed57848901356122e9601f8916826121f9565b8355505b6001600288020188555050505b50505050505050565b6000819050919050565b600061232861232361231e84612303565b611c1c565b611d4a565b9050919050565b6123388161230d565b82525050565b600060a0820190506123536000830188611d18565b6123606020830187611d3b565b61236d6040830186611d77565b61237a6060830185611d5a565b612387608083018461232f565b9695505050505050565b6000815190506123a0816118f7565b92915050565b6000602082840312156123bc576123bb611831565b5b60006123ca84828501612391565b91505092915050565b60006040820190506123e86000830185611ca8565b6123f56020830184611ca8565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612436826118ed565b9150612441836118ed565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561247a576124796123fc565b5b828202905092915050565b600060408201905061249a6000830185611ca8565b6124a76020830184611afb565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061250a602683611b30565b9150612515826124ae565b604082019050919050565b60006020820190508181036000830152612539816124fd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006125a5601083611b30565b91506125b08261256f565b602082019050919050565b600060208201905081810360008301526125d481612598565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000612611601483611b30565b915061261c826125db565b602082019050919050565b6000602082019050818103600083015261264081612604565b9050919050565b6000612652826118ed565b915061265d836118ed565b9250828201905080821115612675576126746123fc565b5b9291505056fea26469706673582212208a4ffe0e1722a7d3c88e50d4592f050689e8fff4c4c3d3bdeebf97c45b687a5f64736f6c63430008100033000000000000000000000000bb3c3a545586ae412a91d24918b75bc5318e741100000000000000000000000083f82414b5065bb9a85e330c67b4a10f798f4ed2000000000000000000000000a310425046661c523d98344f7e9d66b32195365d0000000000000000000000005cd2fac9702d68dde5a94b1af95962bcfb80fc7d00000000000000000000000027192b750ff796514f039512aaf5a3655a095ea00000000000000000000000000000000000000000000000000000000000000096000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e69909
Deployed Bytecode
0x6080604052600436106101805760003560e01c80637fef036e116100d1578063adb7cbc21161008a578063c50197d011610064578063c50197d0146104dc578063c5a5949814610507578063f2fde38b14610530578063fd915ef21461055957610180565b8063adb7cbc214610458578063b72e9f3614610483578063bf1557e4146104b157610180565b80637fef036e146103655780638da5cb5b1461039057806393193623146103bb57806393b5d923146103d75780639af6bc9714610402578063a3a44c091461042d57610180565b8063410ba1c31161013e5780636926726e116101185780636926726e146102cd578063715018a6146102f85780637a2fa3381461030f5780637d94792a1461033a57610180565b8063410ba1c31461024c5780634281e60e146102775780635c975abb146102a257610180565b80627f3089146101855780630eecae21146101ae5780631fe543e3146101c557806325791ea5146101ee57806327f5c97d1461020a578063333171bb14610235575b600080fd5b34801561019157600080fd5b506101ac60048036038101906101a791906118a0565b610584565b005b3480156101ba57600080fd5b506101c361065d565b005b3480156101d157600080fd5b506101ec60048036038101906101e79190611a72565b610853565b005b61020860048036038101906102039190611ace565b610913565b005b34801561021657600080fd5b5061021f610bea565b60405161022c9190611b0a565b60405180910390f35b34801561024157600080fd5b5061024a610bf6565b005b34801561025857600080fd5b50610261610c96565b60405161026e9190611b0a565b60405180910390f35b34801561028357600080fd5b5061028c610c9b565b6040516102999190611ba4565b60405180910390f35b3480156102ae57600080fd5b506102b7610d29565b6040516102c49190611be1565b60405180910390f35b3480156102d957600080fd5b506102e2610d3f565b6040516102ef9190611b0a565b60405180910390f35b34801561030457600080fd5b5061030d610d63565b005b34801561031b57600080fd5b50610324610deb565b6040516103319190611c7b565b60405180910390f35b34801561034657600080fd5b5061034f610e0f565b60405161035c9190611b0a565b60405180910390f35b34801561037157600080fd5b5061037a610e15565b6040516103879190611b0a565b60405180910390f35b34801561039c57600080fd5b506103a5610e1b565b6040516103b29190611cb7565b60405180910390f35b6103d560048036038101906103d09190611ace565b610e44565b005b3480156103e357600080fd5b506103ec61110f565b6040516103f99190611c7b565b60405180910390f35b34801561040e57600080fd5b50610417611133565b6040516104249190611cf3565b60405180910390f35b34801561043957600080fd5b50610442611157565b60405161044f9190611c7b565b60405180910390f35b34801561046457600080fd5b5061046d61117b565b60405161047a9190611b0a565b60405180910390f35b34801561048f57600080fd5b50610498611180565b6040516104a89493929190611d86565b60405180910390f35b3480156104bd57600080fd5b506104c66111d0565b6040516104d39190611b0a565b60405180910390f35b3480156104e857600080fd5b506104f16111dc565b6040516104fe9190611dec565b60405180910390f35b34801561051357600080fd5b5061052e60048036038101906105299190611f34565b611200565b005b34801561053c57600080fd5b5061055760048036038101906105529190611f8d565b611308565b005b34801561056557600080fd5b5061056e6113ff565b60405161057b9190611be1565b60405180910390f35b61058c611412565b73ffffffffffffffffffffffffffffffffffffffff166105aa610e1b565b73ffffffffffffffffffffffffffffffffffffffff1614610600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105f790612006565b60405180910390fd5b600460009054906101000a900460ff1615610647576040517fbf44beb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818160039182610658929190612233565b505050565b610665611412565b73ffffffffffffffffffffffffffffffffffffffff16610683610e1b565b73ffffffffffffffffffffffffffffffffffffffff16146106d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d090612006565b60405180910390fd5b600460009054906101000a900460ff1615610720576040517fbf44beb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006003805461072f90612060565b905003610768576040517fe70a01ab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e6990973ffffffffffffffffffffffffffffffffffffffff16635d3b1d306001600001546001800160009054906101000a900467ffffffffffffffff1660018001600c9054906101000a900461ffff166001800160089054906101000a900463ffffffff1660016040518663ffffffff1660e01b815260040161080d95949392919061233e565b6020604051808303816000875af115801561082c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085091906123a6565b50565b7f000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e6990973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461090557337f000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e699096040517f1cf993f40000000000000000000000000000000000000000000000000000000081526004016108fc9291906123d3565b60405180910390fd5b61090f828261141a565b5050565b60007f000000000000000000000000bb3c3a545586ae412a91d24918b75bc5318e741173ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161096e9190611cb7565b602060405180830381865afa15801561098b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109af91906123a6565b148015610a55575060007f00000000000000000000000083f82414b5065bb9a85e330c67b4a10f798f4ed273ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610a129190611cb7565b602060405180830381865afa158015610a2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5391906123a6565b145b8015610afa575060007f000000000000000000000000a310425046661c523d98344f7e9d66b32195365d73ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610ab79190611cb7565b602060405180830381865afa158015610ad4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af891906123a6565b145b15610b31576040517f06e121bb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000005cd2fac9702d68dde5a94b1af95962bcfb80fc7d73ffffffffffffffffffffffffffffffffffffffff16639dc29fac33670de0b6b3a764000084610b82919061242b565b6040518363ffffffff1660e01b8152600401610b9f929190612485565b600060405180830381600087803b158015610bb957600080fd5b505af1158015610bcd573d6000803e3d6000fd5b50505050610be733600283610be2919061242b565b61145b565b50565b670de0b6b3a764000081565b610bfe611412565b73ffffffffffffffffffffffffffffffffffffffff16610c1c610e1b565b73ffffffffffffffffffffffffffffffffffffffff1614610c72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6990612006565b60405180910390fd5b610c7a610d29565b610c8b57610c86611489565b610c94565b610c9361152c565b5b565b600281565b60038054610ca890612060565b80601f0160208091040260200160405190810160405280929190818152602001828054610cd490612060565b8015610d215780601f10610cf657610100808354040283529160200191610d21565b820191906000526020600020905b815481529060010190602001808311610d0457829003601f168201915b505050505081565b60008060149054906101000a900460ff16905090565b7f000000000000000000000000000000000000000000000000000000000000009681565b610d6b611412565b73ffffffffffffffffffffffffffffffffffffffff16610d89610e1b565b73ffffffffffffffffffffffffffffffffffffffff1614610ddf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd690612006565b60405180910390fd5b610de960006115cd565b565b7f000000000000000000000000bb3c3a545586ae412a91d24918b75bc5318e741181565b60055481565b60065481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60007f000000000000000000000000bb3c3a545586ae412a91d24918b75bc5318e741173ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610e9f9190611cb7565b602060405180830381865afa158015610ebc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee091906123a6565b148015610f86575060007f00000000000000000000000083f82414b5065bb9a85e330c67b4a10f798f4ed273ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610f439190611cb7565b602060405180830381865afa158015610f60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8491906123a6565b145b801561102b575060007f000000000000000000000000a310425046661c523d98344f7e9d66b32195365d73ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610fe89190611cb7565b602060405180830381865afa158015611005573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061102991906123a6565b145b15611062576040517f06e121bb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000027192b750ff796514f039512aaf5a3655a095ea073ffffffffffffffffffffffffffffffffffffffff1663af7d6ca333674563918244f40000846110b3919061242b565b6040518363ffffffff1660e01b81526004016110d0929190612485565b600060405180830381600087803b1580156110ea57600080fd5b505af11580156110fe573d6000803e3d6000fd5b5050505061110c338261145b565b50565b7f000000000000000000000000a310425046661c523d98344f7e9d66b32195365d81565b7f0000000000000000000000005cd2fac9702d68dde5a94b1af95962bcfb80fc7d81565b7f00000000000000000000000083f82414b5065bb9a85e330c67b4a10f798f4ed281565b600281565b60018060000154908060010160009054906101000a900467ffffffffffffffff16908060010160089054906101000a900463ffffffff169080600101600c9054906101000a900461ffff16905084565b674563918244f4000081565b7f00000000000000000000000027192b750ff796514f039512aaf5a3655a095ea081565b611208611412565b73ffffffffffffffffffffffffffffffffffffffff16611226610e1b565b73ffffffffffffffffffffffffffffffffffffffff161461127c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127390612006565b60405180910390fd5b8060016000820151816000015560208201518160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060408201518160010160086101000a81548163ffffffff021916908363ffffffff160217905550606082015181600101600c6101000a81548161ffff021916908361ffff16021790555090505050565b611310611412565b73ffffffffffffffffffffffffffffffffffffffff1661132e610e1b565b73ffffffffffffffffffffffffffffffffffffffff1614611384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137b90612006565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036113f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ea90612520565b60405180910390fd5b6113fc816115cd565b50565b600460009054906101000a900460ff1681565b600033905090565b8060008151811061142e5761142d612540565b5b60200260200101516005819055506001600460006101000a81548160ff0219169083151502179055505050565b6114858261146884611691565b6114725782611480565b60028361147f919061242b565b5b611737565b5050565b611491610d29565b156114d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c8906125bb565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611515611412565b6040516115229190611cb7565b60405180910390a1565b611534610d29565b611573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156a90612627565b60405180910390fd5b60008060146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6115b6611412565b6040516115c39190611cb7565b60405180910390a1565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600060097f000000000000000000000000bb3c3a545586ae412a91d24918b75bc5318e741173ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b81526004016116ee9190611cb7565b602060405180830381865afa15801561170b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172f91906123a6565b119050919050565b61173f610d29565b1561177f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611776906125bb565b60405180910390fd5b600460009054906101000a900460ff16156117c6576040517fbf44beb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600660008282546117d89190612647565b92505081905550808273ffffffffffffffffffffffffffffffffffffffff167f9a81ce3a679d7c14ca6cb068b89fe35b2f18101c15a5562856dcd93d488bce6960405160405180910390a35050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126118605761185f61183b565b5b8235905067ffffffffffffffff81111561187d5761187c611840565b5b60208301915083600182028301111561189957611898611845565b5b9250929050565b600080602083850312156118b7576118b6611831565b5b600083013567ffffffffffffffff8111156118d5576118d4611836565b5b6118e18582860161184a565b92509250509250929050565b6000819050919050565b611900816118ed565b811461190b57600080fd5b50565b60008135905061191d816118f7565b92915050565b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61196c82611923565b810181811067ffffffffffffffff8211171561198b5761198a611934565b5b80604052505050565b600061199e611827565b90506119aa8282611963565b919050565b600067ffffffffffffffff8211156119ca576119c9611934565b5b602082029050602081019050919050565b60006119ee6119e9846119af565b611994565b90508083825260208201905060208402830185811115611a1157611a10611845565b5b835b81811015611a3a5780611a26888261190e565b845260208401935050602081019050611a13565b5050509392505050565b600082601f830112611a5957611a5861183b565b5b8135611a698482602086016119db565b91505092915050565b60008060408385031215611a8957611a88611831565b5b6000611a978582860161190e565b925050602083013567ffffffffffffffff811115611ab857611ab7611836565b5b611ac485828601611a44565b9150509250929050565b600060208284031215611ae457611ae3611831565b5b6000611af28482850161190e565b91505092915050565b611b04816118ed565b82525050565b6000602082019050611b1f6000830184611afb565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611b5f578082015181840152602081019050611b44565b60008484015250505050565b6000611b7682611b25565b611b808185611b30565b9350611b90818560208601611b41565b611b9981611923565b840191505092915050565b60006020820190508181036000830152611bbe8184611b6b565b905092915050565b60008115159050919050565b611bdb81611bc6565b82525050565b6000602082019050611bf66000830184611bd2565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000611c41611c3c611c3784611bfc565b611c1c565b611bfc565b9050919050565b6000611c5382611c26565b9050919050565b6000611c6582611c48565b9050919050565b611c7581611c5a565b82525050565b6000602082019050611c906000830184611c6c565b92915050565b6000611ca182611bfc565b9050919050565b611cb181611c96565b82525050565b6000602082019050611ccc6000830184611ca8565b92915050565b6000611cdd82611c48565b9050919050565b611ced81611cd2565b82525050565b6000602082019050611d086000830184611ce4565b92915050565b6000819050919050565b611d2181611d0e565b82525050565b600067ffffffffffffffff82169050919050565b611d4481611d27565b82525050565b600063ffffffff82169050919050565b611d6381611d4a565b82525050565b600061ffff82169050919050565b611d8081611d69565b82525050565b6000608082019050611d9b6000830187611d18565b611da86020830186611d3b565b611db56040830185611d5a565b611dc26060830184611d77565b95945050505050565b6000611dd682611c48565b9050919050565b611de681611dcb565b82525050565b6000602082019050611e016000830184611ddd565b92915050565b600080fd5b611e1581611d0e565b8114611e2057600080fd5b50565b600081359050611e3281611e0c565b92915050565b611e4181611d27565b8114611e4c57600080fd5b50565b600081359050611e5e81611e38565b92915050565b611e6d81611d4a565b8114611e7857600080fd5b50565b600081359050611e8a81611e64565b92915050565b611e9981611d69565b8114611ea457600080fd5b50565b600081359050611eb681611e90565b92915050565b600060808284031215611ed257611ed1611e07565b5b611edc6080611994565b90506000611eec84828501611e23565b6000830152506020611f0084828501611e4f565b6020830152506040611f1484828501611e7b565b6040830152506060611f2884828501611ea7565b60608301525092915050565b600060808284031215611f4a57611f49611831565b5b6000611f5884828501611ebc565b91505092915050565b611f6a81611c96565b8114611f7557600080fd5b50565b600081359050611f8781611f61565b92915050565b600060208284031215611fa357611fa2611831565b5b6000611fb184828501611f78565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611ff0602083611b30565b9150611ffb82611fba565b602082019050919050565b6000602082019050818103600083015261201f81611fe3565b9050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061207857607f821691505b60208210810361208b5761208a612031565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026120f37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826120b6565b6120fd86836120b6565b95508019841693508086168417925050509392505050565b600061213061212b612126846118ed565b611c1c565b6118ed565b9050919050565b6000819050919050565b61214a83612115565b61215e61215682612137565b8484546120c3565b825550505050565b600090565b612173612166565b61217e818484612141565b505050565b5b818110156121a25761219760008261216b565b600181019050612184565b5050565b601f8211156121e7576121b881612091565b6121c1846120a6565b810160208510156121d0578190505b6121e46121dc856120a6565b830182612183565b50505b505050565b600082821c905092915050565b600061220a600019846008026121ec565b1980831691505092915050565b600061222383836121f9565b9150826002028217905092915050565b61223d8383612026565b67ffffffffffffffff81111561225657612255611934565b5b6122608254612060565b61226b8282856121a6565b6000601f83116001811461229a5760008415612288578287013590505b6122928582612217565b8655506122fa565b601f1984166122a886612091565b60005b828110156122d0578489013582556001820191506020850194506020810190506122ab565b868310156122ed57848901356122e9601f8916826121f9565b8355505b6001600288020188555050505b50505050505050565b6000819050919050565b600061232861232361231e84612303565b611c1c565b611d4a565b9050919050565b6123388161230d565b82525050565b600060a0820190506123536000830188611d18565b6123606020830187611d3b565b61236d6040830186611d77565b61237a6060830185611d5a565b612387608083018461232f565b9695505050505050565b6000815190506123a0816118f7565b92915050565b6000602082840312156123bc576123bb611831565b5b60006123ca84828501612391565b91505092915050565b60006040820190506123e86000830185611ca8565b6123f56020830184611ca8565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612436826118ed565b9150612441836118ed565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561247a576124796123fc565b5b828202905092915050565b600060408201905061249a6000830185611ca8565b6124a76020830184611afb565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061250a602683611b30565b9150612515826124ae565b604082019050919050565b60006020820190508181036000830152612539816124fd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006125a5601083611b30565b91506125b08261256f565b602082019050919050565b600060208201905081810360008301526125d481612598565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000612611601483611b30565b915061261c826125db565b602082019050919050565b6000602082019050818103600083015261264081612604565b9050919050565b6000612652826118ed565b915061265d836118ed565b9250828201905080821115612675576126746123fc565b5b9291505056fea26469706673582212208a4ffe0e1722a7d3c88e50d4592f050689e8fff4c4c3d3bdeebf97c45b687a5f64736f6c63430008100033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000bb3c3a545586ae412a91d24918b75bc5318e741100000000000000000000000083f82414b5065bb9a85e330c67b4a10f798f4ed2000000000000000000000000a310425046661c523d98344f7e9d66b32195365d0000000000000000000000005cd2fac9702d68dde5a94b1af95962bcfb80fc7d00000000000000000000000027192b750ff796514f039512aaf5a3655a095ea00000000000000000000000000000000000000000000000000000000000000096000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e69909
-----Decoded View---------------
Arg [0] : kaijus (address): 0xBb3c3A545586aE412a91d24918b75bC5318E7411
Arg [1] : mutants (address): 0x83f82414b5065bB9A85E330C67B4A10f798F4eD2
Arg [2] : scientists (address): 0xA310425046661c523d98344F7E9D66B32195365d
Arg [3] : rwaste (address): 0x5cd2FAc9702D68dde5a94B1af95962bCFb80fC7d
Arg [4] : scales (address): 0x27192b750fF796514f039512aaf5A3655a095ea0
Arg [5] : numberOfWinners (uint256): 150
Arg [6] : vrfCoordinator (address): 0x271682DEB8C4E0901D1a1550aD2e64D568E69909
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 000000000000000000000000bb3c3a545586ae412a91d24918b75bc5318e7411
Arg [1] : 00000000000000000000000083f82414b5065bb9a85e330c67b4a10f798f4ed2
Arg [2] : 000000000000000000000000a310425046661c523d98344f7e9d66b32195365d
Arg [3] : 0000000000000000000000005cd2fac9702d68dde5a94b1af95962bcfb80fc7d
Arg [4] : 00000000000000000000000027192b750ff796514f039512aaf5a3655a095ea0
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000096
Arg [6] : 000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e69909
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.20
Net Worth in ETH
0.000065
Token Allocations
EGGT
100.00%
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $0.403422 | 0.5 | $0.2017 |
Loading...
Loading
Loading...
Loading
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.