More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,389 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Redeem | 21114161 | 22 days ago | IN | 0 ETH | 0.00046414 | ||||
Redeem | 21006741 | 37 days ago | IN | 0 ETH | 0.00077867 | ||||
Redeem | 21005696 | 37 days ago | IN | 0 ETH | 0.00083678 | ||||
Redeem | 20364713 | 126 days ago | IN | 0 ETH | 0.00090296 | ||||
Redeem | 20178534 | 152 days ago | IN | 0 ETH | 0.00076293 | ||||
Redeem | 19998572 | 177 days ago | IN | 0 ETH | 0.00186792 | ||||
Redeem | 19949304 | 184 days ago | IN | 0 ETH | 0.00038594 | ||||
Redeem | 19920119 | 188 days ago | IN | 0 ETH | 0.00147185 | ||||
Redeem | 19897355 | 192 days ago | IN | 0 ETH | 0.00036375 | ||||
Redeem | 19893847 | 192 days ago | IN | 0 ETH | 0.00025308 | ||||
Redeem | 19891580 | 192 days ago | IN | 0 ETH | 0.0003437 | ||||
Redeem | 19884858 | 193 days ago | IN | 0 ETH | 0.00031918 | ||||
Redeem | 19876011 | 195 days ago | IN | 0 ETH | 0.00255551 | ||||
Redeem | 19861383 | 197 days ago | IN | 0 ETH | 0.00216623 | ||||
Redeem | 19838010 | 200 days ago | IN | 0 ETH | 0.00056411 | ||||
Redeem | 19760523 | 211 days ago | IN | 0 ETH | 0.00093405 | ||||
Redeem | 19712235 | 218 days ago | IN | 0 ETH | 0.00148614 | ||||
Redeem | 19615556 | 231 days ago | IN | 0 ETH | 0.00517727 | ||||
Redeem | 19585622 | 235 days ago | IN | 0 ETH | 0.00265818 | ||||
Redeem | 19553636 | 240 days ago | IN | 0 ETH | 0.00198983 | ||||
Redeem | 19514351 | 245 days ago | IN | 0 ETH | 0.00314586 | ||||
Redeem | 19508532 | 246 days ago | IN | 0 ETH | 0.00163806 | ||||
Redeem | 19494491 | 248 days ago | IN | 0 ETH | 0.00148273 | ||||
Redeem | 19465269 | 252 days ago | IN | 0 ETH | 0.0023684 | ||||
Redeem | 19444903 | 255 days ago | IN | 0 ETH | 0.00326855 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
DustForPunksAllocator
Compiler Version
v0.7.5+commit.eb77ed08
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
//SPDX-License-Identifier: Unlicensed /*** * ███████ ██ ██ ███████ ██████ ██ ██ ██████ ███ ██ ███████ ██████ ███████ ████████ ███████ * ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ████ ██ ██ ██ ██ ██ ██ * █████ ██ ██ █████ ██████ ████ ██ ██ ██ ██ ██ █████ ██ ███ █████ ██ ███████ * ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ * ███████ ████ ███████ ██ ██ ██ ██████ ██ ████ ███████ ██████ ███████ ██ ███████ * * * ███████ ██████ ███ ███ ███████ ██████ ██ ██ ███████ ████████ * ██ ██ ██ ████ ████ ██ ██ ██ ██ ██ ██ ██ * ███████ ██ ██ ██ ████ ██ █████ ██ ██ ██ ██ ███████ ██ * ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ * ███████ ██████ ██ ██ ███████ ██████ ██████ ███████ ██ * * * ETHER.CARDS - DUST TOKEN ALLOCATOR for PUNKS * */ pragma solidity >=0.6.0 <0.8.0; pragma abicoder v2; import "@openzeppelin/contracts/math/SafeMath.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@openzeppelin/contracts/token/ERC777/IERC777.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; contract DustForPunksAllocator is Ownable { using SafeMath for uint256; mapping(uint8 => uint256) public cardTypeAmounts; mapping(uint16 => uint8) internal tokenData; IERC721 public erc721; // Ether Cards IERC20 public erc20; // Dust bool public locked; uint256 public unlockTime; event Redeemed(uint16 tokenId); event Skipped(uint16 tokenId); constructor(address _erc721, address _erc20) { erc721 = IERC721(_erc721); erc20 = IERC20(_erc20); // set card type values cardTypeAmounts[1] = 100000 ether; cardTypeAmounts[2] = 10000 ether; cardTypeAmounts[3] = 1000 ether; // Mon Oct 04 2021 13:00:00 GMT+0000 unlockTime = 1633352400; } function redeem(uint16[] calldata _tokenIds) public { require(!locked && getBlockTimestamp() > unlockTime, "Contract locked"); uint256 totalAmount; for(uint8 i = 0; i < _tokenIds.length; i++) { uint16 _tokenId = _tokenIds[i]; require(erc721.ownerOf(_tokenId) == msg.sender, "ERC721: not owner of token"); if(!isTokenUsed(_tokenId)) { totalAmount = totalAmount.add( cardTypeAmounts[getCardTypeFromId(_tokenId)] ); setTokenUsed(_tokenId); emit Redeemed(_tokenId); } else { emit Skipped(_tokenId); } } erc20.transfer(msg.sender, totalAmount); } function getAvailableBalance(uint16[] calldata _tokenIds) external view returns (uint256 balance) { for(uint8 i = 0; i < _tokenIds.length; i++) { uint16 _tokenId = _tokenIds[i]; if(!isTokenUsed(_tokenId)) { balance = balance.add( cardTypeAmounts[getCardTypeFromId(_tokenId)] ); } } } function getCardTypeFromId(uint16 _tokenId) public pure returns (uint8 _cardType) { if(_tokenId < 10) { revert("CardType not allowed"); } if(_tokenId < 100) { return 1; } if (_tokenId < 1000) { return 2; } if (_tokenId < 10000) { return 3; } revert("CardType not found"); } function toggleLocked () public onlyOwner { locked = !locked; } function removeUnlockTime () public onlyOwner { unlockTime = block.timestamp; } function getBlockTimestamp() public view virtual returns (uint256) { return block.timestamp; } function isTokenUsed(uint16 _position) public view returns (bool result) { uint16 byteNum = uint16(_position / 8); uint16 bitPos = uint8(_position - byteNum * 8); if (tokenData[byteNum] == 0) return false; return tokenData[byteNum] & (0x01 * 2**bitPos) != 0; } function setTokenUsed(uint16 _position) internal { uint16 byteNum = uint16(_position / 8); uint16 bitPos = uint8(_position - byteNum * 8); tokenData[byteNum] = uint8(tokenData[byteNum] | (2**bitPos)); } /// web3 Frontend - VIEW METHODS // 0 - 1250 to get all 10k records function getUsedTokenData(uint8 _page, uint16 _perPage) public view returns (uint8[] memory) { _perPage = _perPage / 8; uint16 i = _perPage * _page; uint16 max = i + (_perPage); uint16 j = 0; uint8[] memory retValues; assembly { mstore(retValues, _perPage) } while (i < max) { retValues[j] = tokenData[i]; j++; i++; } assembly { // move pointer to freespace otherwise return calldata gets messed up mstore(0x40, msize()) } return retValues; } // blackhole prevention methods function retrieveERC20(address _tracker, uint256 amount) external onlyOwner { IERC20(_tracker).transfer(msg.sender, amount); } function retrieve721(address _tracker, uint256 id) external onlyOwner { IERC721(_tracker).transferFrom(address(this), msg.sender, id); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <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 () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), 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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.2 <0.8.0; import "../../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 pragma solidity >=0.6.0 <0.8.0; /** * @dev Interface of the ERC777Token standard as defined in the EIP. * * This contract uses the * https://eips.ethereum.org/EIPS/eip-1820[ERC1820 registry standard] to let * token holders and recipients react to token movements by using setting implementers * for the associated interfaces in said registry. See {IERC1820Registry} and * {ERC1820Implementer}. */ interface IERC777 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() external view returns (string memory); /** * @dev Returns the smallest part of the token that is not divisible. This * means all token operations (creation, movement and destruction) must have * amounts that are a multiple of this number. * * For most token contracts, this value will equal 1. */ function granularity() external view returns (uint256); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by an account (`owner`). */ function balanceOf(address owner) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * If send or receive hooks are registered for the caller and `recipient`, * the corresponding functions will be called with `data` and empty * `operatorData`. See {IERC777Sender} and {IERC777Recipient}. * * Emits a {Sent} event. * * Requirements * * - the caller must have at least `amount` tokens. * - `recipient` cannot be the zero address. * - if `recipient` is a contract, it must implement the {IERC777Recipient} * interface. */ function send(address recipient, uint256 amount, bytes calldata data) external; /** * @dev Destroys `amount` tokens from the caller's account, reducing the * total supply. * * If a send hook is registered for the caller, the corresponding function * will be called with `data` and empty `operatorData`. See {IERC777Sender}. * * Emits a {Burned} event. * * Requirements * * - the caller must have at least `amount` tokens. */ function burn(uint256 amount, bytes calldata data) external; /** * @dev Returns true if an account is an operator of `tokenHolder`. * Operators can send and burn tokens on behalf of their owners. All * accounts are their own operator. * * See {operatorSend} and {operatorBurn}. */ function isOperatorFor(address operator, address tokenHolder) external view returns (bool); /** * @dev Make an account an operator of the caller. * * See {isOperatorFor}. * * Emits an {AuthorizedOperator} event. * * Requirements * * - `operator` cannot be calling address. */ function authorizeOperator(address operator) external; /** * @dev Revoke an account's operator status for the caller. * * See {isOperatorFor} and {defaultOperators}. * * Emits a {RevokedOperator} event. * * Requirements * * - `operator` cannot be calling address. */ function revokeOperator(address operator) external; /** * @dev Returns the list of default operators. These accounts are operators * for all token holders, even if {authorizeOperator} was never called on * them. * * This list is immutable, but individual holders may revoke these via * {revokeOperator}, in which case {isOperatorFor} will return false. */ function defaultOperators() external view returns (address[] memory); /** * @dev Moves `amount` tokens from `sender` to `recipient`. The caller must * be an operator of `sender`. * * If send or receive hooks are registered for `sender` and `recipient`, * the corresponding functions will be called with `data` and * `operatorData`. See {IERC777Sender} and {IERC777Recipient}. * * Emits a {Sent} event. * * Requirements * * - `sender` cannot be the zero address. * - `sender` must have at least `amount` tokens. * - the caller must be an operator for `sender`. * - `recipient` cannot be the zero address. * - if `recipient` is a contract, it must implement the {IERC777Recipient} * interface. */ function operatorSend( address sender, address recipient, uint256 amount, bytes calldata data, bytes calldata operatorData ) external; /** * @dev Destroys `amount` tokens from `account`, reducing the total supply. * The caller must be an operator of `account`. * * If a send hook is registered for `account`, the corresponding function * will be called with `data` and `operatorData`. See {IERC777Sender}. * * Emits a {Burned} event. * * Requirements * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. * - the caller must be an operator for `account`. */ function operatorBurn( address account, uint256 amount, bytes calldata data, bytes calldata operatorData ) external; event Sent( address indexed operator, address indexed from, address indexed to, uint256 amount, bytes data, bytes operatorData ); event Minted(address indexed operator, address indexed to, uint256 amount, bytes data, bytes operatorData); event Burned(address indexed operator, address indexed from, uint256 amount, bytes data, bytes operatorData); event AuthorizedOperator(address indexed operator, address indexed tokenHolder); event RevokedOperator(address indexed operator, address indexed tokenHolder); }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <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 `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, 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 `sender` to `recipient` 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 sender, address recipient, 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 pragma solidity >=0.6.0 <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 GSN 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 payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <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": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_erc721","type":"address"},{"internalType":"address","name":"_erc20","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"uint16","name":"tokenId","type":"uint16"}],"name":"Redeemed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"tokenId","type":"uint16"}],"name":"Skipped","type":"event"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"cardTypeAmounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"erc20","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"erc721","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"_tokenIds","type":"uint16[]"}],"name":"getAvailableBalance","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBlockTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_tokenId","type":"uint16"}],"name":"getCardTypeFromId","outputs":[{"internalType":"uint8","name":"_cardType","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint8","name":"_page","type":"uint8"},{"internalType":"uint16","name":"_perPage","type":"uint16"}],"name":"getUsedTokenData","outputs":[{"internalType":"uint8[]","name":"","type":"uint8[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_position","type":"uint16"}],"name":"isTokenUsed","outputs":[{"internalType":"bool","name":"result","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"locked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"_tokenIds","type":"uint16[]"}],"name":"redeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeUnlockTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tracker","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"retrieve721","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tracker","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"retrieveERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleLocked","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162001d5438038062001d5483398181016040528101906200003791906200020c565b600062000049620001ed60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555069152d02c7e14af680000060016000600160ff1681526020019081526020016000208190555069021e19e0c9bab240000060016000600260ff16815260200190815260200160002081905550683635c9adc5dea0000060016000600360ff1681526020019081526020016000208190555063615afad060058190555050506200029b565b600033905090565b600081519050620002068162000281565b92915050565b600080604083850312156200022057600080fd5b60006200023085828601620001f5565b92505060206200024385828601620001f5565b9150509250929050565b60006200025a8262000261565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6200028c816200024d565b81146200029857600080fd5b50565b611aa980620002ab6000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c8063796b89b9116100a2578063bca6ce6411610071578063bca6ce6414610295578063c9c2c570146102b3578063cf309012146102e3578063da90e8b714610301578063f2fde38b1461033157610116565b8063796b89b914610221578063854d5a4e1461023f5780638da5cb5b1461025b578063a5b3abfb1461027957610116565b806347a8aa90116100e957806347a8aa901461018f57806351328984146101bf578063715018a6146101c957806376d76d3b146101d3578063785e9e861461020357610116565b806301b117921461011b5780630d1bc6311461012557806317fd1e2f14610155578063251c1aa314610171575b600080fd5b61012361034d565b005b61013f600480360381019061013a9190611429565b610428565b60405161014c9190611760565b60405180910390f35b61016f600480360381019061016a919061137f565b6104ce565b005b61017961060f565b6040516101869190611867565b60405180910390f35b6101a960048036038101906101a49190611429565b610615565b6040516101b69190611882565b60405180910390f35b6101c76106e3565b005b6101d161079b565b005b6101ed60048036038101906101e8919061147b565b610908565b6040516101fa919061173e565b60405180910390f35b61020b6109b7565b604051610218919061177b565b60405180910390f35b6102296109dd565b6040516102369190611867565b60405180910390f35b610259600480360381019061025491906113bb565b6109e5565b005b610263610d23565b60405161027091906116c3565b60405180910390f35b610293600480360381019061028e919061137f565b610d4c565b005b61029d610e6e565b6040516102aa9190611796565b60405180910390f35b6102cd60048036038101906102c89190611452565b610e94565b6040516102da9190611867565b60405180910390f35b6102eb610eac565b6040516102f89190611760565b60405180910390f35b61031b600480360381019061031691906113bb565b610ebf565b6040516103289190611867565b60405180910390f35b61034b6004803603810190610346919061132d565b610f56565b005b610355611148565b73ffffffffffffffffffffffffffffffffffffffff16610373610d23565b73ffffffffffffffffffffffffffffffffffffffff16146103fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600460149054906101000a900460ff1615600460146101000a81548160ff021916908315150217905550565b60008060088361ffff168161043957fe5b049050600060088202840360ff1690506000600260008461ffff1661ffff16815260200190815260200160002060009054906101000a900460ff1660ff161415610488576000925050506104c9565b60008161ffff1660020a600102600260008561ffff1661ffff16815260200190815260200160002060009054906101000a900460ff1660ff16161415925050505b919050565b6104d6611148565b73ffffffffffffffffffffffffffffffffffffffff166104f4610d23565b73ffffffffffffffffffffffffffffffffffffffff161461057d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016105b89291906116de565b602060405180830381600087803b1580156105d257600080fd5b505af11580156105e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060a9190611400565b505050565b60055481565b6000600a8261ffff16101561065f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610656906117b1565b60405180910390fd5b60648261ffff16101561067557600190506106de565b6103e88261ffff16101561068c57600290506106de565b6127108261ffff1610156106a357600390506106de565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d5906117f1565b60405180910390fd5b919050565b6106eb611148565b73ffffffffffffffffffffffffffffffffffffffff16610709610d23565b73ffffffffffffffffffffffffffffffffffffffff1614610792576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b42600581905550565b6107a3611148565b73ffffffffffffffffffffffffffffffffffffffff166107c1610d23565b73ffffffffffffffffffffffffffffffffffffffff161461084a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b606060088261ffff168161091857fe5b04915060008360ff168302905060008382019050600060608581525b8261ffff168461ffff1610156109a657600260008561ffff1661ffff16815260200190815260200160002060009054906101000a900460ff16818361ffff168151811061097d57fe5b602002602001019060ff16908160ff168152505081806001019250508380600101945050610934565b596040528094505050505092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600042905090565b600460149054906101000a900460ff16158015610a0a5750600554610a086109dd565b115b610a49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a40906117d1565b60405180910390fd5b600080600090505b838390508160ff161015610c6d57600084848360ff16818110610a7057fe5b9050602002016020810190610a859190611429565b90503373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610af9919061184c565b60206040518083038186803b158015610b1157600080fd5b505afa158015610b25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b499190611356565b73ffffffffffffffffffffffffffffffffffffffff1614610b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9690611811565b60405180910390fd5b610ba881610428565b610c2757610be060016000610bbc84610615565b60ff1660ff168152602001908152602001600020548461115090919063ffffffff16565b9250610beb816111d8565b7f8357b7cc123a6e8fe3739217d8a978c9ce32211b7ffe2799cf67dd211ed93ce081604051610c1a9190611831565b60405180910390a1610c5f565b7f0af875050dac9daa78c864b492f6180ca5886897dc0421e62dbded38509d1e6f81604051610c569190611831565b60405180910390a15b508080600101915050610a51565b50600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610ccb9291906116de565b602060405180830381600087803b158015610ce557600080fd5b505af1158015610cf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1d9190611400565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610d54611148565b73ffffffffffffffffffffffffffffffffffffffff16610d72610d23565b73ffffffffffffffffffffffffffffffffffffffff1614610dfb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166323b872dd3033846040518463ffffffff1660e01b8152600401610e3893929190611707565b600060405180830381600087803b158015610e5257600080fd5b505af1158015610e66573d6000803e3d6000fd5b505050505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016020528060005260406000206000915090505481565b600460149054906101000a900460ff1681565b600080600090505b838390508160ff161015610f4f57600084848360ff16818110610ee657fe5b9050602002016020810190610efb9190611429565b9050610f0681610428565b610f4157610f3e60016000610f1a84610615565b60ff1660ff168152602001908152602001600020548461115090919063ffffffff16565b92505b508080600101915050610ec7565b5092915050565b610f5e611148565b73ffffffffffffffffffffffffffffffffffffffff16610f7c610d23565b73ffffffffffffffffffffffffffffffffffffffff1614611005576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561108b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180611a4e6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b6000808284019050838110156111ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600060088261ffff16816111e857fe5b049050600060088202830360ff1690508061ffff1660020a600260008461ffff1661ffff16815260200190815260200160002060009054906101000a900460ff1660ff1617600260008461ffff1661ffff16815260200190815260200160002060006101000a81548160ff021916908360ff160217905550505050565b600081359050611274816119da565b92915050565b600081519050611289816119da565b92915050565b60008083601f8401126112a157600080fd5b8235905067ffffffffffffffff8111156112ba57600080fd5b6020830191508360208202830111156112d257600080fd5b9250929050565b6000815190506112e8816119f1565b92915050565b6000813590506112fd81611a08565b92915050565b60008135905061131281611a1f565b92915050565b60008135905061132781611a36565b92915050565b60006020828403121561133f57600080fd5b600061134d84828501611265565b91505092915050565b60006020828403121561136857600080fd5b60006113768482850161127a565b91505092915050565b6000806040838503121561139257600080fd5b60006113a085828601611265565b92505060206113b185828601611303565b9150509250929050565b600080602083850312156113ce57600080fd5b600083013567ffffffffffffffff8111156113e857600080fd5b6113f48582860161128f565b92509250509250929050565b60006020828403121561141257600080fd5b6000611420848285016112d9565b91505092915050565b60006020828403121561143b57600080fd5b6000611449848285016112ee565b91505092915050565b60006020828403121561146457600080fd5b600061147284828501611318565b91505092915050565b6000806040838503121561148e57600080fd5b600061149c85828601611318565b92505060206114ad858286016112ee565b9150509250929050565b60006114c383836116a5565b60208301905092915050565b6114d88161194a565b82525050565b6114e7816118e7565b82525050565b60006114f8826118ad565b61150281856118c5565b935061150d8361189d565b8060005b8381101561153e57815161152588826114b7565b9750611530836118b8565b925050600181019050611511565b5085935050505092915050565b611554816118f9565b82525050565b6115638161195c565b82525050565b61157281611980565b82525050565b60006115856014836118d6565b91507f4361726454797065206e6f7420616c6c6f7765640000000000000000000000006000830152602082019050919050565b60006115c5600f836118d6565b91507f436f6e7472616374206c6f636b656400000000000000000000000000000000006000830152602082019050919050565b60006116056012836118d6565b91507f4361726454797065206e6f7420666f756e6400000000000000000000000000006000830152602082019050919050565b6000611645601a836118d6565b91507f4552433732313a206e6f74206f776e6572206f6620746f6b656e0000000000006000830152602082019050919050565b61168181611905565b82525050565b611690816119c8565b82525050565b61169f81611933565b82525050565b6116ae8161193d565b82525050565b6116bd8161193d565b82525050565b60006020820190506116d860008301846114de565b92915050565b60006040820190506116f360008301856114cf565b6117006020830184611696565b9392505050565b600060608201905061171c60008301866114de565b61172960208301856114cf565b6117366040830184611696565b949350505050565b6000602082019050818103600083015261175881846114ed565b905092915050565b6000602082019050611775600083018461154b565b92915050565b6000602082019050611790600083018461155a565b92915050565b60006020820190506117ab6000830184611569565b92915050565b600060208201905081810360008301526117ca81611578565b9050919050565b600060208201905081810360008301526117ea816115b8565b9050919050565b6000602082019050818103600083015261180a816115f8565b9050919050565b6000602082019050818103600083015261182a81611638565b9050919050565b60006020820190506118466000830184611678565b92915050565b60006020820190506118616000830184611687565b92915050565b600060208201905061187c6000830184611696565b92915050565b600060208201905061189760008301846116b4565b92915050565b6000819050602082019050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006118f282611913565b9050919050565b60008115159050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000611955826119a4565b9050919050565b60006119678261196e565b9050919050565b600061197982611913565b9050919050565b600061198b82611992565b9050919050565b600061199d82611913565b9050919050565b60006119af826119b6565b9050919050565b60006119c182611913565b9050919050565b60006119d382611905565b9050919050565b6119e3816118e7565b81146119ee57600080fd5b50565b6119fa816118f9565b8114611a0557600080fd5b50565b611a1181611905565b8114611a1c57600080fd5b50565b611a2881611933565b8114611a3357600080fd5b50565b611a3f8161193d565b8114611a4a57600080fd5b5056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a264697066735822122053b4ddd95eb9cb8874a67987b0f4ee85ba618bb12964b31df04a7806a13c2bed64736f6c6343000705003300000000000000000000000097ca7fe0b0288f5eb85f386fed876618fb9b8ab8000000000000000000000000e2e109f1b4eaa8915655fe8fdefc112a34acc5f0
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101165760003560e01c8063796b89b9116100a2578063bca6ce6411610071578063bca6ce6414610295578063c9c2c570146102b3578063cf309012146102e3578063da90e8b714610301578063f2fde38b1461033157610116565b8063796b89b914610221578063854d5a4e1461023f5780638da5cb5b1461025b578063a5b3abfb1461027957610116565b806347a8aa90116100e957806347a8aa901461018f57806351328984146101bf578063715018a6146101c957806376d76d3b146101d3578063785e9e861461020357610116565b806301b117921461011b5780630d1bc6311461012557806317fd1e2f14610155578063251c1aa314610171575b600080fd5b61012361034d565b005b61013f600480360381019061013a9190611429565b610428565b60405161014c9190611760565b60405180910390f35b61016f600480360381019061016a919061137f565b6104ce565b005b61017961060f565b6040516101869190611867565b60405180910390f35b6101a960048036038101906101a49190611429565b610615565b6040516101b69190611882565b60405180910390f35b6101c76106e3565b005b6101d161079b565b005b6101ed60048036038101906101e8919061147b565b610908565b6040516101fa919061173e565b60405180910390f35b61020b6109b7565b604051610218919061177b565b60405180910390f35b6102296109dd565b6040516102369190611867565b60405180910390f35b610259600480360381019061025491906113bb565b6109e5565b005b610263610d23565b60405161027091906116c3565b60405180910390f35b610293600480360381019061028e919061137f565b610d4c565b005b61029d610e6e565b6040516102aa9190611796565b60405180910390f35b6102cd60048036038101906102c89190611452565b610e94565b6040516102da9190611867565b60405180910390f35b6102eb610eac565b6040516102f89190611760565b60405180910390f35b61031b600480360381019061031691906113bb565b610ebf565b6040516103289190611867565b60405180910390f35b61034b6004803603810190610346919061132d565b610f56565b005b610355611148565b73ffffffffffffffffffffffffffffffffffffffff16610373610d23565b73ffffffffffffffffffffffffffffffffffffffff16146103fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600460149054906101000a900460ff1615600460146101000a81548160ff021916908315150217905550565b60008060088361ffff168161043957fe5b049050600060088202840360ff1690506000600260008461ffff1661ffff16815260200190815260200160002060009054906101000a900460ff1660ff161415610488576000925050506104c9565b60008161ffff1660020a600102600260008561ffff1661ffff16815260200190815260200160002060009054906101000a900460ff1660ff16161415925050505b919050565b6104d6611148565b73ffffffffffffffffffffffffffffffffffffffff166104f4610d23565b73ffffffffffffffffffffffffffffffffffffffff161461057d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016105b89291906116de565b602060405180830381600087803b1580156105d257600080fd5b505af11580156105e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060a9190611400565b505050565b60055481565b6000600a8261ffff16101561065f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610656906117b1565b60405180910390fd5b60648261ffff16101561067557600190506106de565b6103e88261ffff16101561068c57600290506106de565b6127108261ffff1610156106a357600390506106de565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d5906117f1565b60405180910390fd5b919050565b6106eb611148565b73ffffffffffffffffffffffffffffffffffffffff16610709610d23565b73ffffffffffffffffffffffffffffffffffffffff1614610792576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b42600581905550565b6107a3611148565b73ffffffffffffffffffffffffffffffffffffffff166107c1610d23565b73ffffffffffffffffffffffffffffffffffffffff161461084a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b606060088261ffff168161091857fe5b04915060008360ff168302905060008382019050600060608581525b8261ffff168461ffff1610156109a657600260008561ffff1661ffff16815260200190815260200160002060009054906101000a900460ff16818361ffff168151811061097d57fe5b602002602001019060ff16908160ff168152505081806001019250508380600101945050610934565b596040528094505050505092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600042905090565b600460149054906101000a900460ff16158015610a0a5750600554610a086109dd565b115b610a49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a40906117d1565b60405180910390fd5b600080600090505b838390508160ff161015610c6d57600084848360ff16818110610a7057fe5b9050602002016020810190610a859190611429565b90503373ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610af9919061184c565b60206040518083038186803b158015610b1157600080fd5b505afa158015610b25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b499190611356565b73ffffffffffffffffffffffffffffffffffffffff1614610b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9690611811565b60405180910390fd5b610ba881610428565b610c2757610be060016000610bbc84610615565b60ff1660ff168152602001908152602001600020548461115090919063ffffffff16565b9250610beb816111d8565b7f8357b7cc123a6e8fe3739217d8a978c9ce32211b7ffe2799cf67dd211ed93ce081604051610c1a9190611831565b60405180910390a1610c5f565b7f0af875050dac9daa78c864b492f6180ca5886897dc0421e62dbded38509d1e6f81604051610c569190611831565b60405180910390a15b508080600101915050610a51565b50600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610ccb9291906116de565b602060405180830381600087803b158015610ce557600080fd5b505af1158015610cf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1d9190611400565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610d54611148565b73ffffffffffffffffffffffffffffffffffffffff16610d72610d23565b73ffffffffffffffffffffffffffffffffffffffff1614610dfb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166323b872dd3033846040518463ffffffff1660e01b8152600401610e3893929190611707565b600060405180830381600087803b158015610e5257600080fd5b505af1158015610e66573d6000803e3d6000fd5b505050505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016020528060005260406000206000915090505481565b600460149054906101000a900460ff1681565b600080600090505b838390508160ff161015610f4f57600084848360ff16818110610ee657fe5b9050602002016020810190610efb9190611429565b9050610f0681610428565b610f4157610f3e60016000610f1a84610615565b60ff1660ff168152602001908152602001600020548461115090919063ffffffff16565b92505b508080600101915050610ec7565b5092915050565b610f5e611148565b73ffffffffffffffffffffffffffffffffffffffff16610f7c610d23565b73ffffffffffffffffffffffffffffffffffffffff1614611005576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561108b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180611a4e6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b6000808284019050838110156111ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600060088261ffff16816111e857fe5b049050600060088202830360ff1690508061ffff1660020a600260008461ffff1661ffff16815260200190815260200160002060009054906101000a900460ff1660ff1617600260008461ffff1661ffff16815260200190815260200160002060006101000a81548160ff021916908360ff160217905550505050565b600081359050611274816119da565b92915050565b600081519050611289816119da565b92915050565b60008083601f8401126112a157600080fd5b8235905067ffffffffffffffff8111156112ba57600080fd5b6020830191508360208202830111156112d257600080fd5b9250929050565b6000815190506112e8816119f1565b92915050565b6000813590506112fd81611a08565b92915050565b60008135905061131281611a1f565b92915050565b60008135905061132781611a36565b92915050565b60006020828403121561133f57600080fd5b600061134d84828501611265565b91505092915050565b60006020828403121561136857600080fd5b60006113768482850161127a565b91505092915050565b6000806040838503121561139257600080fd5b60006113a085828601611265565b92505060206113b185828601611303565b9150509250929050565b600080602083850312156113ce57600080fd5b600083013567ffffffffffffffff8111156113e857600080fd5b6113f48582860161128f565b92509250509250929050565b60006020828403121561141257600080fd5b6000611420848285016112d9565b91505092915050565b60006020828403121561143b57600080fd5b6000611449848285016112ee565b91505092915050565b60006020828403121561146457600080fd5b600061147284828501611318565b91505092915050565b6000806040838503121561148e57600080fd5b600061149c85828601611318565b92505060206114ad858286016112ee565b9150509250929050565b60006114c383836116a5565b60208301905092915050565b6114d88161194a565b82525050565b6114e7816118e7565b82525050565b60006114f8826118ad565b61150281856118c5565b935061150d8361189d565b8060005b8381101561153e57815161152588826114b7565b9750611530836118b8565b925050600181019050611511565b5085935050505092915050565b611554816118f9565b82525050565b6115638161195c565b82525050565b61157281611980565b82525050565b60006115856014836118d6565b91507f4361726454797065206e6f7420616c6c6f7765640000000000000000000000006000830152602082019050919050565b60006115c5600f836118d6565b91507f436f6e7472616374206c6f636b656400000000000000000000000000000000006000830152602082019050919050565b60006116056012836118d6565b91507f4361726454797065206e6f7420666f756e6400000000000000000000000000006000830152602082019050919050565b6000611645601a836118d6565b91507f4552433732313a206e6f74206f776e6572206f6620746f6b656e0000000000006000830152602082019050919050565b61168181611905565b82525050565b611690816119c8565b82525050565b61169f81611933565b82525050565b6116ae8161193d565b82525050565b6116bd8161193d565b82525050565b60006020820190506116d860008301846114de565b92915050565b60006040820190506116f360008301856114cf565b6117006020830184611696565b9392505050565b600060608201905061171c60008301866114de565b61172960208301856114cf565b6117366040830184611696565b949350505050565b6000602082019050818103600083015261175881846114ed565b905092915050565b6000602082019050611775600083018461154b565b92915050565b6000602082019050611790600083018461155a565b92915050565b60006020820190506117ab6000830184611569565b92915050565b600060208201905081810360008301526117ca81611578565b9050919050565b600060208201905081810360008301526117ea816115b8565b9050919050565b6000602082019050818103600083015261180a816115f8565b9050919050565b6000602082019050818103600083015261182a81611638565b9050919050565b60006020820190506118466000830184611678565b92915050565b60006020820190506118616000830184611687565b92915050565b600060208201905061187c6000830184611696565b92915050565b600060208201905061189760008301846116b4565b92915050565b6000819050602082019050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006118f282611913565b9050919050565b60008115159050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000611955826119a4565b9050919050565b60006119678261196e565b9050919050565b600061197982611913565b9050919050565b600061198b82611992565b9050919050565b600061199d82611913565b9050919050565b60006119af826119b6565b9050919050565b60006119c182611913565b9050919050565b60006119d382611905565b9050919050565b6119e3816118e7565b81146119ee57600080fd5b50565b6119fa816118f9565b8114611a0557600080fd5b50565b611a1181611905565b8114611a1c57600080fd5b50565b611a2881611933565b8114611a3357600080fd5b50565b611a3f8161193d565b8114611a4a57600080fd5b5056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a264697066735822122053b4ddd95eb9cb8874a67987b0f4ee85ba618bb12964b31df04a7806a13c2bed64736f6c63430007050033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000097ca7fe0b0288f5eb85f386fed876618fb9b8ab8000000000000000000000000e2e109f1b4eaa8915655fe8fdefc112a34acc5f0
-----Decoded View---------------
Arg [0] : _erc721 (address): 0x97CA7FE0b0288f5EB85F386FeD876618FB9b8Ab8
Arg [1] : _erc20 (address): 0xe2E109f1b4eaA8915655fE8fDEfC112a34ACc5F0
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000097ca7fe0b0288f5eb85f386fed876618fb9b8ab8
Arg [1] : 000000000000000000000000e2e109f1b4eaa8915655fe8fdefc112a34acc5f0
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.