Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
48,969.81047453703703703 RUN
Holders
8
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ApeRunnersRUN
Compiler Version
v0.8.11+commit.d7f03943
Optimization Enabled:
Yes with 512 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.11; import "./base/Controllable.sol"; import "sol-temple/src/tokens/ERC721.sol"; import "sol-temple/src/tokens/ERC20.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/security/Pausable.sol"; /// @title Ape Runners RUN /// @author naomsa <https://twitter.com/naomsa666> contract ApeRunnersRUN is Ownable, Pausable, Controllable, ERC20("Ape Runners", "RUN", 18, "1") { /* -------------------------------------------------------------------------- */ /* Airdrop Details */ /* -------------------------------------------------------------------------- */ /// @notice Ape Runners contract. ERC721 public immutable apeRunners; /// @notice Ape Runner id => claimed airdrop. mapping(uint256 => bool) public airdroped; constructor(address newApeRunners) { apeRunners = ERC721(newApeRunners); } /* -------------------------------------------------------------------------- */ /* Airdrop Logic */ /* -------------------------------------------------------------------------- */ /// @notice Claim pending airdrop for each Ape Runner. /// @param ids Ape Runner token ids to claim airdrop. function claim(uint256[] memory ids) external { uint256 pending; for (uint256 i; i < ids.length; i++) { require(apeRunners.ownerOf(ids[i]) == msg.sender, "Not the token owner"); require(!airdroped[ids[i]], "Airdrop already claimed"); airdroped[ids[i]] = true; pending += 300 ether; } super._mint(msg.sender, pending); } /* -------------------------------------------------------------------------- */ /* Owner Logic */ /* -------------------------------------------------------------------------- */ /// @notice Add or edit contract controllers. /// @param addrs Array of addresses to be added/edited. /// @param state New controller state of addresses. function setControllers(address[] calldata addrs, bool state) external onlyOwner { for (uint256 i; i < addrs.length; i++) super._setController(addrs[i], state); } /// @notice Switch the contract paused state between paused and unpaused. function togglePaused() external onlyOwner { if (paused()) _unpause(); else _pause(); } /* -------------------------------------------------------------------------- */ /* ERC-20 Logic */ /* -------------------------------------------------------------------------- */ /// @notice Mint tokens. /// @param to Address to get tokens minted to. /// @param value Number of tokens to be minted. function mint(address to, uint256 value) external onlyController { super._mint(to, value); } /// @notice Burn tokens. /// @param from Address to get tokens burned from. /// @param value Number of tokens to be burned. function burn(address from, uint256 value) external onlyController { super._burn(from, value); } /// @notice See {ERC20-_beforeTokenTransfer}. /// @dev Overriden to block transactions while the contract is paused (avoiding bugs). function _beforeTokenTransfer( address from, address to, uint256 amount ) internal override whenNotPaused { super._beforeTokenTransfer(from, to, amount); } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.11; /// @title Controllable abstract contract Controllable { /// @notice address => is controller. mapping(address => bool) private _isController; /// @notice Require the caller to be a controller. modifier onlyController() { require( _isController[msg.sender], "Controllable: Caller is not a controller" ); _; } /// @notice Check if `addr` is a controller. function isController(address addr) public view returns (bool) { return _isController[addr]; } /// @notice Set the `addr` controller status to `status`. function _setController(address addr, bool status) internal { _isController[addr] = status; } }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity >=0.8.0 <0.9.0; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol"; import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol"; import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol"; import "@openzeppelin/contracts/utils/introspection/IERC165.sol"; /// @title ERC721 /// @author naomsa <https://twitter.com/naomsa666> /// @notice A complete ERC721 implementation including metadata and enumerable /// functions. Completely gas optimized and extensible. abstract contract ERC721 is IERC165, IERC721, IERC721Metadata, IERC721Enumerable { /* _ _ */ /* ( )_ ( )_ */ /* ___ | ,_) _ _ | ,_) __ */ /* /',__)| | /'__` )| | /'__`\ */ /* \__, \| |_ ( (_| || |_ ( ___/ */ /* (____/`\__)`\__,_)`\__)`\____) */ /// @notice See {ERC721Metadata-name}. string public name; /// @notice See {ERC721Metadata-symbol}. string public symbol; /// @notice See {ERC721Enumerable-totalSupply}. uint256 public totalSupply; /// @notice Array of all owners. mapping(uint256 => address) private _owners; /// @notice Mapping of all balances. mapping(address => uint256) private _balanceOf; /// @notice Mapping from token Id to it's approved address. mapping(uint256 => address) private _tokenApprovals; /// @notice Mapping of approvals between owner and operator. mapping(address => mapping(address => bool)) private _isApprovedForAll; /* _ */ /* (_ ) _ */ /* | | _ __ (_) ___ */ /* | | /'_`\ /'_ `\| | /'___) */ /* | | ( (_) )( (_) || |( (___ */ /* (___)`\___/'`\__ |(_)`\____) */ /* ( )_) | */ /* \___/' */ /// @dev Set token's name and symbol. constructor(string memory name_, string memory symbol_) { name = name_; symbol = symbol_; } /// @notice See {ERC721-balanceOf}. function balanceOf(address account_) public view virtual returns (uint256) { require(account_ != address(0), "ERC721: balance query for the zero address"); return _balanceOf[account_]; } /// @notice See {ERC721-ownerOf}. function ownerOf(uint256 tokenId_) public view virtual returns (address) { require(_exists(tokenId_), "ERC721: query for nonexistent token"); address owner = _owners[tokenId_]; return owner; } /// @notice See {ERC721Metadata-tokenURI}. function tokenURI(uint256) public view virtual returns (string memory); /// @notice See {ERC721-approve}. function approve(address to_, uint256 tokenId_) public virtual { address owner = ownerOf(tokenId_); require(to_ != owner, "ERC721: approval to current owner"); require( msg.sender == owner || _isApprovedForAll[owner][msg.sender], "ERC721: caller is not owner nor approved for all" ); _approve(to_, tokenId_); } /// @notice See {ERC721-getApproved}. function getApproved(uint256 tokenId_) public view virtual returns (address) { require(_exists(tokenId_), "ERC721: query for nonexistent token"); return _tokenApprovals[tokenId_]; } /// @notice See {ERC721-setApprovalForAll}. function setApprovalForAll(address operator_, bool approved_) public virtual { _setApprovalForAll(msg.sender, operator_, approved_); } /// @notice See {ERC721-isApprovedForAll}. function isApprovedForAll(address account_, address operator_) public view virtual returns (bool) { return _isApprovedForAll[account_][operator_]; } /// @notice See {ERC721-transferFrom}. function transferFrom( address from_, address to_, uint256 tokenId_ ) public virtual { require(_isApprovedOrOwner(msg.sender, tokenId_), "ERC721: transfer caller is not owner nor approved"); _transfer(from_, to_, tokenId_); } /// @notice See {ERC721-safeTransferFrom}. function safeTransferFrom( address from_, address to_, uint256 tokenId_ ) public virtual { safeTransferFrom(from_, to_, tokenId_, ""); } /// @notice See {ERC721-safeTransferFrom}. function safeTransferFrom( address from_, address to_, uint256 tokenId_, bytes memory data_ ) public virtual { require(_isApprovedOrOwner(msg.sender, tokenId_), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from_, to_, tokenId_, data_); } /// @notice See {ERC721Enumerable.tokenOfOwnerByIndex}. function tokenOfOwnerByIndex(address account_, uint256 index_) public view returns (uint256 tokenId) { require(index_ < balanceOf(account_), "ERC721Enumerable: Index out of bounds"); uint256 count; for (uint256 i; i < totalSupply; ++i) { if (account_ == _owners[i]) { if (count == index_) return i; else count++; } } revert("ERC721Enumerable: Index out of bounds"); } /// @notice See {ERC721Enumerable.tokenByIndex}. function tokenByIndex(uint256 index_) public view virtual returns (uint256) { require(index_ < totalSupply, "ERC721Enumerable: Index out of bounds"); return index_; } /// @notice Returns a list of all token Ids owned by `owner`. function walletOfOwner(address account_) public view returns (uint256[] memory) { uint256 balance = balanceOf(account_); uint256[] memory ids = new uint256[](balance); for (uint256 i = 0; i < balance; i++) ids[i] = tokenOfOwnerByIndex(account_, i); return ids; } /* _ _ */ /* _ ( )_ (_ ) */ /* (_) ___ | ,_) __ _ __ ___ _ _ | | */ /* | |/' _ `\| | /'__`\( '__)/' _ `\ /'__` ) | | */ /* | || ( ) || |_ ( ___/| | | ( ) |( (_| | | | */ /* (_)(_) (_)`\__)`\____)(_) (_) (_)`\__,_)(___) */ /// @notice 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. function _safeTransfer( address from_, address to_, uint256 tokenId_, bytes memory data_ ) internal virtual { _transfer(from_, to_, tokenId_); _checkOnERC721Received(from_, to_, tokenId_, data_); } /// @notice Returns whether `tokenId_` exists. function _exists(uint256 tokenId_) internal view virtual returns (bool) { return tokenId_ < totalSupply && _owners[tokenId_] != address(0); } /// @notice Returns whether `spender_` is allowed to manage `tokenId`. function _isApprovedOrOwner(address spender_, uint256 tokenId_) internal view virtual returns (bool) { require(_exists(tokenId_), "ERC721: query for nonexistent token"); address owner = _owners[tokenId_]; return (spender_ == owner || getApproved(tokenId_) == spender_ || isApprovedForAll(owner, spender_)); } /// @notice Safely mints `tokenId_` and transfers it to `to`. function _safeMint(address to_, uint256 tokenId_) internal virtual { _safeMint(to_, tokenId_, ""); } /// @notice Same as {_safeMint}, but with an additional `data_` parameter which is /// forwarded in {ERC721Receiver-onERC721Received} to contract recipients. function _safeMint( address to_, uint256 tokenId_, bytes memory data_ ) internal virtual { _mint(to_, tokenId_); _checkOnERC721Received(address(0), to_, tokenId_, data_); } /// @notice Mints `tokenId_` and transfers it to `to_`. function _mint(address to_, uint256 tokenId_) internal virtual { require(!_exists(tokenId_), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to_, tokenId_); _owners[tokenId_] = to_; totalSupply++; unchecked { _balanceOf[to_]++; } emit Transfer(address(0), to_, tokenId_); _afterTokenTransfer(address(0), to_, tokenId_); } /// @notice Destroys `tokenId`. The approval is cleared when the token is burned. function _burn(uint256 tokenId_) internal virtual { address owner = ownerOf(tokenId_); _beforeTokenTransfer(owner, address(0), tokenId_); // Clear approvals _approve(address(0), tokenId_); totalSupply--; _balanceOf[owner]--; delete _owners[tokenId_]; emit Transfer(owner, address(0), tokenId_); _afterTokenTransfer(owner, address(0), tokenId_); } /// @notice Transfers `tokenId_` from `from_` to `to`. function _transfer( address from_, address to_, uint256 tokenId_ ) internal virtual { require(_owners[tokenId_] == from_, "ERC721: transfer of token that is not own"); _beforeTokenTransfer(from_, to_, tokenId_); // Clear approvals from the previous owner _approve(address(0), tokenId_); _owners[tokenId_] = to_; unchecked { _balanceOf[from_]--; _balanceOf[to_]++; } emit Transfer(from_, to_, tokenId_); _afterTokenTransfer(from_, to_, tokenId_); } /// @notice Approve `to_` to operate on `tokenId_` function _approve(address to_, uint256 tokenId_) internal virtual { _tokenApprovals[tokenId_] = to_; emit Approval(_owners[tokenId_], to_, tokenId_); } /// @notice Approve `operator_` to operate on all of `account_` tokens. function _setApprovalForAll( address account_, address operator_, bool approved_ ) internal virtual { require(account_ != operator_, "ERC721: approve to caller"); _isApprovedForAll[account_][operator_] = approved_; emit ApprovalForAll(account_, operator_, approved_); } /// @notice ERC721Receiver callback checking and calling helper. function _checkOnERC721Received( address from_, address to_, uint256 tokenId_, bytes memory data_ ) private { if (to_.code.length > 0) { try IERC721Receiver(to_).onERC721Received(msg.sender, from_, tokenId_, data_) returns (bytes4 returned) { require(returned == 0x150b7a02, "ERC721: safe transfer to non ERC721Receiver implementation"); } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: safe transfer to non ERC721Receiver implementation"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } } /// @notice Hook that is called before any token transfer. function _beforeTokenTransfer( address from_, address to_, uint256 tokenId_ ) internal virtual {} /// @notice Hook that is called after any token transfer. function _afterTokenTransfer( address from_, address to_, uint256 tokenId_ ) internal virtual {} /* ___ _ _ _ _ __ _ __ */ /* /',__)( ) ( )( '_`\ /'__`\( '__) */ /* \__, \| (_) || (_) )( ___/| | */ /* (____/`\___/'| ,__/'`\____)(_) */ /* | | */ /* (_) */ /// @notice See {ERC165-supportsInterface}. function supportsInterface(bytes4 interfaceId_) public view virtual returns (bool) { return interfaceId_ == type(IERC721).interfaceId || // ERC721 interfaceId_ == type(IERC721Metadata).interfaceId || // ERC721Metadata interfaceId_ == type(IERC721Enumerable).interfaceId || // ERC721Enumerable interfaceId_ == type(IERC165).interfaceId; // ERC165 } }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity >=0.8.0 <0.9.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol"; /** * @title ERC20 * @author naomsa <https://twitter.com/naomsa666> * @notice A complete ERC20 implementation including EIP-2612 permit feature. * Inspired by Solmate's ERC20, aiming at efficiency. */ abstract contract ERC20 is IERC20 { /* _ _ */ /* ( )_ ( )_ */ /* ___ | ,_) _ _ | ,_) __ */ /* /',__)| | /'_` )| | /'__`\ */ /* \__, \| |_ ( (_| || |_ ( ___/ */ /* (____/`\__)`\__,_)`\__)`\____) */ /// @notice See {ERC20-name}. string public name; /// @notice See {ERC20-symbol}. string public symbol; /// @notice See {ERC20-decimals}. uint8 public immutable decimals; /// @notice Used to hash the Domain Separator. string public version; /// @notice See {ERC20-totalSupply}. uint256 public totalSupply; /// @notice See {ERC20-balanceOf}. mapping(address => uint256) public balanceOf; /// @notice See {ERC20-allowance}. mapping(address => mapping(address => uint256)) public allowance; /// @notice See {ERC2612-nonces}. mapping(address => uint256) public nonces; /* _ */ /* (_ ) _ */ /* | | _ __ (_) ___ */ /* | | /'_`\ /'_ `\| | /'___) */ /* | | ( (_) )( (_) || |( (___ */ /* (___)`\___/'`\__ |(_)`\____) */ /* ( )_) | */ /* \___/' */ constructor( string memory name_, string memory symbol_, uint8 decimals_, string memory version_ ) { name = name_; symbol = symbol_; decimals = decimals_; version = version_; } /// @notice See {ERC20-transfer}. function transfer(address to_, uint256 value_) public returns (bool) { _transfer(msg.sender, to_, value_); return true; } /// @notice See {ERC20-transferFrom}. function transferFrom( address from_, address to_, uint256 value_ ) public returns (bool) { uint256 allowed = allowance[from_][msg.sender]; require(allowed >= value_, "ERC20: allowance exceeds transfer value"); if (allowed != type(uint256).max) allowance[from_][msg.sender] -= value_; _transfer(from_, to_, value_); return true; } /// @notice See {ERC20-approve}. function approve(address spender_, uint256 value_) public returns (bool) { _approve(msg.sender, spender_, value_); return true; } /// @notice See {ERC2612-DOMAIN_SEPARATOR}. function DOMAIN_SEPARATOR() public view returns (bytes32) { return _hashEIP712Domain(name, version, block.chainid, address(this)); } /// @notice See {ERC2612-permit}. function permit( address owner_, address spender_, uint256 value_, uint256 deadline_, uint8 v_, bytes32 r_, bytes32 s_ ) public { require(deadline_ >= block.timestamp, "ERC20: expired permit deadline"); // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)") bytes32 digest = _hashEIP712Message( DOMAIN_SEPARATOR(), keccak256( abi.encode( 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9, owner_, spender_, value_, nonces[owner_]++, deadline_ ) ) ); address signer = ecrecover(digest, v_, r_, s_); require(signer != address(0) && signer == owner_, "ERC20: invalid signature"); _approve(owner_, spender_, value_); } /* _ _ */ /* _ ( )_ (_ ) */ /* (_) ___ | ,_) __ _ __ ___ _ _ | | */ /* | |/' _ `\| | /'__`\( '__)/' _ `\ /'_` ) | | */ /* | || ( ) || |_ ( ___/| | | ( ) |( (_| | | | */ /* (_)(_) (_)`\__)`\____)(_) (_) (_)`\__,_)(___) */ /// @notice Internal transfer helper. Throws if `value_` exceeds `from_` balance. function _transfer( address from_, address to_, uint256 value_ ) internal { require(balanceOf[from_] >= value_, "ERC20: insufficient balance"); _beforeTokenTransfer(from_, to_, value_); unchecked { balanceOf[from_] -= value_; balanceOf[to_] += value_; } emit Transfer(from_, to_, value_); _afterTokenTransfer(from_, to_, value_); } /// @notice Internal approve helper. function _approve( address owner_, address spender_, uint256 value_ ) internal { allowance[owner_][spender_] = value_; emit Approval(owner_, spender_, value_); } /// @notice Internal minting logic. function _mint(address to_, uint256 value_) internal { _beforeTokenTransfer(address(0), to_, value_); totalSupply += value_; unchecked { balanceOf[to_] += value_; } emit Transfer(address(0), to_, value_); _afterTokenTransfer(address(0), to_, value_); } /// @notice Internal burning logic. function _burn(address from_, uint256 value_) internal { _beforeTokenTransfer(from_, address(0), value_); require(balanceOf[from_] >= value_, "ERC20: burn value exceeds balance"); unchecked { balanceOf[from_] -= value_; totalSupply -= value_; } emit Transfer(from_, address(0), value_); _afterTokenTransfer(from_, address(0), value_); } /** * @notice EIP721 domain hashing helper. * @dev Modified from https://github.com/0xProject/0x-monorepo/blob/development/contracts/utils/contracts/src/LibEIP712.sol */ function _hashEIP712Domain( string memory name_, string memory version_, uint256 chainId_, address verifyingContract_ ) private pure returns (bytes32) { bytes32 result; assembly { // Calculate hashes of dynamic data let nameHash := keccak256(add(name_, 32), mload(name_)) let versionHash := keccak256(add(version_, 32), mload(version_)) // Load free memory pointer let memPtr := mload(64) // Store params in memory mstore(memPtr, 0x8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f) mstore(add(memPtr, 32), nameHash) mstore(add(memPtr, 64), versionHash) mstore(add(memPtr, 96), chainId_) mstore(add(memPtr, 128), verifyingContract_) // Compute hash result := keccak256(memPtr, 160) } return result; } /** * @notice EIP721 typed message hashing helper. * @dev Modified from https://github.com/0xProject/0x-monorepo/blob/development/contracts/utils/contracts/src/LibEIP712.sol */ function _hashEIP712Message(bytes32 domainSeparator_, bytes32 hash_) private pure returns (bytes32) { bytes32 result; assembly { // Load free memory pointer let memPtr := mload(64) mstore(memPtr, 0x1901000000000000000000000000000000000000000000000000000000000000) // EIP191 header mstore(add(memPtr, 2), domainSeparator_) // EIP712 domain hash mstore(add(memPtr, 34), hash_) // Hash of struct // Compute hash result := keccak256(memPtr, 66) } return result; } function _beforeTokenTransfer( address from, address to, uint256 value ) internal virtual {} function _afterTokenTransfer( address from, address to, uint256 value ) internal virtual {} }
// 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 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: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; import "../IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; import "../IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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); /** * @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); }
// 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 v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
{ "optimizer": { "enabled": true, "runs": 512 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"newApeRunners","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"airdroped","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"apeRunners","outputs":[{"internalType":"contract ERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender_","type":"address"},{"internalType":"uint256","name":"value_","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isController","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"spender_","type":"address"},{"internalType":"uint256","name":"value_","type":"uint256"},{"internalType":"uint256","name":"deadline_","type":"uint256"},{"internalType":"uint8","name":"v_","type":"uint8"},{"internalType":"bytes32","name":"r_","type":"bytes32"},{"internalType":"bytes32","name":"s_","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addrs","type":"address[]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setControllers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"togglePaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256","name":"value_","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from_","type":"address"},{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256","name":"value_","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60c06040523480156200001157600080fd5b50604051620019fe380380620019fe833981016040819052620000349162000213565b6040518060400160405280600b81526020016a4170652052756e6e65727360a81b81525060405180604001604052806003815260200162292aa760e91b8152506012604051806040016040528060018152602001603160f81b815250620000aa620000a46200011960201b60201c565b6200011d565b6000805460ff60a01b191690558351620000cc9060029060208701906200016d565b508251620000e29060039060208601906200016d565b5060ff82166080528051620000ff9060049060208401906200016d565b5050506001600160a01b0390921660a05250620002829050565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8280546200017b9062000245565b90600052602060002090601f0160209004810192826200019f5760008555620001ea565b82601f10620001ba57805160ff1916838001178555620001ea565b82800160010185558215620001ea579182015b82811115620001ea578251825591602001919060010190620001cd565b50620001f8929150620001fc565b5090565b5b80821115620001f85760008155600101620001fd565b6000602082840312156200022657600080fd5b81516001600160a01b03811681146200023e57600080fd5b9392505050565b600181811c908216806200025a57607f821691505b602082108114156200027c57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161174f620002af60003960008181610323015261083301526000610218015261174f6000f3fe608060405234801561001057600080fd5b50600436106101a35760003560e01c8063715018a6116100ee5780639dc29fac11610097578063b429afeb11610071578063b429afeb14610396578063d505accf146103c2578063dd62ed3e146103d5578063f2fde38b1461040057600080fd5b80639dc29fac1461034d578063a9059cbb14610360578063ae013aaa1461037357600080fd5b80638da5cb5b116100c85780638da5cb5b146102f957806391373cd51461031e57806395d89b411461034557600080fd5b8063715018a6146102be5780637e1c4542146102c65780637ecebe00146102d957600080fd5b806336566f06116101505780635c975abb1161012a5780635c975abb146102795780636ba4c1381461028b57806370a082311461029e57600080fd5b806336566f061461025457806340c10f191461025e57806354fd4d501461027157600080fd5b806323b872dd1161018157806323b872dd14610200578063313ce567146102135780633644e5151461024c57600080fd5b806306fdde03146101a8578063095ea7b3146101c657806318160ddd146101e9575b600080fd5b6101b0610413565b6040516101bd9190611328565b60405180910390f35b6101d96101d4366004611392565b6104a1565b60405190151581526020016101bd565b6101f260055481565b6040519081526020016101bd565b6101d961020e3660046113be565b6104b7565b61023a7f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016101bd565b6101f2610598565b61025c610711565b005b61025c61026c366004611392565b61078f565b6101b061080d565b600054600160a01b900460ff166101d9565b61025c610299366004611415565b61081a565b6101f26102ac3660046114d3565b60066020526000908152604090205481565b61025c610a29565b61025c6102d43660046114f7565b610a8d565b6101f26102e73660046114d3565b60086020526000908152604090205481565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016101bd565b6103067f000000000000000000000000000000000000000000000000000000000000000081565b6101b0610b59565b61025c61035b366004611392565b610b66565b6101d961036e366004611392565b610be0565b6101d9610381366004611582565b60096020526000908152604090205460ff1681565b6101d96103a43660046114d3565b6001600160a01b031660009081526001602052604090205460ff1690565b61025c6103d036600461159b565b610bed565b6101f26103e3366004611612565b600760209081526000928352604080842090915290825290205481565b61025c61040e3660046114d3565b610df9565b600280546104209061164b565b80601f016020809104026020016040519081016040528092919081815260200182805461044c9061164b565b80156104995780601f1061046e57610100808354040283529160200191610499565b820191906000526020600020905b81548152906001019060200180831161047c57829003601f168201915b505050505081565b60006104ae338484610ec4565b50600192915050565b6001600160a01b0383166000908152600760209081526040808320338452909152812054828110156105405760405162461bcd60e51b815260206004820152602760248201527f45524332303a20616c6c6f77616e63652065786365656473207472616e736665604482015266722076616c756560c81b60648201526084015b60405180910390fd5b6000198114610582576001600160a01b03851660009081526007602090815260408083203384529091528120805485929061057c90849061169c565b90915550505b61058d858585610f26565b506001949350505050565b600061070c600280546105aa9061164b565b80601f01602080910402602001604051908101604052809291908181526020018280546105d69061164b565b80156106235780601f106105f857610100808354040283529160200191610623565b820191906000526020600020905b81548152906001019060200180831161060657829003601f168201915b5050505050600480546106359061164b565b80601f01602080910402602001604051908101604052809291908181526020018280546106619061164b565b80156106ae5780601f10610683576101008083540402835291602001916106ae565b820191906000526020600020905b81548152906001019060200180831161069157829003601f168201915b505050505046308351602094850120835193850193909320604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815295860194909452928401929092526060830152608082015260a0902090565b905090565b6000546001600160a01b0316331461076b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610537565b600054600160a01b900460ff161561078757610785610ffb565b565b6107856110a1565b3360009081526001602052604090205460ff166107ff5760405162461bcd60e51b815260206004820152602860248201527f436f6e74726f6c6c61626c653a2043616c6c6572206973206e6f74206120636f604482015267373a3937b63632b960c11b6064820152608401610537565b6108098282611129565b5050565b600480546104209061164b565b6000805b8251811015610a1e57336001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636352211e858481518110610872576108726116b3565b60200260200101516040518263ffffffff1660e01b815260040161089891815260200190565b602060405180830381865afa1580156108b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d991906116c9565b6001600160a01b03161461092f5760405162461bcd60e51b815260206004820152601360248201527f4e6f742074686520746f6b656e206f776e6572000000000000000000000000006044820152606401610537565b60096000848381518110610945576109456116b3565b60209081029190910181015182528101919091526040016000205460ff16156109b05760405162461bcd60e51b815260206004820152601760248201527f41697264726f7020616c726561647920636c61696d65640000000000000000006044820152606401610537565b6001600960008584815181106109c8576109c86116b3565b6020026020010151815260200190815260200160002060006101000a81548160ff021916908315150217905550681043561a882930000082610a0a91906116e6565b915080610a16816116fe565b91505061081e565b506108093382611129565b6000546001600160a01b03163314610a835760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610537565b61078560006111a1565b6000546001600160a01b03163314610ae75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610537565b60005b82811015610b5357610b41848483818110610b0757610b076116b3565b9050602002016020810190610b1c91906114d3565b6001600160a01b03166000908152600160205260409020805460ff1916841515179055565b80610b4b816116fe565b915050610aea565b50505050565b600380546104209061164b565b3360009081526001602052604090205460ff16610bd65760405162461bcd60e51b815260206004820152602860248201527f436f6e74726f6c6c61626c653a2043616c6c6572206973206e6f74206120636f604482015267373a3937b63632b960c11b6064820152608401610537565b61080982826111fe565b60006104ae338484610f26565b42841015610c3d5760405162461bcd60e51b815260206004820152601e60248201527f45524332303a2065787069726564207065726d697420646561646c696e6500006044820152606401610537565b6000610d09610c4a610598565b6001600160a01b038a16600090815260086020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928d928d928d92909190610c98836116fe565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810188905260e0016040516020818303038152906040528051906020012060405161190160f01b8152600281019290925260228201526042902090565b6040805160008082526020820180845284905260ff88169282019290925260608101869052608081018590529192509060019060a0016020604051602081039080840390855afa158015610d61573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590610d975750886001600160a01b0316816001600160a01b0316145b610de35760405162461bcd60e51b815260206004820152601860248201527f45524332303a20696e76616c6964207369676e617475726500000000000000006044820152606401610537565b610dee898989610ec4565b505050505050505050565b6000546001600160a01b03163314610e535760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610537565b6001600160a01b038116610eb85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610537565b610ec1816111a1565b50565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316600090815260066020526040902054811115610f8e5760405162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e636500000000006044820152606401610537565b610f998383836112d6565b6001600160a01b03808416600081815260066020526040808220805486900390559285168082529083902080548501905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610f199085815260200190565b600054600160a01b900460ff166110545760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610537565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600054600160a01b900460ff16156110ee5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610537565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586110843390565b611135600083836112d6565b806005600082825461114791906116e6565b90915550506001600160a01b0382166000818152600660209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61120a826000836112d6565b6001600160a01b03821660009081526006602052604090205481111561127c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2076616c756520657863656564732062616c616e636044820152606560f81b6064820152608401610537565b6001600160a01b038216600081815260066020908152604080832080548690039055600580548690039055518481529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611195565b600054600160a01b900460ff16156113235760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610537565b505050565b600060208083528351808285015260005b8181101561135557858101830151858201604001528201611339565b81811115611367576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610ec157600080fd5b600080604083850312156113a557600080fd5b82356113b08161137d565b946020939093013593505050565b6000806000606084860312156113d357600080fd5b83356113de8161137d565b925060208401356113ee8161137d565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b6000602080838503121561142857600080fd5b823567ffffffffffffffff8082111561144057600080fd5b818501915085601f83011261145457600080fd5b813581811115611466576114666113ff565b8060051b604051601f19603f8301168101818110858211171561148b5761148b6113ff565b6040529182528482019250838101850191888311156114a957600080fd5b938501935b828510156114c7578435845293850193928501926114ae565b98975050505050505050565b6000602082840312156114e557600080fd5b81356114f08161137d565b9392505050565b60008060006040848603121561150c57600080fd5b833567ffffffffffffffff8082111561152457600080fd5b818601915086601f83011261153857600080fd5b81358181111561154757600080fd5b8760208260051b850101111561155c57600080fd5b60209283019550935050840135801515811461157757600080fd5b809150509250925092565b60006020828403121561159457600080fd5b5035919050565b600080600080600080600060e0888a0312156115b657600080fd5b87356115c18161137d565b965060208801356115d18161137d565b95506040880135945060608801359350608088013560ff811681146115f557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561162557600080fd5b82356116308161137d565b915060208301356116408161137d565b809150509250929050565b600181811c9082168061165f57607f821691505b6020821081141561168057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156116ae576116ae611686565b500390565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156116db57600080fd5b81516114f08161137d565b600082198211156116f9576116f9611686565b500190565b600060001982141561171257611712611686565b506001019056fea26469706673582212200870030cf21ef35a27d08189c7c34f6e6f9f24296fad48f7e6a93436eb1c8f6364736f6c634300080b003300000000000000000000000023d29535dd1a10d8783f76a5bd32c860262b8191
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101a35760003560e01c8063715018a6116100ee5780639dc29fac11610097578063b429afeb11610071578063b429afeb14610396578063d505accf146103c2578063dd62ed3e146103d5578063f2fde38b1461040057600080fd5b80639dc29fac1461034d578063a9059cbb14610360578063ae013aaa1461037357600080fd5b80638da5cb5b116100c85780638da5cb5b146102f957806391373cd51461031e57806395d89b411461034557600080fd5b8063715018a6146102be5780637e1c4542146102c65780637ecebe00146102d957600080fd5b806336566f06116101505780635c975abb1161012a5780635c975abb146102795780636ba4c1381461028b57806370a082311461029e57600080fd5b806336566f061461025457806340c10f191461025e57806354fd4d501461027157600080fd5b806323b872dd1161018157806323b872dd14610200578063313ce567146102135780633644e5151461024c57600080fd5b806306fdde03146101a8578063095ea7b3146101c657806318160ddd146101e9575b600080fd5b6101b0610413565b6040516101bd9190611328565b60405180910390f35b6101d96101d4366004611392565b6104a1565b60405190151581526020016101bd565b6101f260055481565b6040519081526020016101bd565b6101d961020e3660046113be565b6104b7565b61023a7f000000000000000000000000000000000000000000000000000000000000001281565b60405160ff90911681526020016101bd565b6101f2610598565b61025c610711565b005b61025c61026c366004611392565b61078f565b6101b061080d565b600054600160a01b900460ff166101d9565b61025c610299366004611415565b61081a565b6101f26102ac3660046114d3565b60066020526000908152604090205481565b61025c610a29565b61025c6102d43660046114f7565b610a8d565b6101f26102e73660046114d3565b60086020526000908152604090205481565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016101bd565b6103067f00000000000000000000000023d29535dd1a10d8783f76a5bd32c860262b819181565b6101b0610b59565b61025c61035b366004611392565b610b66565b6101d961036e366004611392565b610be0565b6101d9610381366004611582565b60096020526000908152604090205460ff1681565b6101d96103a43660046114d3565b6001600160a01b031660009081526001602052604090205460ff1690565b61025c6103d036600461159b565b610bed565b6101f26103e3366004611612565b600760209081526000928352604080842090915290825290205481565b61025c61040e3660046114d3565b610df9565b600280546104209061164b565b80601f016020809104026020016040519081016040528092919081815260200182805461044c9061164b565b80156104995780601f1061046e57610100808354040283529160200191610499565b820191906000526020600020905b81548152906001019060200180831161047c57829003601f168201915b505050505081565b60006104ae338484610ec4565b50600192915050565b6001600160a01b0383166000908152600760209081526040808320338452909152812054828110156105405760405162461bcd60e51b815260206004820152602760248201527f45524332303a20616c6c6f77616e63652065786365656473207472616e736665604482015266722076616c756560c81b60648201526084015b60405180910390fd5b6000198114610582576001600160a01b03851660009081526007602090815260408083203384529091528120805485929061057c90849061169c565b90915550505b61058d858585610f26565b506001949350505050565b600061070c600280546105aa9061164b565b80601f01602080910402602001604051908101604052809291908181526020018280546105d69061164b565b80156106235780601f106105f857610100808354040283529160200191610623565b820191906000526020600020905b81548152906001019060200180831161060657829003601f168201915b5050505050600480546106359061164b565b80601f01602080910402602001604051908101604052809291908181526020018280546106619061164b565b80156106ae5780601f10610683576101008083540402835291602001916106ae565b820191906000526020600020905b81548152906001019060200180831161069157829003601f168201915b505050505046308351602094850120835193850193909320604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815295860194909452928401929092526060830152608082015260a0902090565b905090565b6000546001600160a01b0316331461076b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610537565b600054600160a01b900460ff161561078757610785610ffb565b565b6107856110a1565b3360009081526001602052604090205460ff166107ff5760405162461bcd60e51b815260206004820152602860248201527f436f6e74726f6c6c61626c653a2043616c6c6572206973206e6f74206120636f604482015267373a3937b63632b960c11b6064820152608401610537565b6108098282611129565b5050565b600480546104209061164b565b6000805b8251811015610a1e57336001600160a01b03167f00000000000000000000000023d29535dd1a10d8783f76a5bd32c860262b81916001600160a01b0316636352211e858481518110610872576108726116b3565b60200260200101516040518263ffffffff1660e01b815260040161089891815260200190565b602060405180830381865afa1580156108b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d991906116c9565b6001600160a01b03161461092f5760405162461bcd60e51b815260206004820152601360248201527f4e6f742074686520746f6b656e206f776e6572000000000000000000000000006044820152606401610537565b60096000848381518110610945576109456116b3565b60209081029190910181015182528101919091526040016000205460ff16156109b05760405162461bcd60e51b815260206004820152601760248201527f41697264726f7020616c726561647920636c61696d65640000000000000000006044820152606401610537565b6001600960008584815181106109c8576109c86116b3565b6020026020010151815260200190815260200160002060006101000a81548160ff021916908315150217905550681043561a882930000082610a0a91906116e6565b915080610a16816116fe565b91505061081e565b506108093382611129565b6000546001600160a01b03163314610a835760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610537565b61078560006111a1565b6000546001600160a01b03163314610ae75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610537565b60005b82811015610b5357610b41848483818110610b0757610b076116b3565b9050602002016020810190610b1c91906114d3565b6001600160a01b03166000908152600160205260409020805460ff1916841515179055565b80610b4b816116fe565b915050610aea565b50505050565b600380546104209061164b565b3360009081526001602052604090205460ff16610bd65760405162461bcd60e51b815260206004820152602860248201527f436f6e74726f6c6c61626c653a2043616c6c6572206973206e6f74206120636f604482015267373a3937b63632b960c11b6064820152608401610537565b61080982826111fe565b60006104ae338484610f26565b42841015610c3d5760405162461bcd60e51b815260206004820152601e60248201527f45524332303a2065787069726564207065726d697420646561646c696e6500006044820152606401610537565b6000610d09610c4a610598565b6001600160a01b038a16600090815260086020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928d928d928d92909190610c98836116fe565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810188905260e0016040516020818303038152906040528051906020012060405161190160f01b8152600281019290925260228201526042902090565b6040805160008082526020820180845284905260ff88169282019290925260608101869052608081018590529192509060019060a0016020604051602081039080840390855afa158015610d61573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590610d975750886001600160a01b0316816001600160a01b0316145b610de35760405162461bcd60e51b815260206004820152601860248201527f45524332303a20696e76616c6964207369676e617475726500000000000000006044820152606401610537565b610dee898989610ec4565b505050505050505050565b6000546001600160a01b03163314610e535760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610537565b6001600160a01b038116610eb85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610537565b610ec1816111a1565b50565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316600090815260066020526040902054811115610f8e5760405162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e636500000000006044820152606401610537565b610f998383836112d6565b6001600160a01b03808416600081815260066020526040808220805486900390559285168082529083902080548501905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610f199085815260200190565b600054600160a01b900460ff166110545760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610537565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600054600160a01b900460ff16156110ee5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610537565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586110843390565b611135600083836112d6565b806005600082825461114791906116e6565b90915550506001600160a01b0382166000818152600660209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61120a826000836112d6565b6001600160a01b03821660009081526006602052604090205481111561127c5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2076616c756520657863656564732062616c616e636044820152606560f81b6064820152608401610537565b6001600160a01b038216600081815260066020908152604080832080548690039055600580548690039055518481529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611195565b600054600160a01b900460ff16156113235760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610537565b505050565b600060208083528351808285015260005b8181101561135557858101830151858201604001528201611339565b81811115611367576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610ec157600080fd5b600080604083850312156113a557600080fd5b82356113b08161137d565b946020939093013593505050565b6000806000606084860312156113d357600080fd5b83356113de8161137d565b925060208401356113ee8161137d565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b6000602080838503121561142857600080fd5b823567ffffffffffffffff8082111561144057600080fd5b818501915085601f83011261145457600080fd5b813581811115611466576114666113ff565b8060051b604051601f19603f8301168101818110858211171561148b5761148b6113ff565b6040529182528482019250838101850191888311156114a957600080fd5b938501935b828510156114c7578435845293850193928501926114ae565b98975050505050505050565b6000602082840312156114e557600080fd5b81356114f08161137d565b9392505050565b60008060006040848603121561150c57600080fd5b833567ffffffffffffffff8082111561152457600080fd5b818601915086601f83011261153857600080fd5b81358181111561154757600080fd5b8760208260051b850101111561155c57600080fd5b60209283019550935050840135801515811461157757600080fd5b809150509250925092565b60006020828403121561159457600080fd5b5035919050565b600080600080600080600060e0888a0312156115b657600080fd5b87356115c18161137d565b965060208801356115d18161137d565b95506040880135945060608801359350608088013560ff811681146115f557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561162557600080fd5b82356116308161137d565b915060208301356116408161137d565b809150509250929050565b600181811c9082168061165f57607f821691505b6020821081141561168057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156116ae576116ae611686565b500390565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156116db57600080fd5b81516114f08161137d565b600082198211156116f9576116f9611686565b500190565b600060001982141561171257611712611686565b506001019056fea26469706673582212200870030cf21ef35a27d08189c7c34f6e6f9f24296fad48f7e6a93436eb1c8f6364736f6c634300080b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000023d29535dd1a10d8783f76a5bd32c860262b8191
-----Decoded View---------------
Arg [0] : newApeRunners (address): 0x23d29535dd1a10D8783f76A5bD32C860262B8191
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000023d29535dd1a10d8783f76a5bd32c860262b8191
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.