More Info
Private Name Tags
Latest 25 from a total of 1,112 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 16770951 | 713 days ago | IN | 0 ETH | 0.00249677 | ||||
Set Paused | 16728314 | 719 days ago | IN | 0 ETH | 0.00107007 | ||||
Admin Mint | 16728303 | 719 days ago | IN | 0 ETH | 0.00317464 | ||||
Set Paused | 16728298 | 719 days ago | IN | 0 ETH | 0.00088827 | ||||
Set Paused | 16728295 | 719 days ago | IN | 0 ETH | 0.0011328 | ||||
Set Paused | 16685932 | 725 days ago | IN | 0 ETH | 0.00140545 | ||||
Mint | 16685911 | 725 days ago | IN | 0 ETH | 0.00466 | ||||
Admin Mint | 16685771 | 725 days ago | IN | 0 ETH | 0.00256037 | ||||
Mint | 16685764 | 725 days ago | IN | 0 ETH | 0.00625489 | ||||
Set Paused | 16685708 | 725 days ago | IN | 0 ETH | 0.00130973 | ||||
Set Paused | 16678400 | 726 days ago | IN | 0 ETH | 0.00126307 | ||||
Admin Mint | 16678392 | 726 days ago | IN | 0 ETH | 0.00467524 | ||||
Admin Mint | 16678390 | 726 days ago | IN | 0 ETH | 0.00593885 | ||||
Set Paused | 16678387 | 726 days ago | IN | 0 ETH | 0.00136901 | ||||
Set Paused | 16673290 | 727 days ago | IN | 0 ETH | 0.00064972 | ||||
Mint | 16673276 | 727 days ago | IN | 0 ETH | 0.00353683 | ||||
Mint | 16673255 | 727 days ago | IN | 0 ETH | 0.00337536 | ||||
Mint | 16673233 | 727 days ago | IN | 0 ETH | 0.00335897 | ||||
Mint | 16673176 | 727 days ago | IN | 0 ETH | 0.00346234 | ||||
Admin Mint | 16673170 | 727 days ago | IN | 0 ETH | 0.00188537 | ||||
Mint | 16673170 | 727 days ago | IN | 0 ETH | 0.00362116 | ||||
Admin Mint | 16673165 | 727 days ago | IN | 0 ETH | 0.00144569 | ||||
Mint | 16673162 | 727 days ago | IN | 0 ETH | 0.0036421 | ||||
Admin Mint | 16673158 | 727 days ago | IN | 0 ETH | 0.0019294 | ||||
Mint | 16673120 | 727 days ago | IN | 0 ETH | 0.0048641 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
16670547 | 728 days ago | 0.01090794 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
PassMinter
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 5000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
//SPDX-License-Identifier: MIT pragma solidity ^0.8.13; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/security/Pausable.sol"; /** * >>> Join the Resistance <<< * >>> https://nfa.gg/ <<< * @title NonFungibleArcade Arcade Pass Minter * @author BowTiedPickle */ contract PassMinter is Ownable, Pausable { using SafeERC20 for IERC20; /// @notice Next token ID to be sold uint256 public nextId; /// @notice Amount minted per address per phase mapping(address => mapping(uint256 => uint256)) public claimed; uint256 public mintPrice = 250e6; uint256 public maxSupply; uint128 public startTime_heroes; uint128 public startTime_arcade; uint128 public startTime_partners; uint128 public startTime_rebels; bytes32 public merkleRoot_heroes; bytes32 public merkleRoot_arcade; bytes32 public merkleRoot_partners; bytes32 public merkleRoot_rebels; IERC20 public immutable USDC; IERC721 public immutable pass; /// @notice Total number of tokens sold uint256 public totalSold; /** * @param _pass Arcade Pass contract address * @param _owner Owner address * @param _merkleRoot_heroes Merkle root for Heroes phase * @param _merkleRoot_arcade Merkle root for Arcade phase * @param _merkleRoot_partners Merkle root for Partners phase * @param _merkleRoot_rebels Merkle root for Rebels phase * @param _USDC Address of the USDC token proxy * @param _startTime_heroes Start time for Heroes phase * @param _startTime_arcade Start time for Arcade phase * @param _startTime_partners Start time for Partners phase * @param _startTime_rebels Start time for Rebels phase */ constructor( IERC721 _pass, address _owner, bytes32 _merkleRoot_heroes, bytes32 _merkleRoot_arcade, bytes32 _merkleRoot_partners, bytes32 _merkleRoot_rebels, address _USDC, uint128 _startTime_heroes, uint128 _startTime_arcade, uint128 _startTime_partners, uint128 _startTime_rebels ) { require(_owner != address(0), "!addr"); _transferOwnership(_owner); // Set the merkle roots merkleRoot_heroes = _merkleRoot_heroes; merkleRoot_arcade = _merkleRoot_arcade; merkleRoot_partners = _merkleRoot_partners; merkleRoot_rebels = _merkleRoot_rebels; // Set timestamps startTime_heroes = _startTime_heroes; startTime_arcade = _startTime_arcade; startTime_partners = _startTime_partners; startTime_rebels = _startTime_rebels; // Set the contract deployments USDC = IERC20(_USDC); pass = _pass; // Deploy in paused state _pause(); } /** * @notice Mint arcade passes * @dev User must have approved this contract for the required value of USDC already * @param _qty Quantity to mint * @param _whitelistQty Quantity user is whitelisted for * @param _proof Merkle whitelist proof */ function mint( uint256 _qty, uint256 _whitelistQty, bytes32[] calldata _proof ) external whenNotPaused { require(_qty > 0, "!zero"); uint256 phase = getActivePhase(); require(claimed[msg.sender][phase] + _qty <= _whitelistQty, "User max"); require(totalSold + _qty <= maxSupply, "Max supply"); bytes32 leaf = keccak256(abi.encodePacked(msg.sender, _whitelistQty)); bytes32 root = getActiveRoot(); require(root != 0, "!phase"); require(MerkleProof.verify(_proof, root, leaf), "!proof"); claimed[msg.sender][phase] += _qty; totalSold += _qty; USDC.safeTransferFrom(msg.sender, address(this), mintPrice * _qty); // Transfer out uint256 tokenId; for (uint256 i; i < _qty; ) { tokenId = nextId; unchecked { ++i; ++nextId; } pass.transferFrom(address(this), msg.sender, tokenId); } emit Mint(msg.sender, _qty); } // ----- Admin Functions ----- /** * @notice Set critical sale parameters * @dev This is permissive to be flexible, use caution * @param _startingTokenId Token ID to start from * @param _maxSupply Total maximum supply */ function notify(uint256 _startingTokenId, uint256 _maxSupply) external onlyOwner { require(_maxSupply > totalSold, "!param"); emit NewMaxSupply(maxSupply, _maxSupply); nextId = _startingTokenId; maxSupply = _maxSupply; } /** * @notice Permissioned mint function * @dev Respects max supply * @param _to Recipient address * @param _qty Quantity to mint */ function adminMint(address _to, uint256 _qty) external onlyOwner { require(_qty > 0, "!zero"); require(totalSold + _qty <= maxSupply, "Max supply"); totalSold += _qty; uint256 tokenId; for (uint256 i; i < _qty; ) { tokenId = nextId; unchecked { ++i; ++nextId; } pass.transferFrom(address(this), _to, tokenId); } emit Mint(_to, _qty); } /** * @notice Withdraw profits from the contract */ function withdraw() external onlyOwner { uint256 balance = USDC.balanceOf(address(this)); USDC.safeTransfer(msg.sender, balance); emit Withdrawal(balance); } /** * @notice Set a new merkle root * @param _newRoot New whitelist merkle root */ function setMerkleRoot(bytes32 _newRoot, uint256 _phase) external onlyOwner { require(_phase > 0 && _phase <= 4, "!param"); if (_phase == 1) { emit NewRoot(1, merkleRoot_heroes, _newRoot); merkleRoot_heroes = _newRoot; } else if (_phase == 2) { emit NewRoot(2, merkleRoot_arcade, _newRoot); merkleRoot_arcade = _newRoot; } else if (_phase == 3) { emit NewRoot(3, merkleRoot_partners, _newRoot); merkleRoot_partners = _newRoot; } else if (_phase == 4) { emit NewRoot(4, merkleRoot_rebels, _newRoot); merkleRoot_rebels = _newRoot; } } /** * @notice Set a new mint price * @param _newPrice New mint price in units of USDC */ function setMintPrice(uint256 _newPrice) external onlyOwner { emit NewMintPrice(mintPrice, _newPrice); mintPrice = _newPrice; } /** * @notice Set the minting pause status * @param _status True to pause, false to unpause */ function setPaused(bool _status) external onlyOwner { if (_status) { _pause(); } else { _unpause(); } } /** * @notice Set start time of each phase * @dev Each phase start must be >= previous phase, all must be >= block.timestamp * @param _startTime_heroes Start time of Heroes phase in Unix epoch seconds * @param _startTime_arcade Start time of Arcadelist phase in Unix epoch seconds * @param _startTime_rebels Start time of Rebels phase in Unix epoch seconds */ function setStartTimes( uint128 _startTime_heroes, uint128 _startTime_arcade, uint128 _startTime_partners, uint128 _startTime_rebels ) external onlyOwner { require( _startTime_rebels >= _startTime_partners && _startTime_partners >= _startTime_arcade && _startTime_arcade >= _startTime_heroes && _startTime_heroes >= block.timestamp, "!timing" ); // Set timestamps startTime_heroes = _startTime_heroes; startTime_arcade = _startTime_arcade; startTime_partners = _startTime_partners; startTime_rebels = _startTime_rebels; emit NewStartTimes(_startTime_heroes, _startTime_arcade, _startTime_partners, _startTime_rebels); } // ----- View Functions ----- /** * @notice Get the Merkle root of the active phase * @return Merkle root of the active phase, 0 if none active */ function getActiveRoot() public view returns (bytes32) { uint256 phase = getActivePhase(); if (phase == 1) { return merkleRoot_heroes; } else if (phase == 2) { return merkleRoot_arcade; } else if (phase == 3) { return merkleRoot_partners; } else if (phase == 4) { return merkleRoot_rebels; } else { return 0; } } /** * @notice Get the ID of the active phase * @return 1 for Heroes, 2 for Arcade, 3 for Partner, 4 for Rebels, 0 for no active phase */ function getActivePhase() public view returns (uint256) { if (block.timestamp >= startTime_heroes && block.timestamp < startTime_arcade) { return 1; } else if (block.timestamp >= startTime_arcade && block.timestamp < startTime_partners) { return 2; } else if (block.timestamp >= startTime_partners && block.timestamp < startTime_rebels) { return 3; } else if (block.timestamp >= startTime_rebels) { return 4; } else { return 0; } } // ----- Events ----- event Mint(address indexed user, uint256 quantity); event Withdrawal(uint256 balance); event NewRoot(uint256 indexed phase, bytes32 oldRoot, bytes32 newRoot); event NewMaxSupply(uint256 oldMax, uint256 newMax); event NewMintPrice(uint256 oldPrice, uint256 newPrice); event NewStartTimes(uint128 startTime_heroes, uint128 startTime_arcade, uint128 startTime_partners, uint128 startTime_rebels); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (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 Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions 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 (last updated v4.7.0) (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 Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { 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 (token/ERC20/extensions/draft-IERC20Permit.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.0; import "../IERC20.sol"; import "../extensions/draft-IERC20Permit.sol"; import "../../../utils/Address.sol"; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } function safePermit( IERC20Permit token, address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) internal { uint256 nonceBefore = token.nonces(owner); token.permit(owner, spender, value, deadline, v, r, s); uint256 nonceAfter = token.nonces(owner); require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed"); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.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 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.7.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 /// @solidity memory-safe-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; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Tree proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. * * WARNING: You should avoid using leaf values that are 64 bytes long prior to * hashing, or use a hash function other than keccak256 for hashing leaves. * This is because the concatenation of a sorted pair of internal nodes in * the merkle tree could be reinterpreted as a leaf value. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Calldata version of {verify} * * _Available since v4.7._ */ function verifyCalldata( bytes32[] calldata proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProofCalldata(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { computedHash = _hashPair(computedHash, proof[i]); } return computedHash; } /** * @dev Calldata version of {processProof} * * _Available since v4.7._ */ function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { computedHash = _hashPair(computedHash, proof[i]); } return computedHash; } /** * @dev Returns true if the `leaves` can be proved to be a part of a Merkle tree defined by * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}. * * _Available since v4.7._ */ function multiProofVerify( bytes32[] memory proof, bool[] memory proofFlags, bytes32 root, bytes32[] memory leaves ) internal pure returns (bool) { return processMultiProof(proof, proofFlags, leaves) == root; } /** * @dev Calldata version of {multiProofVerify} * * _Available since v4.7._ */ function multiProofVerifyCalldata( bytes32[] calldata proof, bool[] calldata proofFlags, bytes32 root, bytes32[] memory leaves ) internal pure returns (bool) { return processMultiProofCalldata(proof, proofFlags, leaves) == root; } /** * @dev Returns the root of a tree reconstructed from `leaves` and the sibling nodes in `proof`, * consuming from one or the other at each step according to the instructions given by * `proofFlags`. * * _Available since v4.7._ */ function processMultiProof( bytes32[] memory proof, bool[] memory proofFlags, bytes32[] memory leaves ) internal pure returns (bytes32 merkleRoot) { // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of // the merkle tree. uint256 leavesLen = leaves.length; uint256 totalHashes = proofFlags.length; // Check proof validity. require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof"); // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop". bytes32[] memory hashes = new bytes32[](totalHashes); uint256 leafPos = 0; uint256 hashPos = 0; uint256 proofPos = 0; // At each step, we compute the next hash using two values: // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we // get the next hash. // - depending on the flag, either another value for the "main queue" (merging branches) or an element from the // `proof` array. for (uint256 i = 0; i < totalHashes; i++) { bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++]; hashes[i] = _hashPair(a, b); } if (totalHashes > 0) { return hashes[totalHashes - 1]; } else if (leavesLen > 0) { return leaves[0]; } else { return proof[0]; } } /** * @dev Calldata version of {processMultiProof} * * _Available since v4.7._ */ function processMultiProofCalldata( bytes32[] calldata proof, bool[] calldata proofFlags, bytes32[] memory leaves ) internal pure returns (bytes32 merkleRoot) { // This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of // the merkle tree. uint256 leavesLen = leaves.length; uint256 totalHashes = proofFlags.length; // Check proof validity. require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof"); // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop". bytes32[] memory hashes = new bytes32[](totalHashes); uint256 leafPos = 0; uint256 hashPos = 0; uint256 proofPos = 0; // At each step, we compute the next hash using two values: // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we // get the next hash. // - depending on the flag, either another value for the "main queue" (merging branches) or an element from the // `proof` array. for (uint256 i = 0; i < totalHashes; i++) { bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++]; hashes[i] = _hashPair(a, b); } if (totalHashes > 0) { return hashes[totalHashes - 1]; } else if (leavesLen > 0) { return leaves[0]; } else { return proof[0]; } } function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) { return a < b ? _efficientHash(a, b) : _efficientHash(b, a); } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { /// @solidity memory-safe-assembly assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } }
// 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); }
{ "optimizer": { "enabled": true, "runs": 5000 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IERC721","name":"_pass","type":"address"},{"internalType":"address","name":"_owner","type":"address"},{"internalType":"bytes32","name":"_merkleRoot_heroes","type":"bytes32"},{"internalType":"bytes32","name":"_merkleRoot_arcade","type":"bytes32"},{"internalType":"bytes32","name":"_merkleRoot_partners","type":"bytes32"},{"internalType":"bytes32","name":"_merkleRoot_rebels","type":"bytes32"},{"internalType":"address","name":"_USDC","type":"address"},{"internalType":"uint128","name":"_startTime_heroes","type":"uint128"},{"internalType":"uint128","name":"_startTime_arcade","type":"uint128"},{"internalType":"uint128","name":"_startTime_partners","type":"uint128"},{"internalType":"uint128","name":"_startTime_rebels","type":"uint128"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldMax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"NewMaxSupply","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"NewMintPrice","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"phase","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"oldRoot","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"newRoot","type":"bytes32"}],"name":"NewRoot","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint128","name":"startTime_heroes","type":"uint128"},{"indexed":false,"internalType":"uint128","name":"startTime_arcade","type":"uint128"},{"indexed":false,"internalType":"uint128","name":"startTime_partners","type":"uint128"},{"indexed":false,"internalType":"uint128","name":"startTime_rebels","type":"uint128"}],"name":"NewStartTimes","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"balance","type":"uint256"}],"name":"Withdrawal","type":"event"},{"inputs":[],"name":"USDC","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_qty","type":"uint256"}],"name":"adminMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"claimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getActivePhase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getActiveRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot_arcade","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot_heroes","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot_partners","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot_rebels","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_qty","type":"uint256"},{"internalType":"uint256","name":"_whitelistQty","type":"uint256"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startingTokenId","type":"uint256"},{"internalType":"uint256","name":"_maxSupply","type":"uint256"}],"name":"notify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pass","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_newRoot","type":"bytes32"},{"internalType":"uint256","name":"_phase","type":"uint256"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"_startTime_heroes","type":"uint128"},{"internalType":"uint128","name":"_startTime_arcade","type":"uint128"},{"internalType":"uint128","name":"_startTime_partners","type":"uint128"},{"internalType":"uint128","name":"_startTime_rebels","type":"uint128"}],"name":"setStartTimes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime_arcade","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTime_heroes","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTime_partners","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTime_rebels","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSold","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":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c0604052630ee6b2806003553480156200001957600080fd5b5060405162002042380380620020428339810160408190526200003c916200024b565b62000047336200010a565b6000805460ff60a01b191690556001600160a01b038a16620000985760405162461bcd60e51b815260206004820152600560248201526410b0b2323960d91b60448201526064015b60405180910390fd5b620000a38a6200010a565b600789905560088890556009879055600a8690556001600160801b03838116600160801b9081028287161760055582821602908316176006556001600160a01b038086166080528b1660a052620000f96200015a565b505050505050505050505062000313565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b62000164620001bd565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258620001a03390565b6040516001600160a01b03909116815260200160405180910390a1565b620001d1600054600160a01b900460ff1690565b15620002135760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016200008f565b565b6001600160a01b03811681146200022b57600080fd5b50565b80516001600160801b03811681146200024657600080fd5b919050565b60008060008060008060008060008060006101608c8e0312156200026e57600080fd5b8b516200027b8162000215565b60208d0151909b506200028e8162000215565b809a505060408c0151985060608c0151975060808c0151965060a08c0151955060c08c0151620002be8162000215565b9450620002ce60e08d016200022e565b9350620002df6101008d016200022e565b9250620002f06101208d016200022e565b9150620003016101408d016200022e565b90509295989b509295989b9093969950565b60805160a051611ce66200035c6000396000818161039001528181610c8f01526110b001526000818161030a01528181610720015281816107bc01526110320152611ce66000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80637c382d0b11610104578063ae05c6f1116100a2578063ec52634b11610071578063ec52634b14610441578063f2bceee71461045d578063f2fde38b14610466578063f4a0a5281461047957600080fd5b8063ae05c6f1146103e2578063d5abeb0114610412578063e58306f91461041b578063e6d37b881461042e57600080fd5b80638da5cb5b116100de5780638da5cb5b146103645780639106d7ba14610382578063a7a1ed721461038b578063abcbf52c146103b257600080fd5b80637c382d0b146102f257806389a30271146103055780638b76aa121461035157600080fd5b80634dd6c8de116101715780635c975abb1161014b5780635c975abb146102aa57806361b8ce8c146102d85780636817c76c146102e1578063715018a6146102ea57600080fd5b80634dd6c8de1461023957806352494ae81461026457806355a40dab146102a157600080fd5b806323fd1174116101ad57806323fd11741461020c578063368b7b161461021f5780633ccfd60b14610228578063457669291461023057600080fd5b806314d35043146101d457806316c38b3c146101ef5780631ce97fd114610204575b600080fd5b6101dc61048c565b6040519081526020015b60405180910390f35b6102026101fd36600461196c565b6104e1565b005b6101dc610502565b61020261021a366004611989565b610642565b6101dc60075481565b6102026106e7565b6101dc600a5481565b6101dc6102473660046119d4565b600260209081526000928352604080842090915290825290205481565b600654610280906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff90911681526020016101e6565b6101dc60085481565b60005474010000000000000000000000000000000000000000900460ff1660405190151581526020016101e6565b6101dc60015481565b6101dc60035481565b610202610819565b610202610300366004611989565b61082d565b61032c7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e6565b61020261035f366004611a1e565b6109ca565b60005473ffffffffffffffffffffffffffffffffffffffff1661032c565b6101dc600b5481565b61032c7f000000000000000000000000000000000000000000000000000000000000000081565b6006546102809070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681565b6005546102809070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681565b6101dc60045481565b6102026104293660046119d4565b610b51565b61020261043c366004611a72565b610d48565b600554610280906fffffffffffffffffffffffffffffffff1681565b6101dc60095481565b610202610474366004611af5565b611166565b610202610487366004611b10565b611200565b600080610497610502565b9050806001036104a957505060075490565b806002036104b957505060085490565b806003036104c957505060095490565b806004036104d9575050600a5490565b506000919050565b6104e9611249565b80156104fa576104f76112b0565b50565b6104f7611349565b6005546000906fffffffffffffffffffffffffffffffff164210801590610550575060055470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1642105b1561055b5750600190565b60055470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1642108015906105a657506006546fffffffffffffffffffffffffffffffff1642105b156105b15750600290565b6006546fffffffffffffffffffffffffffffffff1642108015906105fc575060065470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1642105b156106075750600390565b60065470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16421061063c5750600490565b50600090565b61064a611249565b600b5481116106a05760405162461bcd60e51b815260206004820152600660248201527f21706172616d000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60045460408051918252602082018390527f904452cc27e87db7e7bf1a4675be33b6106fcd0a3fb8068baac864c2b38ac4a4910160405180910390a1600191909155600455565b6106ef611249565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561077c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a09190611b29565b90506107e373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633836113a0565b6040518181527f4e70a604b23a8edee2b1d0a656e9b9c00b73ad8bb1afc2c59381ee9f69197de79060200160405180910390a150565b610821611249565b61082b6000611479565b565b610835611249565b600081118015610846575060048111155b6108925760405162461bcd60e51b815260206004820152600660248201527f21706172616d00000000000000000000000000000000000000000000000000006044820152606401610697565b806001036108df5760075460408051918252602082018490526001917fe37a76f4fa1f705d7df386b4190189a01cbf8b19a9946049aeda120b1ea909a9910160405180910390a250600755565b8060020361092c5760085460408051918252602082018490526002917fe37a76f4fa1f705d7df386b4190189a01cbf8b19a9946049aeda120b1ea909a9910160405180910390a250600855565b806003036109795760095460408051918252602082018490526003917fe37a76f4fa1f705d7df386b4190189a01cbf8b19a9946049aeda120b1ea909a9910160405180910390a250600955565b806004036109c657600a5460408051918252602082018490526004917fe37a76f4fa1f705d7df386b4190189a01cbf8b19a9946049aeda120b1ea909a9910160405180910390a2600a8290555b5050565b6109d2611249565b816fffffffffffffffffffffffffffffffff16816fffffffffffffffffffffffffffffffff1610158015610a2a5750826fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff1610155b8015610a5a5750836fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff1610155b8015610a78575042846fffffffffffffffffffffffffffffffff1610155b610ac45760405162461bcd60e51b815260206004820152600760248201527f2174696d696e67000000000000000000000000000000000000000000000000006044820152606401610697565b6fffffffffffffffffffffffffffffffff838116700100000000000000000000000000000000818102878416908117600555848416918202938616938417600655604080519182526020820193909352808301939093526060830152517fb8af1814f866bd1d1688ae6d6c4cc5781b82e23d9eb10400d254f7b2f577ef7c9181900360800190a150505050565b610b59611249565b60008111610ba95760405162461bcd60e51b815260206004820152600560248201527f217a65726f0000000000000000000000000000000000000000000000000000006044820152606401610697565b60045481600b54610bba9190611b71565b1115610c085760405162461bcd60e51b815260206004820152600a60248201527f4d617820737570706c79000000000000000000000000000000000000000000006044820152606401610697565b80600b6000828254610c1a9190611b71565b9091555060009050805b82811015610cf2576001805480820182556040517f23b872dd00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff87811660248301526044820183905291945092909101917f0000000000000000000000000000000000000000000000000000000000000000909116906323b872dd90606401600060405180830381600087803b158015610cd557600080fd5b505af1158015610ce9573d6000803e3d6000fd5b50505050610c24565b508273ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688583604051610d3b91815260200190565b60405180910390a2505050565b610d506114ee565b60008411610da05760405162461bcd60e51b815260206004820152600560248201527f217a65726f0000000000000000000000000000000000000000000000000000006044820152606401610697565b6000610daa610502565b3360009081526002602090815260408083208484529091529020549091508490610dd5908790611b71565b1115610e235760405162461bcd60e51b815260206004820152600860248201527f55736572206d61780000000000000000000000000000000000000000000000006044820152606401610697565b60045485600b54610e349190611b71565b1115610e825760405162461bcd60e51b815260206004820152600a60248201527f4d617820737570706c79000000000000000000000000000000000000000000006044820152606401610697565b6040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b166020820152603481018590526000906054016040516020818303038152906040528051906020012090506000610edf61048c565b90506000819003610f325760405162461bcd60e51b815260206004820152600660248201527f21706861736500000000000000000000000000000000000000000000000000006044820152606401610697565b610f728585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508592508691506115599050565b610fbe5760405162461bcd60e51b815260206004820152600660248201527f2170726f6f6600000000000000000000000000000000000000000000000000006044820152606401610697565b33600090815260026020908152604080832086845290915281208054899290610fe8908490611b71565b9250508190555086600b60008282546110019190611b71565b9250508190555061105a33308960035461101b9190611b84565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016929190611571565b6000805b88811015611126576001805480820182556040517f23b872dd000000000000000000000000000000000000000000000000000000008152306004820152336024820152604481018290529093509101907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd90606401600060405180830381600087803b15801561110957600080fd5b505af115801561111d573d6000803e3d6000fd5b5050505061105e565b5060405188815233907f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968859060200160405180910390a25050505050505050565b61116e611249565b73ffffffffffffffffffffffffffffffffffffffff81166111f75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610697565b6104f781611479565b611208611249565b60035460408051918252602082018390527f28b518248e075f614060b16a7568fe9b127ed22af6667aafeeb74c74fda7ac75910160405180910390a1600355565b60005473ffffffffffffffffffffffffffffffffffffffff16331461082b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610697565b6112b86114ee565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861131f3390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6113516115d5565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa3361131f565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526114749084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261163f565b505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005474010000000000000000000000000000000000000000900460ff161561082b5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610697565b6000826115668584611731565b1490505b9392505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526115cf9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016113f2565b50505050565b60005474010000000000000000000000000000000000000000900460ff1661082b5760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610697565b60006116a1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166117809092919063ffffffff16565b80519091501561147457808060200190518101906116bf9190611b9b565b6114745760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610697565b600081815b8451811015611776576117628286838151811061175557611755611bb8565b6020026020010151611797565b91508061176e81611be7565b915050611736565b5090505b92915050565b606061178f84846000856117c3565b949350505050565b60008183106117b357600082815260208490526040902061156a565b5060009182526020526040902090565b60608247101561183b5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610697565b73ffffffffffffffffffffffffffffffffffffffff85163b61189f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610697565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516118c89190611c43565b60006040518083038185875af1925050503d8060008114611905576040519150601f19603f3d011682016040523d82523d6000602084013e61190a565b606091505b509150915061191a828286611925565b979650505050505050565b6060831561193457508161156a565b8251156119445782518084602001fd5b8160405162461bcd60e51b81526004016106979190611c5f565b80151581146104f757600080fd5b60006020828403121561197e57600080fd5b813561156a8161195e565b6000806040838503121561199c57600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff811681146119cf57600080fd5b919050565b600080604083850312156119e757600080fd5b6119f0836119ab565b946020939093013593505050565b80356fffffffffffffffffffffffffffffffff811681146119cf57600080fd5b60008060008060808587031215611a3457600080fd5b611a3d856119fe565b9350611a4b602086016119fe565b9250611a59604086016119fe565b9150611a67606086016119fe565b905092959194509250565b60008060008060608587031215611a8857600080fd5b8435935060208501359250604085013567ffffffffffffffff80821115611aae57600080fd5b818701915087601f830112611ac257600080fd5b813581811115611ad157600080fd5b8860208260051b8501011115611ae657600080fd5b95989497505060200194505050565b600060208284031215611b0757600080fd5b61156a826119ab565b600060208284031215611b2257600080fd5b5035919050565b600060208284031215611b3b57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561177a5761177a611b42565b808202811582820484141761177a5761177a611b42565b600060208284031215611bad57600080fd5b815161156a8161195e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611c1857611c18611b42565b5060010190565b60005b83811015611c3a578181015183820152602001611c22565b50506000910152565b60008251611c55818460208701611c1f565b9190910192915050565b6020815260008251806020840152611c7e816040850160208701611c1f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220d836cdca6dc5a181c43cc59f0b4ecaef7bea983e98704406d69fcf061f0dfdee64736f6c6343000811003300000000000000000000000007ce82f414a42d9a73b0bd9ec23c249d446a0109000000000000000000000000987270bde0db9b9e280360c0c0025afdcce1a8560000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000000000000000000000000000000000000063f360c00000000000000000000000000000000000000000000000000000000063f38af00000000000000000000000000000000000000000000000000000000063f3b5200000000000000000000000000000000000000000000000000000000063f3df50
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c80637c382d0b11610104578063ae05c6f1116100a2578063ec52634b11610071578063ec52634b14610441578063f2bceee71461045d578063f2fde38b14610466578063f4a0a5281461047957600080fd5b8063ae05c6f1146103e2578063d5abeb0114610412578063e58306f91461041b578063e6d37b881461042e57600080fd5b80638da5cb5b116100de5780638da5cb5b146103645780639106d7ba14610382578063a7a1ed721461038b578063abcbf52c146103b257600080fd5b80637c382d0b146102f257806389a30271146103055780638b76aa121461035157600080fd5b80634dd6c8de116101715780635c975abb1161014b5780635c975abb146102aa57806361b8ce8c146102d85780636817c76c146102e1578063715018a6146102ea57600080fd5b80634dd6c8de1461023957806352494ae81461026457806355a40dab146102a157600080fd5b806323fd1174116101ad57806323fd11741461020c578063368b7b161461021f5780633ccfd60b14610228578063457669291461023057600080fd5b806314d35043146101d457806316c38b3c146101ef5780631ce97fd114610204575b600080fd5b6101dc61048c565b6040519081526020015b60405180910390f35b6102026101fd36600461196c565b6104e1565b005b6101dc610502565b61020261021a366004611989565b610642565b6101dc60075481565b6102026106e7565b6101dc600a5481565b6101dc6102473660046119d4565b600260209081526000928352604080842090915290825290205481565b600654610280906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff90911681526020016101e6565b6101dc60085481565b60005474010000000000000000000000000000000000000000900460ff1660405190151581526020016101e6565b6101dc60015481565b6101dc60035481565b610202610819565b610202610300366004611989565b61082d565b61032c7f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e6565b61020261035f366004611a1e565b6109ca565b60005473ffffffffffffffffffffffffffffffffffffffff1661032c565b6101dc600b5481565b61032c7f00000000000000000000000007ce82f414a42d9a73b0bd9ec23c249d446a010981565b6006546102809070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681565b6005546102809070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681565b6101dc60045481565b6102026104293660046119d4565b610b51565b61020261043c366004611a72565b610d48565b600554610280906fffffffffffffffffffffffffffffffff1681565b6101dc60095481565b610202610474366004611af5565b611166565b610202610487366004611b10565b611200565b600080610497610502565b9050806001036104a957505060075490565b806002036104b957505060085490565b806003036104c957505060095490565b806004036104d9575050600a5490565b506000919050565b6104e9611249565b80156104fa576104f76112b0565b50565b6104f7611349565b6005546000906fffffffffffffffffffffffffffffffff164210801590610550575060055470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1642105b1561055b5750600190565b60055470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1642108015906105a657506006546fffffffffffffffffffffffffffffffff1642105b156105b15750600290565b6006546fffffffffffffffffffffffffffffffff1642108015906105fc575060065470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1642105b156106075750600390565b60065470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16421061063c5750600490565b50600090565b61064a611249565b600b5481116106a05760405162461bcd60e51b815260206004820152600660248201527f21706172616d000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60045460408051918252602082018390527f904452cc27e87db7e7bf1a4675be33b6106fcd0a3fb8068baac864c2b38ac4a4910160405180910390a1600191909155600455565b6106ef611249565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561077c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a09190611b29565b90506107e373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb481633836113a0565b6040518181527f4e70a604b23a8edee2b1d0a656e9b9c00b73ad8bb1afc2c59381ee9f69197de79060200160405180910390a150565b610821611249565b61082b6000611479565b565b610835611249565b600081118015610846575060048111155b6108925760405162461bcd60e51b815260206004820152600660248201527f21706172616d00000000000000000000000000000000000000000000000000006044820152606401610697565b806001036108df5760075460408051918252602082018490526001917fe37a76f4fa1f705d7df386b4190189a01cbf8b19a9946049aeda120b1ea909a9910160405180910390a250600755565b8060020361092c5760085460408051918252602082018490526002917fe37a76f4fa1f705d7df386b4190189a01cbf8b19a9946049aeda120b1ea909a9910160405180910390a250600855565b806003036109795760095460408051918252602082018490526003917fe37a76f4fa1f705d7df386b4190189a01cbf8b19a9946049aeda120b1ea909a9910160405180910390a250600955565b806004036109c657600a5460408051918252602082018490526004917fe37a76f4fa1f705d7df386b4190189a01cbf8b19a9946049aeda120b1ea909a9910160405180910390a2600a8290555b5050565b6109d2611249565b816fffffffffffffffffffffffffffffffff16816fffffffffffffffffffffffffffffffff1610158015610a2a5750826fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff1610155b8015610a5a5750836fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff1610155b8015610a78575042846fffffffffffffffffffffffffffffffff1610155b610ac45760405162461bcd60e51b815260206004820152600760248201527f2174696d696e67000000000000000000000000000000000000000000000000006044820152606401610697565b6fffffffffffffffffffffffffffffffff838116700100000000000000000000000000000000818102878416908117600555848416918202938616938417600655604080519182526020820193909352808301939093526060830152517fb8af1814f866bd1d1688ae6d6c4cc5781b82e23d9eb10400d254f7b2f577ef7c9181900360800190a150505050565b610b59611249565b60008111610ba95760405162461bcd60e51b815260206004820152600560248201527f217a65726f0000000000000000000000000000000000000000000000000000006044820152606401610697565b60045481600b54610bba9190611b71565b1115610c085760405162461bcd60e51b815260206004820152600a60248201527f4d617820737570706c79000000000000000000000000000000000000000000006044820152606401610697565b80600b6000828254610c1a9190611b71565b9091555060009050805b82811015610cf2576001805480820182556040517f23b872dd00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff87811660248301526044820183905291945092909101917f00000000000000000000000007ce82f414a42d9a73b0bd9ec23c249d446a0109909116906323b872dd90606401600060405180830381600087803b158015610cd557600080fd5b505af1158015610ce9573d6000803e3d6000fd5b50505050610c24565b508273ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688583604051610d3b91815260200190565b60405180910390a2505050565b610d506114ee565b60008411610da05760405162461bcd60e51b815260206004820152600560248201527f217a65726f0000000000000000000000000000000000000000000000000000006044820152606401610697565b6000610daa610502565b3360009081526002602090815260408083208484529091529020549091508490610dd5908790611b71565b1115610e235760405162461bcd60e51b815260206004820152600860248201527f55736572206d61780000000000000000000000000000000000000000000000006044820152606401610697565b60045485600b54610e349190611b71565b1115610e825760405162461bcd60e51b815260206004820152600a60248201527f4d617820737570706c79000000000000000000000000000000000000000000006044820152606401610697565b6040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b166020820152603481018590526000906054016040516020818303038152906040528051906020012090506000610edf61048c565b90506000819003610f325760405162461bcd60e51b815260206004820152600660248201527f21706861736500000000000000000000000000000000000000000000000000006044820152606401610697565b610f728585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508592508691506115599050565b610fbe5760405162461bcd60e51b815260206004820152600660248201527f2170726f6f6600000000000000000000000000000000000000000000000000006044820152606401610697565b33600090815260026020908152604080832086845290915281208054899290610fe8908490611b71565b9250508190555086600b60008282546110019190611b71565b9250508190555061105a33308960035461101b9190611b84565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4816929190611571565b6000805b88811015611126576001805480820182556040517f23b872dd000000000000000000000000000000000000000000000000000000008152306004820152336024820152604481018290529093509101907f00000000000000000000000007ce82f414a42d9a73b0bd9ec23c249d446a010973ffffffffffffffffffffffffffffffffffffffff16906323b872dd90606401600060405180830381600087803b15801561110957600080fd5b505af115801561111d573d6000803e3d6000fd5b5050505061105e565b5060405188815233907f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968859060200160405180910390a25050505050505050565b61116e611249565b73ffffffffffffffffffffffffffffffffffffffff81166111f75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610697565b6104f781611479565b611208611249565b60035460408051918252602082018390527f28b518248e075f614060b16a7568fe9b127ed22af6667aafeeb74c74fda7ac75910160405180910390a1600355565b60005473ffffffffffffffffffffffffffffffffffffffff16331461082b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610697565b6112b86114ee565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861131f3390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6113516115d5565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa3361131f565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526114749084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261163f565b505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005474010000000000000000000000000000000000000000900460ff161561082b5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610697565b6000826115668584611731565b1490505b9392505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526115cf9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016113f2565b50505050565b60005474010000000000000000000000000000000000000000900460ff1661082b5760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610697565b60006116a1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166117809092919063ffffffff16565b80519091501561147457808060200190518101906116bf9190611b9b565b6114745760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610697565b600081815b8451811015611776576117628286838151811061175557611755611bb8565b6020026020010151611797565b91508061176e81611be7565b915050611736565b5090505b92915050565b606061178f84846000856117c3565b949350505050565b60008183106117b357600082815260208490526040902061156a565b5060009182526020526040902090565b60608247101561183b5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610697565b73ffffffffffffffffffffffffffffffffffffffff85163b61189f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610697565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516118c89190611c43565b60006040518083038185875af1925050503d8060008114611905576040519150601f19603f3d011682016040523d82523d6000602084013e61190a565b606091505b509150915061191a828286611925565b979650505050505050565b6060831561193457508161156a565b8251156119445782518084602001fd5b8160405162461bcd60e51b81526004016106979190611c5f565b80151581146104f757600080fd5b60006020828403121561197e57600080fd5b813561156a8161195e565b6000806040838503121561199c57600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff811681146119cf57600080fd5b919050565b600080604083850312156119e757600080fd5b6119f0836119ab565b946020939093013593505050565b80356fffffffffffffffffffffffffffffffff811681146119cf57600080fd5b60008060008060808587031215611a3457600080fd5b611a3d856119fe565b9350611a4b602086016119fe565b9250611a59604086016119fe565b9150611a67606086016119fe565b905092959194509250565b60008060008060608587031215611a8857600080fd5b8435935060208501359250604085013567ffffffffffffffff80821115611aae57600080fd5b818701915087601f830112611ac257600080fd5b813581811115611ad157600080fd5b8860208260051b8501011115611ae657600080fd5b95989497505060200194505050565b600060208284031215611b0757600080fd5b61156a826119ab565b600060208284031215611b2257600080fd5b5035919050565b600060208284031215611b3b57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561177a5761177a611b42565b808202811582820484141761177a5761177a611b42565b600060208284031215611bad57600080fd5b815161156a8161195e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611c1857611c18611b42565b5060010190565b60005b83811015611c3a578181015183820152602001611c22565b50506000910152565b60008251611c55818460208701611c1f565b9190910192915050565b6020815260008251806020840152611c7e816040850160208701611c1f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220d836cdca6dc5a181c43cc59f0b4ecaef7bea983e98704406d69fcf061f0dfdee64736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000007ce82f414a42d9a73b0bd9ec23c249d446a0109000000000000000000000000987270bde0db9b9e280360c0c0025afdcce1a8560000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000000000000000000000000000000000000063f360c00000000000000000000000000000000000000000000000000000000063f38af00000000000000000000000000000000000000000000000000000000063f3b5200000000000000000000000000000000000000000000000000000000063f3df50
-----Decoded View---------------
Arg [0] : _pass (address): 0x07Ce82f414A42D9A73B0bD9EC23c249d446A0109
Arg [1] : _owner (address): 0x987270bde0db9B9e280360C0c0025afdcce1A856
Arg [2] : _merkleRoot_heroes (bytes32): 0x0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : _merkleRoot_arcade (bytes32): 0x0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : _merkleRoot_partners (bytes32): 0x0000000000000000000000000000000000000000000000000000000000000000
Arg [5] : _merkleRoot_rebels (bytes32): 0x0000000000000000000000000000000000000000000000000000000000000000
Arg [6] : _USDC (address): 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
Arg [7] : _startTime_heroes (uint128): 1676894400
Arg [8] : _startTime_arcade (uint128): 1676905200
Arg [9] : _startTime_partners (uint128): 1676916000
Arg [10] : _startTime_rebels (uint128): 1676926800
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 00000000000000000000000007ce82f414a42d9a73b0bd9ec23c249d446a0109
Arg [1] : 000000000000000000000000987270bde0db9b9e280360c0c0025afdcce1a856
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [6] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [7] : 0000000000000000000000000000000000000000000000000000000063f360c0
Arg [8] : 0000000000000000000000000000000000000000000000000000000063f38af0
Arg [9] : 0000000000000000000000000000000000000000000000000000000063f3b520
Arg [10] : 0000000000000000000000000000000000000000000000000000000063f3df50
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ 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.