More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 6,522 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 60298583 | 8 days ago | IN | 0 AVAX | 0.00004674 | ||||
Approve | 60267493 | 8 days ago | IN | 0 AVAX | 0.00004672 | ||||
Set Approval For... | 60223203 | 9 days ago | IN | 0 AVAX | 0.00007354 | ||||
Approve | 60144688 | 10 days ago | IN | 0 AVAX | 0.00005066 | ||||
Approve | 60143905 | 10 days ago | IN | 0 AVAX | 0.00005043 | ||||
Approve | 60106399 | 11 days ago | IN | 0 AVAX | 0.00009252 | ||||
Approve | 59910562 | 14 days ago | IN | 0 AVAX | 0.00009481 | ||||
Approve | 59864677 | 15 days ago | IN | 0 AVAX | 0.00005325 | ||||
Approve | 59864672 | 15 days ago | IN | 0 AVAX | 0.00005325 | ||||
Approve | 59864668 | 15 days ago | IN | 0 AVAX | 0.00007275 | ||||
Approve | 59797876 | 16 days ago | IN | 0 AVAX | 0.00007272 | ||||
Approve | 59764318 | 17 days ago | IN | 0 AVAX | 0.00005088 | ||||
Approve | 59764169 | 17 days ago | IN | 0 AVAX | 0.00005088 | ||||
Approve | 59706001 | 18 days ago | IN | 0 AVAX | 0.00010154 | ||||
Approve | 59686247 | 19 days ago | IN | 0 AVAX | 0.00011562 | ||||
Approve | 59684995 | 19 days ago | IN | 0 AVAX | 0.00007275 | ||||
Approve | 59656162 | 19 days ago | IN | 0 AVAX | 0.00007494 | ||||
Approve | 59621461 | 20 days ago | IN | 0 AVAX | 0.00007401 | ||||
Approve | 59621410 | 20 days ago | IN | 0 AVAX | 0.00002688 | ||||
Approve | 59621404 | 20 days ago | IN | 0 AVAX | 0.00009252 | ||||
Approve | 59589569 | 21 days ago | IN | 0 AVAX | 0.00007275 | ||||
Approve | 59588583 | 21 days ago | IN | 0 AVAX | 0.00013972 | ||||
Transfer | 59542297 | 22 days ago | IN | 0 AVAX | 0.00036506 | ||||
Transfer | 59533526 | 22 days ago | IN | 0 AVAX | 0.0010138 | ||||
Transfer | 59472346 | 23 days ago | IN | 0 AVAX | 0.00032231 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
SWOL
Compiler Version
v0.8.24+commit.e11b9ed9
Optimization Enabled:
Yes with 1222 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
//SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; import "./Wrapped404.sol"; import "@openzeppelin/contracts/utils/Strings.sol"; import {IERC165, ERC165} from "@openzeppelin/contracts/utils/introspection/ERC165.sol"; import {IERC721Metadata} from "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol"; contract SWOL is ERC165, Wrapped404 { string public baseTokenURI; uint256 public royaltyAmount; address public royaltyReceiver; bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a; bool private _tradingEnabled = false; mapping(address => bool) private _isWhiteListed; constructor( address _owner, address _wrappingContract ) Wrapped404("SWOL", "SWOL", 18, 3333, _wrappingContract, _owner) { baseTokenURI = "https://nftstorage.link/ipfs/bafybeibyh7gfrep47tx6gaswxccasrlts3amuetttigqg4sxao5fm362va/"; royaltyReceiver = 0x1c55168497E67E9383105c20417B53Afe9baabbb; royaltyAmount = 750; // Start at 7.5% } function tokenURI(uint256 id) public view override returns (string memory) { return string.concat(baseTokenURI, Strings.toString(id)); } // ROYALTIES function royaltyInfo( uint256 _tokenId, uint256 _salePrice ) external view returns (address receiver, uint256 amount) { return (royaltyReceiver, ((_salePrice * royaltyAmount) / 10000)); } function supportsInterface( bytes4 interfaceId ) public view virtual override(ERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || interfaceId == _INTERFACE_ID_ERC2981 || super.supportsInterface(interfaceId); } // ADMIN function setRoyaltyAmount(uint256 _royaltyAmount) public onlyOwner { royaltyAmount = _royaltyAmount; } function setRoyaltyReceiver(address _royaltyReceiver) public onlyOwner { royaltyReceiver = _royaltyReceiver; } function setBaseURI(string memory _baseURI) public onlyOwner { baseTokenURI = _baseURI; } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual override { super._beforeTokenTransfer(from, to, amount); bool isAllowedTransfer = _tradingEnabled || from == owner || to == owner || _isWhiteListed[from] || _isWhiteListed[to]; if (!isAllowedTransfer) { revert("Trading is not enabled or address not whitelisted"); } } function enableTrading() public onlyOwner { require(!_tradingEnabled, "Trading is already enabled"); _tradingEnabled = true; } function whitelistAddress( address _address, bool isWhitelisted ) public onlyOwner { _isWhiteListed[_address] = isWhitelisted; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.20; import {IERC721} from "../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 v5.0.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.20; import {IERC165} from "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon * a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or * {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon * a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the address zero. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.20; /** * @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 `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/ERC165.sol) pragma solidity ^0.8.20; import {IERC165} from "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol) pragma solidity ^0.8.20; /** * @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 v5.0.0) (utils/math/Math.sol) pragma solidity ^0.8.20; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Muldiv operation overflow. */ error MathOverflowedMulDiv(); enum Rounding { Floor, // Toward negative infinity Ceil, // Toward positive infinity Trunc, // Toward zero Expand // Away from zero } /** * @dev Returns the addition of two unsigned integers, with an overflow flag. */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // 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. */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { 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. */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds towards infinity instead * of rounding towards zero. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { if (b == 0) { // Guarantee the same behavior as in a regular Solidity division. return a / b; } // (a + b - 1) / b can overflow on addition, so we distribute. return a == 0 ? 0 : (a - 1) / b + 1; } /** * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or * denominator == 0. * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by * Uniswap Labs also under MIT license. */ function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) { unchecked { // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 // variables such that product = prod1 * 2^256 + prod0. uint256 prod0 = x * y; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { // Solidity will revert if denominator == 0, unlike the div opcode on its own. // The surrounding unchecked block does not change this fact. // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic. return prod0 / denominator; } // Make sure the result is less than 2^256. Also prevents denominator == 0. if (denominator <= prod1) { revert MathOverflowedMulDiv(); } /////////////////////////////////////////////// // 512 by 256 division. /////////////////////////////////////////////// // Make division exact by subtracting the remainder from [prod1 prod0]. uint256 remainder; assembly { // Compute remainder using mulmod. remainder := mulmod(x, y, denominator) // Subtract 256 bit number from 512 bit number. prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } // Factor powers of two out of denominator and compute largest power of two divisor of denominator. // Always >= 1. See https://cs.stackexchange.com/q/138556/92363. uint256 twos = denominator & (0 - denominator); assembly { // Divide denominator by twos. denominator := div(denominator, twos) // Divide [prod1 prod0] by twos. prod0 := div(prod0, twos) // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. twos := add(div(sub(0, twos), twos), 1) } // Shift in bits from prod1 into prod0. prod0 |= prod1 * twos; // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for // four bits. That is, denominator * inv = 1 mod 2^4. uint256 inverse = (3 * denominator) ^ 2; // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also // works in modular arithmetic, doubling the correct bits in each step. inverse *= 2 - denominator * inverse; // inverse mod 2^8 inverse *= 2 - denominator * inverse; // inverse mod 2^16 inverse *= 2 - denominator * inverse; // inverse mod 2^32 inverse *= 2 - denominator * inverse; // inverse mod 2^64 inverse *= 2 - denominator * inverse; // inverse mod 2^128 inverse *= 2 - denominator * inverse; // inverse mod 2^256 // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 // is no longer required. result = prod0 * inverse; return result; } } /** * @notice Calculates x * y / denominator with full precision, following the selected rounding direction. */ function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) { uint256 result = mulDiv(x, y, denominator); if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) { result += 1; } return result; } /** * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded * towards zero. * * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11). */ function sqrt(uint256 a) internal pure returns (uint256) { if (a == 0) { return 0; } // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target. // // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`. // // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)` // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))` // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)` // // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit. uint256 result = 1 << (log2(a) >> 1); // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128, // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision // into the expected uint128 result. unchecked { result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; return min(result, a / result); } } /** * @notice Calculates sqrt(a), following the selected rounding direction. */ function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = sqrt(a); return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0); } } /** * @dev Return the log in base 2 of a positive value rounded towards zero. * Returns 0 if given 0. */ function log2(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 128; } if (value >> 64 > 0) { value >>= 64; result += 64; } if (value >> 32 > 0) { value >>= 32; result += 32; } if (value >> 16 > 0) { value >>= 16; result += 16; } if (value >> 8 > 0) { value >>= 8; result += 8; } if (value >> 4 > 0) { value >>= 4; result += 4; } if (value >> 2 > 0) { value >>= 2; result += 2; } if (value >> 1 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 2, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log2(value); return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0); } } /** * @dev Return the log in base 10 of a positive value rounded towards zero. * Returns 0 if given 0. */ function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10 ** 64) { value /= 10 ** 64; result += 64; } if (value >= 10 ** 32) { value /= 10 ** 32; result += 32; } if (value >= 10 ** 16) { value /= 10 ** 16; result += 16; } if (value >= 10 ** 8) { value /= 10 ** 8; result += 8; } if (value >= 10 ** 4) { value /= 10 ** 4; result += 4; } if (value >= 10 ** 2) { value /= 10 ** 2; result += 2; } if (value >= 10 ** 1) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0); } } /** * @dev Return the log in base 256 of a positive value rounded towards zero. * Returns 0 if given 0. * * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string. */ function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 256, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0); } } /** * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers. */ function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) { return uint8(rounding) % 2 == 1; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol) pragma solidity ^0.8.20; /** * @dev Standard signed math utilities missing in the Solidity language. */ library SignedMath { /** * @dev Returns the largest of two signed numbers. */ function max(int256 a, int256 b) internal pure returns (int256) { return a > b ? a : b; } /** * @dev Returns the smallest of two signed numbers. */ function min(int256 a, int256 b) internal pure returns (int256) { return a < b ? a : b; } /** * @dev Returns the average of two signed numbers without overflow. * The result is rounded towards zero. */ function average(int256 a, int256 b) internal pure returns (int256) { // Formula from the book "Hacker's Delight" int256 x = (a & b) + ((a ^ b) >> 1); return x + (int256(uint256(x) >> 255) & (a ^ b)); } /** * @dev Returns the absolute unsigned value of a signed value. */ function abs(int256 n) internal pure returns (uint256) { unchecked { // must be unchecked in order to support `n = type(int256).min` return uint256(n >= 0 ? n : -n); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/ReentrancyGuard.sol) pragma solidity ^0.8.20; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant NOT_ENTERED = 1; uint256 private constant ENTERED = 2; uint256 private _status; /** * @dev Unauthorized reentrant call. */ error ReentrancyGuardReentrantCall(); constructor() { _status = NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be NOT_ENTERED if (_status == ENTERED) { revert ReentrancyGuardReentrantCall(); } // Any calls to nonReentrant after this point will fail _status = ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == ENTERED; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol) pragma solidity ^0.8.20; import {Math} from "./math/Math.sol"; import {SignedMath} from "./math/SignedMath.sol"; /** * @dev String operations. */ library Strings { bytes16 private constant HEX_DIGITS = "0123456789abcdef"; uint8 private constant ADDRESS_LENGTH = 20; /** * @dev The `value` string doesn't fit in the specified `length`. */ error StringsInsufficientHexLength(uint256 value, uint256 length); /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { unchecked { uint256 length = Math.log10(value) + 1; string memory buffer = new string(length); uint256 ptr; /// @solidity memory-safe-assembly assembly { ptr := add(buffer, add(32, length)) } while (true) { ptr--; /// @solidity memory-safe-assembly assembly { mstore8(ptr, byte(mod(value, 10), HEX_DIGITS)) } value /= 10; if (value == 0) break; } return buffer; } } /** * @dev Converts a `int256` to its ASCII `string` decimal representation. */ function toStringSigned(int256 value) internal pure returns (string memory) { return string.concat(value < 0 ? "-" : "", toString(SignedMath.abs(value))); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { unchecked { return toHexString(value, Math.log256(value) + 1); } } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { uint256 localValue = value; bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = HEX_DIGITS[localValue & 0xf]; localValue >>= 4; } if (localValue != 0) { revert StringsInsufficientHexLength(value, length); } return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal * representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH); } /** * @dev Returns true if the two strings are equal. */ function equal(string memory a, string memory b) internal pure returns (bool) { return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b)); } }
//SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; abstract contract Ownable { event OwnershipTransferred(address indexed user, address indexed newOwner); error Unauthorized(); error InvalidOwner(); address public owner; modifier onlyOwner() virtual { if (msg.sender != owner) revert Unauthorized(); _; } constructor(address _owner) { if (_owner == address(0)) revert InvalidOwner(); owner = _owner; emit OwnershipTransferred(address(0), _owner); } function transferOwnership(address _owner) public virtual onlyOwner { if (_owner == address(0)) revert InvalidOwner(); owner = _owner; emit OwnershipTransferred(msg.sender, _owner); } function revokeOwnership() public virtual onlyOwner { owner = address(0); emit OwnershipTransferred(msg.sender, address(0)); } }
//SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; import "./Ownable.sol"; import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol"; import "@openzeppelin/contracts/utils/ReentrancyGuard.sol"; abstract contract Wrapped404 is Ownable, IERC721Receiver, ReentrancyGuard { address public wrappingContract; uint256 public wrappedNFTSupply; // Events event ERC20Transfer( address indexed from, address indexed to, uint256 amount ); event Approval( address indexed owner, address indexed spender, uint256 amount ); event Transfer( address indexed from, address indexed to, uint256 indexed id ); event ERC721Approval( address indexed owner, address indexed spender, uint256 indexed id ); event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); // Errors error NotFound(); error AlreadyExists(); error InvalidRecipient(); error InvalidSender(); error UnsafeRecipient(); // Metadata /// @dev Token name string public name; /// @dev Token symbol string public symbol; /// @dev Decimals for fractional representation uint8 public immutable decimals; /// @dev Total supply in fractionalized representation uint256 public immutable totalSupply; /// @dev Total supply in NFT representation uint256 public immutable totalNativeSupply; // Mappings /// @dev Balance of user in fractional representation mapping(address => uint256) public balanceOf; /// @dev Allowance of user in fractional representation mapping(address => mapping(address => uint256)) public allowance; /// @dev Approval in native representaion mapping(uint256 => address) public getApproved; /// @dev Approval for all in native representation mapping(address => mapping(address => bool)) public isApprovedForAll; /// @dev Owner of id in native representation mapping(uint256 => address) internal _ownerOf; /// @dev Array of owned ids in native representation mapping(address => uint256[]) internal _owned; mapping(address => uint256[]) internal _contractOwned; /// @dev Tracks indices for the _owned mapping mapping(uint256 => uint256) internal _ownedIndex; /// @dev Addresses whitelisted from minting / burning for gas savings (pairs, routers, etc) mapping(address => bool) public whitelist; /// @dev Holds the IDs of NFTs that have been burned so that they can be re-used uint256[] public availableIds; // Constructor constructor( string memory _name, string memory _symbol, uint8 _decimals, uint256 _totalNativeSupply, address _wrappingContract, address _owner ) Ownable(_owner) { name = _name; symbol = _symbol; decimals = _decimals; totalNativeSupply = _totalNativeSupply; wrappingContract = _wrappingContract; totalSupply = _totalNativeSupply * (10 ** decimals); } /// @notice Initialization function to set pairs / etc /// saving gas by avoiding mint / burn on unnecessary targets function setWhitelist(address target, bool state) public onlyOwner { whitelist[target] = state; } /// @notice Function to find owner of a given native token function ownerOf(uint256 id) public view virtual returns (address owner) { owner = _ownerOf[id]; if (owner == address(0)) { revert NotFound(); } } function nftExists(uint256 id) public view virtual returns (bool) { return _ownerOf[id] != address(0); } function totalAvailableIds() public view returns (uint256) { return availableIds.length; } function listAvailableIds() public view returns (uint256[] memory) { return availableIds; } /// @notice tokenURI must be implemented by child contract function tokenURI(uint256 id) public view virtual returns (string memory); /// @notice Function for token approvals /// @dev This function assumes id / native if amount less than or equal to current max id function approve( address spender, uint256 amountOrId ) public virtual returns (bool) { if (amountOrId <= totalNativeSupply && amountOrId > 0) { address owner = _ownerOf[amountOrId]; if (msg.sender != owner && !isApprovedForAll[owner][msg.sender]) { revert Unauthorized(); } getApproved[amountOrId] = spender; emit Approval(owner, spender, amountOrId); } else { allowance[msg.sender][spender] = amountOrId; emit Approval(msg.sender, spender, amountOrId); } return true; } /// @notice Function native approvals function setApprovalForAll(address operator, bool approved) public virtual { isApprovedForAll[msg.sender][operator] = approved; emit ApprovalForAll(msg.sender, operator, approved); } /// Wrapping / Unwrapping logic function wrapSet(uint256[] memory tokenIds) public nonReentrant { for (uint256 index = 0; index < tokenIds.length; index++) { _wrap(tokenIds[index]); } } function unwrapSet(uint256[] memory tokenIds) public nonReentrant { for (uint256 index = 0; index < tokenIds.length; index++) { _unwrap(tokenIds[index]); } } function wrap(uint256 tokenId) public nonReentrant { _wrap(tokenId); } function unwrap(uint256 tokenId) public nonReentrant { _unwrap(tokenId); } function _wrap(uint256 tokenId) private { require(_ownerOf[tokenId] == address(0), "Cannot wrap existing token."); IERC721 wrapped = IERC721(wrappingContract); // Only allow wrapping when sender is owner require( wrapped.ownerOf(tokenId) == msg.sender, "You do not own that token." ); balanceOf[msg.sender] += 1 * _getUnit(); wrappedNFTSupply += 1; _deliverNFT(msg.sender, tokenId); wrapped.safeTransferFrom(msg.sender, address(this), tokenId); emit Transfer(address(0), msg.sender, tokenId); } function _unwrap(uint256 tokenId) private { require(ownerOf(tokenId) == msg.sender, "You do not own that token."); balanceOf[msg.sender] -= 1 * _getUnit(); wrappedNFTSupply -= 1; _removeSpecificNFT(msg.sender, tokenId); delete _ownedIndex[tokenId]; delete _ownerOf[tokenId]; IERC721(wrappingContract).safeTransferFrom( address(this), msg.sender, tokenId ); emit Transfer(msg.sender, address(0), tokenId); } /// @notice Function for ERC20-style transfers only /// ==> will mint / burn NFTs under appropriate circumstances function transferFrom( address from, address to, uint256 amount ) public returns (bool) { uint256 allowed = allowance[from][msg.sender]; require(allowed >= amount, "Not enough allowance."); if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount; _transfer(from, to, amount); return true; } /// @notice Function for fractional transfers function transfer( address to, uint256 amount ) public virtual returns (bool) { return _transfer(msg.sender, to, amount); } /// @notice Function for native transfers with contract support function safeTransferFrom( address from, address to, uint256 id ) public virtual { _nftTransferFrom(msg.sender, from, to, id); if ( to.code.length != 0 && IERC721Receiver(to).onERC721Received(msg.sender, from, id, "") != IERC721Receiver.onERC721Received.selector ) { revert UnsafeRecipient(); } } /// @notice Function for native transfers with contract support and callback data function safeTransferFrom( address from, address to, uint256 id, bytes calldata data ) public virtual { _nftTransferFrom(msg.sender, from, to, id); if ( to.code.length != 0 && IERC721Receiver(to).onERC721Received(msg.sender, from, id, data) != IERC721Receiver.onERC721Received.selector ) { revert UnsafeRecipient(); } } function contractTokenBalance( address _contract ) public view returns (uint256) { return balanceOf[_contract] - (_contractOwned[_contract].length * _getUnit()); } function contractNFTBalance( address _contract ) public view returns (uint256) { return _contractOwned[_contract].length; } function accountNFTBalance(address owner) public view returns (uint256) { return _owned[owner].length; } function enoughTokenBalance( address _contract, uint256 amount ) public view returns (bool) { return contractTokenBalance(_contract) >= amount; } /// @notice Internal function for fractional transfers function _transfer( address from, address to, uint256 amount ) internal returns (bool) { _beforeTokenTransfer(from, to, amount); if (_isContract(from)) { require( contractTokenBalance(from) >= amount, "Not enough token balance." ); } uint256 unit = _getUnit(); uint256 balanceBeforeSender = balanceOf[from]; uint256 balanceBeforeReceiver = balanceOf[to]; balanceOf[from] -= amount; unchecked { balanceOf[to] += amount; } // Skip burn for certain addresses to save gas // Skip burning from smart contracts unless they have _owned[] nfts // ==> prevents constructor transformation exploits if (!_shouldSkip(from) || _owned[from].length > 0) { uint256 nftsToBurn = (balanceBeforeSender / unit) - (balanceOf[from] / unit); for (uint256 i = 0; i < nftsToBurn; i++) { _burnNFT(from); } } // Skip minting for certain addresses to save gas // Skip minting to smart contracts if (!_shouldSkip(to)) { uint256 nftsToMint = (balanceOf[to] / unit) - (balanceBeforeReceiver / unit); for (uint256 i = 0; i < nftsToMint; i++) { _mintNFT(to); } } emit ERC20Transfer(from, to, amount); return true; } function _mint(address recipient, uint256 quantity) internal { balanceOf[recipient] += quantity * _getUnit(); for (uint256 index = 0; index < quantity; index++) { _mintNFT(recipient); } } function _nftTransferFrom( address msgSender, address from, address to, uint256 id ) internal { require(from == _ownerOf[id], "Not owner of NFT."); require(to != address(0), "Cannot send to null address."); require( msgSender == from || isApprovedForAll[from][msgSender] || msgSender == getApproved[id], "Operator is not approved." ); balanceOf[from] -= _getUnit(); unchecked { balanceOf[to] += _getUnit(); } _removeSpecificNFT(from, id); _deliverNFT(to, id); emit Transfer(from, to, id); emit ERC20Transfer(from, to, _getUnit()); } // Internal utility logic function _getUnit() internal view returns (uint256) { return 10 ** decimals; } function _mintNFT(address to) internal virtual { if (to == address(0)) { revert InvalidRecipient(); } uint256 id; id = availableIds[availableIds.length - 1]; availableIds.pop(); if (_ownerOf[id] != address(0)) { revert AlreadyExists(); } _deliverNFT(to, id); emit Transfer(address(0), to, id); } function _burnNFT(address from) internal virtual { if (from == address(0)) { revert InvalidSender(); } // Indiscriminately burn last NFT in list of owned NFTs for `from` uint256 id = _owned[from][_owned[from].length - 1]; _owned[from].pop(); delete _ownedIndex[id]; delete _ownerOf[id]; delete getApproved[id]; availableIds.push(id); emit Transfer(from, address(0), id); } function _removeSpecificNFT(address from, uint256 id) private { uint256 lastId; if (_isContract(from)) { lastId = _contractOwned[from][_contractOwned[from].length - 1]; _contractOwned[from][_ownedIndex[id]] = lastId; _contractOwned[from].pop(); } else { lastId = _owned[from][_owned[from].length - 1]; _owned[from][_ownedIndex[id]] = lastId; _owned[from].pop(); } _ownedIndex[lastId] = _ownedIndex[id]; delete getApproved[id]; } function _deliverNFT(address to, uint256 id) private { _ownerOf[id] = to; if (_isContract(to)) { _contractOwned[to].push(id); _ownedIndex[id] = _contractOwned[to].length - 1; } else { _owned[to].push(id); _ownedIndex[id] = _owned[to].length - 1; } } function _setNameSymbol( string memory _name, string memory _symbol ) internal { name = _name; symbol = _symbol; } function _shouldSkip(address a) internal view returns (bool) { return whitelist[a] || _isContract(a); } function _isContract(address a) internal view returns (bool result) { assembly { result := extcodesize(a) } } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} function onERC721Received( address, address, uint256, bytes calldata ) external pure returns (bytes4) { return IERC721Receiver.onERC721Received.selector; } }
{ "optimizer": { "enabled": true, "runs": 1222 }, "evmVersion": "paris", "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_wrappingContract","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyExists","type":"error"},{"inputs":[],"name":"InvalidOwner","type":"error"},{"inputs":[],"name":"InvalidRecipient","type":"error"},{"inputs":[],"name":"InvalidSender","type":"error"},{"inputs":[],"name":"NotFound","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"inputs":[],"name":"UnsafeRecipient","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","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":"amount","type":"uint256"}],"name":"ERC20Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ERC721Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"accountNFTBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amountOrId","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"availableIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"}],"name":"contractNFTBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"}],"name":"contractTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"enoughTokenBalance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"listAvailableIds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"nftExists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revokeOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"royaltyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"royaltyReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_royaltyAmount","type":"uint256"}],"name":"setRoyaltyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_royaltyReceiver","type":"address"}],"name":"setRoyaltyReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAvailableIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalNativeSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"amount","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":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"unwrap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"unwrapSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"isWhitelisted","type":"bool"}],"name":"whitelistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"wrap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"wrapSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wrappedNFTSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wrappingContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60e06040526012805460ff60a01b191690553480156200001e57600080fd5b506040516200317c3803806200317c8339810160408190526200004191620001d4565b60408051808201825260048082526314d5d3d360e21b6020808401829052845180860190955291845290830152906012610d058486806001600160a01b0381166200009f576040516349e27cff60e01b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03831690811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180556004620000fa8782620002b3565b506005620001098682620002b3565b5060ff8416608081905260c0849052600280546001600160a01b0319166001600160a01b0385161790556200014090600a62000494565b6200014c9084620004ac565b60a081815250505050505050506040518060800160405280605981526020016200312360599139601090620001829082620002b3565b5050601280546001600160a01b031916731c55168497e67e9383105c20417b53afe9baabbb179055506102ee601155620004c6565b80516001600160a01b0381168114620001cf57600080fd5b919050565b60008060408385031215620001e857600080fd5b620001f383620001b7565b91506200020360208401620001b7565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200023757607f821691505b6020821081036200025857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002ae576000816000526020600020601f850160051c81016020861015620002895750805b601f850160051c820191505b81811015620002aa5782815560010162000295565b5050505b505050565b81516001600160401b03811115620002cf57620002cf6200020c565b620002e781620002e0845462000222565b846200025e565b602080601f8311600181146200031f5760008415620003065750858301515b600019600386901b1c1916600185901b178555620002aa565b600085815260208120601f198616915b8281101562000350578886015182559484019460019091019084016200032f565b50858210156200036f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620003d6578160001904821115620003ba57620003ba6200037f565b80851615620003c857918102915b93841c93908002906200039a565b509250929050565b600082620003ef575060016200048e565b81620003fe575060006200048e565b8160018114620004175760028114620004225762000442565b60019150506200048e565b60ff8411156200043657620004366200037f565b50506001821b6200048e565b5060208310610133831016604e8410600b841016171562000467575081810a6200048e565b62000473838362000395565b80600019048211156200048a576200048a6200037f565b0290505b92915050565b6000620004a560ff841683620003de565b9392505050565b80820281158282048414176200048e576200048e6200037f565b60805160a05160c051612c1f62000504600039600081816105800152610928015260006103fa0152600081816104ac01526117be0152612c1f6000f3fe608060405234801561001057600080fd5b50600436106103155760003560e01c806386ca1618116101a7578063b9a45aac116100ee578063dd62ed3e11610097578063ea598cb011610071578063ea598cb014610776578063ef1f3ebb14610789578063f2fde38b146107b257600080fd5b8063dd62ed3e1461070a578063de0e9a3e14610735578063e985e9c51461074857600080fd5b8063cb6205e4116100c8578063cb6205e4146106c4578063d528d118146106ef578063d547cfb71461070257600080fd5b8063b9a45aac1461068b578063c87b56dd1461069e578063ca5994db146106b157600080fd5b80639b19251a11610150578063a9059cbb1161012a578063a9059cbb14610652578063b0faefdd14610665578063b88d4fde1461067857600080fd5b80639b19251a146106095780639fbc87131461062c578063a22cb4651461063f57600080fd5b80638dc251e3116101815780638dc251e3146105db57806395d89b41146105ee57806397151657146105f657600080fd5b806386ca1618146105ab5780638a8c523c146105c05780638da5cb5b146105c857600080fd5b80632b9689581161026b5780636352211e116102145780637c6e551d116101ee5780637c6e551d1461057257806381456f481461057b578063850c23dc146105a257600080fd5b80636352211e1461052c57806366e3e5e41461053f57806370a082311461055257600080fd5b80634f07de09116102455780634f07de09146104f357806353d6fd591461050657806355f804b31461051957600080fd5b80632b9689581461049d578063313ce567146104a757806342842e0e146104e057600080fd5b8063150b7a02116102cd578063201f3517116102a7578063201f35171461042f57806323b872dd146104585780632a55205a1461046b57600080fd5b8063150b7a02146103bd57806318160ddd146103f55780631ae243661461041c57600080fd5b806306fdde03116102fe57806306fdde0314610354578063081812fc14610369578063095ea7b3146103aa57600080fd5b806301ffc9a71461031a57806304bdc76b14610342575b600080fd5b61032d6103283660046123d7565b6107c5565b60405190151581526020015b60405180910390f35b600f545b604051908152602001610339565b61035c610896565b6040516103399190612418565b61039261037736600461244b565b6008602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610339565b61032d6103b8366004612479565b610924565b6103dc6103cb3660046124a5565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610339565b6103467f000000000000000000000000000000000000000000000000000000000000000081565b61032d61042a366004612479565b610a92565b61034661043d366004612544565b6001600160a01b03166000908152600b602052604090205490565b61032d610466366004612561565b610aa7565b61047e6104793660046125a2565b610b6f565b604080516001600160a01b039093168352602083019190915201610339565b6104a5610ba9565b005b6104ce7f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff9091168152602001610339565b6104a56104ee366004612561565b610c0f565b6104a561050136600461244b565b610cea565b6104a56105143660046125c4565b610d19565b6104a5610527366004612649565b610d6e565b61039261053a36600461244b565b610da8565b61034661054d366004612544565b610dfc565b610346610560366004612544565b60066020526000908152604090205481565b61034660115481565b6103467f000000000000000000000000000000000000000000000000000000000000000081565b61034660035481565b6105b3610e4c565b60405161033991906126de565b6104a5610ea4565b600054610392906001600160a01b031681565b6104a56105e9366004612544565b610f58565b61035c610fa4565b6104a5610604366004612722565b610fb1565b61032d610617366004612544565b600e6020526000908152604090205460ff1681565b601254610392906001600160a01b031681565b6104a561064d3660046125c4565b610ffc565b61032d610660366004612479565b611068565b600254610392906001600160a01b031681565b6104a56106863660046124a5565b61107c565b6104a56106993660046125c4565b611147565b61035c6106ac36600461244b565b61119c565b6104a56106bf366004612722565b6111d0565b61032d6106d236600461244b565b6000908152600a60205260409020546001600160a01b0316151590565b6103466106fd36600461244b565b61120e565b61035c61122f565b6103466107183660046127c8565b600760209081526000928352604080842090915290825290205481565b6104a561074336600461244b565b61123c565b61032d6107563660046127c8565b600960209081526000928352604080842090915290825290205460ff1681565b6104a561078436600461244b565b611256565b610346610797366004612544565b6001600160a01b03166000908152600c602052604090205490565b6104a56107c0366004612544565b611267565b60006001600160e01b031982167f80ac58cd00000000000000000000000000000000000000000000000000000000148061082857506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061085c57506001600160e01b031982167f2a55205a00000000000000000000000000000000000000000000000000000000145b8061089057507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b600480546108a3906127f6565b80601f01602080910402602001604051908101604052809291908181526020018280546108cf906127f6565b801561091c5780601f106108f15761010080835404028352916020019161091c565b820191906000526020600020905b8154815290600101906020018083116108ff57829003601f168201915b505050505081565b60007f000000000000000000000000000000000000000000000000000000000000000082111580156109565750600082115b15610a2d576000828152600a60205260409020546001600160a01b03163381148015906109a757506001600160a01b038116600090815260096020908152604080832033845290915290205460ff16155b156109c4576040516282b42960e81b815260040160405180910390fd5b60008381526008602090815260409182902080546001600160a01b0319166001600160a01b038881169182179092559251868152908416917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350610a89565b3360008181526007602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b50600192915050565b600081610a9e84610dfc565b10159392505050565b6001600160a01b038316600090815260076020908152604080832033845290915281205482811015610b205760405162461bcd60e51b815260206004820152601560248201527f4e6f7420656e6f75676820616c6c6f77616e63652e000000000000000000000060448201526064015b60405180910390fd5b6000198114610b5857610b338382612846565b6001600160a01b03861660009081526007602090815260408083203384529091529020555b610b6385858561131c565b50600195945050505050565b60125460115460009182916001600160a01b039091169061271090610b949086612859565b610b9e9190612870565b915091509250929050565b6000546001600160a01b03163314610bd3576040516282b42960e81b815260040160405180910390fd5b600080546001600160a01b031916815560405133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3565b610c1b3384848461153d565b6001600160a01b0382163b15801590610cc75750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af1158015610c96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cba9190612892565b6001600160e01b03191614155b15610ce557604051633da6393160e01b815260040160405180910390fd5b505050565b6000546001600160a01b03163314610d14576040516282b42960e81b815260040160405180910390fd5b601155565b6000546001600160a01b03163314610d43576040516282b42960e81b815260040160405180910390fd5b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610d98576040516282b42960e81b815260040160405180910390fd5b6010610da482826128ff565b5050565b6000818152600a60205260409020546001600160a01b031680610df7576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000610e066117b7565b6001600160a01b0383166000908152600c6020526040902054610e299190612859565b6001600160a01b0383166000908152600660205260409020546108909190612846565b6060600f805480602002602001604051908101604052809291908181526020018280548015610e9a57602002820191906000526020600020905b815481526020019060010190808311610e86575b5050505050905090565b6000546001600160a01b03163314610ece576040516282b42960e81b815260040160405180910390fd5b601254600160a01b900460ff1615610f285760405162461bcd60e51b815260206004820152601a60248201527f54726164696e6720697320616c726561647920656e61626c65640000000000006044820152606401610b17565b601280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b179055565b6000546001600160a01b03163314610f82576040516282b42960e81b815260040160405180910390fd5b601280546001600160a01b0319166001600160a01b0392909216919091179055565b600580546108a3906127f6565b610fb96117e9565b60005b8151811015610fef57610fe7828281518110610fda57610fda6129bf565b602002602001015161182c565b600101610fbc565b50610ff960018055565b50565b3360008181526009602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600061107533848461131c565b9392505050565b6110883386868661153d565b6001600160a01b0384163b158015906111225750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a02906110d29033908a908990899089906004016129d5565b6020604051808303816000875af11580156110f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111159190612892565b6001600160e01b03191614155b1561114057604051633da6393160e01b815260040160405180910390fd5b5050505050565b6000546001600160a01b03163314611171576040516282b42960e81b815260040160405180910390fd5b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b606060106111a983611a66565b6040516020016111ba929190612a29565b6040516020818303038152906040529050919050565b6111d86117e9565b60005b8151811015610fef576112068282815181106111f9576111f96129bf565b6020026020010151611b06565b6001016111db565b600f818154811061121e57600080fd5b600091825260209091200154905081565b601080546108a3906127f6565b6112446117e9565b61124d81611b06565b610ff960018055565b61125e6117e9565b61124d8161182c565b6000546001600160a01b03163314611291576040516282b42960e81b815260040160405180910390fd5b6001600160a01b0381166112d1576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000611329848484611c88565b833b15611388578161133a85610dfc565b10156113885760405162461bcd60e51b815260206004820152601960248201527f4e6f7420656e6f75676820746f6b656e2062616c616e63652e000000000000006044820152606401610b17565b60006113926117b7565b6001600160a01b038087166000818152600660205260408082208054948a16835290822054928252939450919290918691906113ce8386612846565b90915550506001600160a01b03861660009081526006602052604090208054860190556113fa87611d89565b158061141d57506001600160a01b0387166000908152600b602052604090205415155b1561147b576001600160a01b038716600090815260066020526040812054611446908590612870565b6114508585612870565b61145a9190612846565b905060005b818110156114785761147089611db2565b60010161145f565b50505b61148486611d89565b6114e35760006114948483612870565b6001600160a01b0388166000908152600660205260409020546114b8908690612870565b6114c29190612846565b905060005b818110156114e0576114d888611f25565b6001016114c7565b50505b856001600160a01b0316876001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e0314878760405161152891815260200190565b60405180910390a35060019695505050505050565b6000818152600a60205260409020546001600160a01b038481169116146115a65760405162461bcd60e51b815260206004820152601160248201527f4e6f74206f776e6572206f66204e46542e0000000000000000000000000000006044820152606401610b17565b6001600160a01b0382166115fc5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742073656e6420746f206e756c6c20616464726573732e000000006044820152606401610b17565b826001600160a01b0316846001600160a01b0316148061164157506001600160a01b0380841660009081526009602090815260408083209388168352929052205460ff165b8061166557506000818152600860205260409020546001600160a01b038581169116145b6116b15760405162461bcd60e51b815260206004820152601960248201527f4f70657261746f72206973206e6f7420617070726f7665642e000000000000006044820152606401610b17565b6116b96117b7565b6001600160a01b038416600090815260066020526040812080549091906116e1908490612846565b909155506116ef90506117b7565b6001600160a01b0383166000908152600660205260409020805490910190556117188382612054565b6117228282612224565b80826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4816001600160a01b0316836001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e0314876117a06117b7565b60405190815260200160405180910390a350505050565b60006117e47f0000000000000000000000000000000000000000000000000000000000000000600a612b94565b905090565b600260015403611825576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600155565b6000818152600a60205260409020546001600160a01b0316156118915760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742077726170206578697374696e6720746f6b656e2e00000000006044820152606401610b17565b6002546040517f6352211e000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169033908290636352211e90602401602060405180830381865afa1580156118f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191b9190612ba3565b6001600160a01b0316146119715760405162461bcd60e51b815260206004820152601a60248201527f596f7520646f206e6f74206f776e207468617420746f6b656e2e0000000000006044820152606401610b17565b6119796117b7565b611984906001612859565b33600090815260066020526040812080549091906119a3908490612bc0565b925050819055506001600360008282546119bd9190612bc0565b909155506119cd90503383612224565b604051632142170760e11b8152336004820152306024820152604481018390526001600160a01b038216906342842e0e90606401600060405180830381600087803b158015611a1b57600080fd5b505af1158015611a2f573d6000803e3d6000fd5b50506040518492503391506000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60606000611a73836122df565b600101905060008167ffffffffffffffff811115611a9357611a93612602565b6040519080825280601f01601f191660200182016040528015611abd576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084611ac757509392505050565b33611b1082610da8565b6001600160a01b031614611b665760405162461bcd60e51b815260206004820152601a60248201527f596f7520646f206e6f74206f776e207468617420746f6b656e2e0000000000006044820152606401610b17565b611b6e6117b7565b611b79906001612859565b3360009081526006602052604081208054909190611b98908490612846565b92505081905550600160036000828254611bb29190612846565b90915550611bc290503382612054565b6000818152600d60209081526040808320839055600a9091529081902080546001600160a01b03191690556002549051632142170760e11b8152306004820152336024820152604481018390526001600160a01b03909116906342842e0e90606401600060405180830381600087803b158015611c3e57600080fd5b505af1158015611c52573d6000803e3d6000fd5b50506040518392506000915033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a450565b601254600090600160a01b900460ff1680611cb057506000546001600160a01b038581169116145b80611cc857506000546001600160a01b038481169116145b80611ceb57506001600160a01b03841660009081526013602052604090205460ff165b80611d0e57506001600160a01b03831660009081526013602052604090205460ff165b905080611d835760405162461bcd60e51b815260206004820152603160248201527f54726164696e67206973206e6f7420656e61626c6564206f722061646472657360448201527f73206e6f742077686974656c69737465640000000000000000000000000000006064820152608401610b17565b50505050565b6001600160a01b0381166000908152600e602052604081205460ff16806108905750813b610890565b6001600160a01b038116611df2576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381166000908152600b602052604081208054611e1890600190612846565b81548110611e2857611e286129bf565b90600052602060002001549050600b6000836001600160a01b03166001600160a01b03168152602001908152602001600020805480611e6957611e69612bd3565b600082815260208082208301600019908101839055909201909255828252600d81526040808320839055600a825280832080546001600160a01b031990811690915560089092528083208054909216909155600f80546001810182559083527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80201839055518291906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b038116611f65576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600f805460009190611f7990600190612846565b81548110611f8957611f896129bf565b90600052602060002001549050600f805480611fa757611fa7612bd3565b600082815260208082208301600019908101839055909201909255828252600a905260409020546001600160a01b03161561200e576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120188282612224565b60405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000823b15612127576001600160a01b0383166000908152600c60205260409020805461208390600190612846565b81548110612093576120936129bf565b60009182526020808320909101546001600160a01b0386168352600c82526040808420868552600d909352909220548154929350839281106120d7576120d76129bf565b60009182526020808320909101929092556001600160a01b0385168152600c9091526040902080548061210c5761210c612bd3565b600190038181906000526020600020016000905590556121ed565b6001600160a01b0383166000908152600b60205260409020805461214d90600190612846565b8154811061215d5761215d6129bf565b60009182526020808320909101546001600160a01b0386168352600b82526040808420868552600d909352909220548154929350839281106121a1576121a16129bf565b60009182526020808320909101929092556001600160a01b0385168152600b909152604090208054806121d6576121d6612bd3565b600190038181906000526020600020016000905590555b6000828152600d6020908152604080832054938352808320939093559281526008909252902080546001600160a01b031916905550565b6000818152600a6020526040902080546001600160a01b0319166001600160a01b038416179055813b156122a2576001600160a01b0382166000818152600c6020908152604082208054600181810183558285529284200185905592909152905461228f9190612846565b6000828152600d60205260409020555050565b6001600160a01b0382166000818152600b6020908152604082208054600181810183558285529284200185905592909152905461228f9190612846565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612328577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612354576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061237257662386f26fc10000830492506010015b6305f5e100831061238a576305f5e100830492506008015b612710831061239e57612710830492506004015b606483106123b0576064830492506002015b600a83106108905760010192915050565b6001600160e01b031981168114610ff957600080fd5b6000602082840312156123e957600080fd5b8135611075816123c1565b60005b8381101561240f5781810151838201526020016123f7565b50506000910152565b60208152600082518060208401526124378160408501602087016123f4565b601f01601f19169190910160400192915050565b60006020828403121561245d57600080fd5b5035919050565b6001600160a01b0381168114610ff957600080fd5b6000806040838503121561248c57600080fd5b823561249781612464565b946020939093013593505050565b6000806000806000608086880312156124bd57600080fd5b85356124c881612464565b945060208601356124d881612464565b935060408601359250606086013567ffffffffffffffff808211156124fc57600080fd5b818801915088601f83011261251057600080fd5b81358181111561251f57600080fd5b89602082850101111561253157600080fd5b9699959850939650602001949392505050565b60006020828403121561255657600080fd5b813561107581612464565b60008060006060848603121561257657600080fd5b833561258181612464565b9250602084013561259181612464565b929592945050506040919091013590565b600080604083850312156125b557600080fd5b50508035926020909101359150565b600080604083850312156125d757600080fd5b82356125e281612464565b9150602083013580151581146125f757600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561264157612641612602565b604052919050565b6000602080838503121561265c57600080fd5b823567ffffffffffffffff8082111561267457600080fd5b818501915085601f83011261268857600080fd5b81358181111561269a5761269a612602565b6126ac601f8201601f19168501612618565b915080825286848285010111156126c257600080fd5b8084840185840137600090820190930192909252509392505050565b6020808252825182820181905260009190848201906040850190845b81811015612716578351835292840192918401916001016126fa565b50909695505050505050565b6000602080838503121561273557600080fd5b823567ffffffffffffffff8082111561274d57600080fd5b818501915085601f83011261276157600080fd5b81358181111561277357612773612602565b8060051b9150612784848301612618565b818152918301840191848101908884111561279e57600080fd5b938501935b838510156127bc578435825293850193908501906127a3565b98975050505050505050565b600080604083850312156127db57600080fd5b82356127e681612464565b915060208301356125f781612464565b600181811c9082168061280a57607f821691505b60208210810361282a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561089057610890612830565b808202811582820484141761089057610890612830565b60008261288d57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156128a457600080fd5b8151611075816123c1565b601f821115610ce5576000816000526020600020601f850160051c810160208610156128d85750805b601f850160051c820191505b818110156128f7578281556001016128e4565b505050505050565b815167ffffffffffffffff81111561291957612919612602565b61292d8161292784546127f6565b846128af565b602080601f831160018114612962576000841561294a5750858301515b600019600386901b1c1916600185901b1785556128f7565b600085815260208120601f198616915b8281101561299157888601518255948401946001909101908401612972565b50858210156129af5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b60006001600160a01b03808816835280871660208401525084604083015260806060830152826080830152828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b6000808454612a37816127f6565b60018281168015612a4f5760018114612a6457612a93565b60ff1984168752821515830287019450612a93565b8860005260208060002060005b85811015612a8a5781548a820152908401908201612a71565b50505082870194505b505050508351612aa78183602088016123f4565b01949350505050565b600181815b80851115612aeb578160001904821115612ad157612ad1612830565b80851615612ade57918102915b93841c9390800290612ab5565b509250929050565b600082612b0257506001610890565b81612b0f57506000610890565b8160018114612b255760028114612b2f57612b4b565b6001915050610890565b60ff841115612b4057612b40612830565b50506001821b610890565b5060208310610133831016604e8410600b8410161715612b6e575081810a610890565b612b788383612ab0565b8060001904821115612b8c57612b8c612830565b029392505050565b600061107560ff841683612af3565b600060208284031215612bb557600080fd5b815161107581612464565b8082018082111561089057610890612830565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220e154ee0a1d9563e65a41886e3587906712836023e4e1a1b2f854bf59a48c1f9664736f6c6343000818003368747470733a2f2f6e667473746f726167652e6c696e6b2f697066732f626166796265696279683767667265703437747836676173777863636173726c747333616d756574747469677167347378616f35666d33363276612f000000000000000000000000ea869669210a69b035b382e0f2a498b87dc6a45c00000000000000000000000083b284118e2f134d496a62f90a53d682a6d6b10c
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106103155760003560e01c806386ca1618116101a7578063b9a45aac116100ee578063dd62ed3e11610097578063ea598cb011610071578063ea598cb014610776578063ef1f3ebb14610789578063f2fde38b146107b257600080fd5b8063dd62ed3e1461070a578063de0e9a3e14610735578063e985e9c51461074857600080fd5b8063cb6205e4116100c8578063cb6205e4146106c4578063d528d118146106ef578063d547cfb71461070257600080fd5b8063b9a45aac1461068b578063c87b56dd1461069e578063ca5994db146106b157600080fd5b80639b19251a11610150578063a9059cbb1161012a578063a9059cbb14610652578063b0faefdd14610665578063b88d4fde1461067857600080fd5b80639b19251a146106095780639fbc87131461062c578063a22cb4651461063f57600080fd5b80638dc251e3116101815780638dc251e3146105db57806395d89b41146105ee57806397151657146105f657600080fd5b806386ca1618146105ab5780638a8c523c146105c05780638da5cb5b146105c857600080fd5b80632b9689581161026b5780636352211e116102145780637c6e551d116101ee5780637c6e551d1461057257806381456f481461057b578063850c23dc146105a257600080fd5b80636352211e1461052c57806366e3e5e41461053f57806370a082311461055257600080fd5b80634f07de09116102455780634f07de09146104f357806353d6fd591461050657806355f804b31461051957600080fd5b80632b9689581461049d578063313ce567146104a757806342842e0e146104e057600080fd5b8063150b7a02116102cd578063201f3517116102a7578063201f35171461042f57806323b872dd146104585780632a55205a1461046b57600080fd5b8063150b7a02146103bd57806318160ddd146103f55780631ae243661461041c57600080fd5b806306fdde03116102fe57806306fdde0314610354578063081812fc14610369578063095ea7b3146103aa57600080fd5b806301ffc9a71461031a57806304bdc76b14610342575b600080fd5b61032d6103283660046123d7565b6107c5565b60405190151581526020015b60405180910390f35b600f545b604051908152602001610339565b61035c610896565b6040516103399190612418565b61039261037736600461244b565b6008602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610339565b61032d6103b8366004612479565b610924565b6103dc6103cb3660046124a5565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610339565b6103467f0000000000000000000000000000000000000000000000b4aeaab10258f4000081565b61032d61042a366004612479565b610a92565b61034661043d366004612544565b6001600160a01b03166000908152600b602052604090205490565b61032d610466366004612561565b610aa7565b61047e6104793660046125a2565b610b6f565b604080516001600160a01b039093168352602083019190915201610339565b6104a5610ba9565b005b6104ce7f000000000000000000000000000000000000000000000000000000000000001281565b60405160ff9091168152602001610339565b6104a56104ee366004612561565b610c0f565b6104a561050136600461244b565b610cea565b6104a56105143660046125c4565b610d19565b6104a5610527366004612649565b610d6e565b61039261053a36600461244b565b610da8565b61034661054d366004612544565b610dfc565b610346610560366004612544565b60066020526000908152604090205481565b61034660115481565b6103467f0000000000000000000000000000000000000000000000000000000000000d0581565b61034660035481565b6105b3610e4c565b60405161033991906126de565b6104a5610ea4565b600054610392906001600160a01b031681565b6104a56105e9366004612544565b610f58565b61035c610fa4565b6104a5610604366004612722565b610fb1565b61032d610617366004612544565b600e6020526000908152604090205460ff1681565b601254610392906001600160a01b031681565b6104a561064d3660046125c4565b610ffc565b61032d610660366004612479565b611068565b600254610392906001600160a01b031681565b6104a56106863660046124a5565b61107c565b6104a56106993660046125c4565b611147565b61035c6106ac36600461244b565b61119c565b6104a56106bf366004612722565b6111d0565b61032d6106d236600461244b565b6000908152600a60205260409020546001600160a01b0316151590565b6103466106fd36600461244b565b61120e565b61035c61122f565b6103466107183660046127c8565b600760209081526000928352604080842090915290825290205481565b6104a561074336600461244b565b61123c565b61032d6107563660046127c8565b600960209081526000928352604080842090915290825290205460ff1681565b6104a561078436600461244b565b611256565b610346610797366004612544565b6001600160a01b03166000908152600c602052604090205490565b6104a56107c0366004612544565b611267565b60006001600160e01b031982167f80ac58cd00000000000000000000000000000000000000000000000000000000148061082857506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061085c57506001600160e01b031982167f2a55205a00000000000000000000000000000000000000000000000000000000145b8061089057507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b600480546108a3906127f6565b80601f01602080910402602001604051908101604052809291908181526020018280546108cf906127f6565b801561091c5780601f106108f15761010080835404028352916020019161091c565b820191906000526020600020905b8154815290600101906020018083116108ff57829003601f168201915b505050505081565b60007f0000000000000000000000000000000000000000000000000000000000000d0582111580156109565750600082115b15610a2d576000828152600a60205260409020546001600160a01b03163381148015906109a757506001600160a01b038116600090815260096020908152604080832033845290915290205460ff16155b156109c4576040516282b42960e81b815260040160405180910390fd5b60008381526008602090815260409182902080546001600160a01b0319166001600160a01b038881169182179092559251868152908416917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350610a89565b3360008181526007602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b50600192915050565b600081610a9e84610dfc565b10159392505050565b6001600160a01b038316600090815260076020908152604080832033845290915281205482811015610b205760405162461bcd60e51b815260206004820152601560248201527f4e6f7420656e6f75676820616c6c6f77616e63652e000000000000000000000060448201526064015b60405180910390fd5b6000198114610b5857610b338382612846565b6001600160a01b03861660009081526007602090815260408083203384529091529020555b610b6385858561131c565b50600195945050505050565b60125460115460009182916001600160a01b039091169061271090610b949086612859565b610b9e9190612870565b915091509250929050565b6000546001600160a01b03163314610bd3576040516282b42960e81b815260040160405180910390fd5b600080546001600160a01b031916815560405133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3565b610c1b3384848461153d565b6001600160a01b0382163b15801590610cc75750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af1158015610c96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cba9190612892565b6001600160e01b03191614155b15610ce557604051633da6393160e01b815260040160405180910390fd5b505050565b6000546001600160a01b03163314610d14576040516282b42960e81b815260040160405180910390fd5b601155565b6000546001600160a01b03163314610d43576040516282b42960e81b815260040160405180910390fd5b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610d98576040516282b42960e81b815260040160405180910390fd5b6010610da482826128ff565b5050565b6000818152600a60205260409020546001600160a01b031680610df7576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000610e066117b7565b6001600160a01b0383166000908152600c6020526040902054610e299190612859565b6001600160a01b0383166000908152600660205260409020546108909190612846565b6060600f805480602002602001604051908101604052809291908181526020018280548015610e9a57602002820191906000526020600020905b815481526020019060010190808311610e86575b5050505050905090565b6000546001600160a01b03163314610ece576040516282b42960e81b815260040160405180910390fd5b601254600160a01b900460ff1615610f285760405162461bcd60e51b815260206004820152601a60248201527f54726164696e6720697320616c726561647920656e61626c65640000000000006044820152606401610b17565b601280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b179055565b6000546001600160a01b03163314610f82576040516282b42960e81b815260040160405180910390fd5b601280546001600160a01b0319166001600160a01b0392909216919091179055565b600580546108a3906127f6565b610fb96117e9565b60005b8151811015610fef57610fe7828281518110610fda57610fda6129bf565b602002602001015161182c565b600101610fbc565b50610ff960018055565b50565b3360008181526009602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600061107533848461131c565b9392505050565b6110883386868661153d565b6001600160a01b0384163b158015906111225750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a02906110d29033908a908990899089906004016129d5565b6020604051808303816000875af11580156110f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111159190612892565b6001600160e01b03191614155b1561114057604051633da6393160e01b815260040160405180910390fd5b5050505050565b6000546001600160a01b03163314611171576040516282b42960e81b815260040160405180910390fd5b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b606060106111a983611a66565b6040516020016111ba929190612a29565b6040516020818303038152906040529050919050565b6111d86117e9565b60005b8151811015610fef576112068282815181106111f9576111f96129bf565b6020026020010151611b06565b6001016111db565b600f818154811061121e57600080fd5b600091825260209091200154905081565b601080546108a3906127f6565b6112446117e9565b61124d81611b06565b610ff960018055565b61125e6117e9565b61124d8161182c565b6000546001600160a01b03163314611291576040516282b42960e81b815260040160405180910390fd5b6001600160a01b0381166112d1576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000611329848484611c88565b833b15611388578161133a85610dfc565b10156113885760405162461bcd60e51b815260206004820152601960248201527f4e6f7420656e6f75676820746f6b656e2062616c616e63652e000000000000006044820152606401610b17565b60006113926117b7565b6001600160a01b038087166000818152600660205260408082208054948a16835290822054928252939450919290918691906113ce8386612846565b90915550506001600160a01b03861660009081526006602052604090208054860190556113fa87611d89565b158061141d57506001600160a01b0387166000908152600b602052604090205415155b1561147b576001600160a01b038716600090815260066020526040812054611446908590612870565b6114508585612870565b61145a9190612846565b905060005b818110156114785761147089611db2565b60010161145f565b50505b61148486611d89565b6114e35760006114948483612870565b6001600160a01b0388166000908152600660205260409020546114b8908690612870565b6114c29190612846565b905060005b818110156114e0576114d888611f25565b6001016114c7565b50505b856001600160a01b0316876001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e0314878760405161152891815260200190565b60405180910390a35060019695505050505050565b6000818152600a60205260409020546001600160a01b038481169116146115a65760405162461bcd60e51b815260206004820152601160248201527f4e6f74206f776e6572206f66204e46542e0000000000000000000000000000006044820152606401610b17565b6001600160a01b0382166115fc5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742073656e6420746f206e756c6c20616464726573732e000000006044820152606401610b17565b826001600160a01b0316846001600160a01b0316148061164157506001600160a01b0380841660009081526009602090815260408083209388168352929052205460ff165b8061166557506000818152600860205260409020546001600160a01b038581169116145b6116b15760405162461bcd60e51b815260206004820152601960248201527f4f70657261746f72206973206e6f7420617070726f7665642e000000000000006044820152606401610b17565b6116b96117b7565b6001600160a01b038416600090815260066020526040812080549091906116e1908490612846565b909155506116ef90506117b7565b6001600160a01b0383166000908152600660205260409020805490910190556117188382612054565b6117228282612224565b80826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4816001600160a01b0316836001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e0314876117a06117b7565b60405190815260200160405180910390a350505050565b60006117e47f0000000000000000000000000000000000000000000000000000000000000012600a612b94565b905090565b600260015403611825576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600155565b6000818152600a60205260409020546001600160a01b0316156118915760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742077726170206578697374696e6720746f6b656e2e00000000006044820152606401610b17565b6002546040517f6352211e000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169033908290636352211e90602401602060405180830381865afa1580156118f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191b9190612ba3565b6001600160a01b0316146119715760405162461bcd60e51b815260206004820152601a60248201527f596f7520646f206e6f74206f776e207468617420746f6b656e2e0000000000006044820152606401610b17565b6119796117b7565b611984906001612859565b33600090815260066020526040812080549091906119a3908490612bc0565b925050819055506001600360008282546119bd9190612bc0565b909155506119cd90503383612224565b604051632142170760e11b8152336004820152306024820152604481018390526001600160a01b038216906342842e0e90606401600060405180830381600087803b158015611a1b57600080fd5b505af1158015611a2f573d6000803e3d6000fd5b50506040518492503391506000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60606000611a73836122df565b600101905060008167ffffffffffffffff811115611a9357611a93612602565b6040519080825280601f01601f191660200182016040528015611abd576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084611ac757509392505050565b33611b1082610da8565b6001600160a01b031614611b665760405162461bcd60e51b815260206004820152601a60248201527f596f7520646f206e6f74206f776e207468617420746f6b656e2e0000000000006044820152606401610b17565b611b6e6117b7565b611b79906001612859565b3360009081526006602052604081208054909190611b98908490612846565b92505081905550600160036000828254611bb29190612846565b90915550611bc290503382612054565b6000818152600d60209081526040808320839055600a9091529081902080546001600160a01b03191690556002549051632142170760e11b8152306004820152336024820152604481018390526001600160a01b03909116906342842e0e90606401600060405180830381600087803b158015611c3e57600080fd5b505af1158015611c52573d6000803e3d6000fd5b50506040518392506000915033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a450565b601254600090600160a01b900460ff1680611cb057506000546001600160a01b038581169116145b80611cc857506000546001600160a01b038481169116145b80611ceb57506001600160a01b03841660009081526013602052604090205460ff165b80611d0e57506001600160a01b03831660009081526013602052604090205460ff165b905080611d835760405162461bcd60e51b815260206004820152603160248201527f54726164696e67206973206e6f7420656e61626c6564206f722061646472657360448201527f73206e6f742077686974656c69737465640000000000000000000000000000006064820152608401610b17565b50505050565b6001600160a01b0381166000908152600e602052604081205460ff16806108905750813b610890565b6001600160a01b038116611df2576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381166000908152600b602052604081208054611e1890600190612846565b81548110611e2857611e286129bf565b90600052602060002001549050600b6000836001600160a01b03166001600160a01b03168152602001908152602001600020805480611e6957611e69612bd3565b600082815260208082208301600019908101839055909201909255828252600d81526040808320839055600a825280832080546001600160a01b031990811690915560089092528083208054909216909155600f80546001810182559083527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80201839055518291906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b038116611f65576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600f805460009190611f7990600190612846565b81548110611f8957611f896129bf565b90600052602060002001549050600f805480611fa757611fa7612bd3565b600082815260208082208301600019908101839055909201909255828252600a905260409020546001600160a01b03161561200e576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120188282612224565b60405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000823b15612127576001600160a01b0383166000908152600c60205260409020805461208390600190612846565b81548110612093576120936129bf565b60009182526020808320909101546001600160a01b0386168352600c82526040808420868552600d909352909220548154929350839281106120d7576120d76129bf565b60009182526020808320909101929092556001600160a01b0385168152600c9091526040902080548061210c5761210c612bd3565b600190038181906000526020600020016000905590556121ed565b6001600160a01b0383166000908152600b60205260409020805461214d90600190612846565b8154811061215d5761215d6129bf565b60009182526020808320909101546001600160a01b0386168352600b82526040808420868552600d909352909220548154929350839281106121a1576121a16129bf565b60009182526020808320909101929092556001600160a01b0385168152600b909152604090208054806121d6576121d6612bd3565b600190038181906000526020600020016000905590555b6000828152600d6020908152604080832054938352808320939093559281526008909252902080546001600160a01b031916905550565b6000818152600a6020526040902080546001600160a01b0319166001600160a01b038416179055813b156122a2576001600160a01b0382166000818152600c6020908152604082208054600181810183558285529284200185905592909152905461228f9190612846565b6000828152600d60205260409020555050565b6001600160a01b0382166000818152600b6020908152604082208054600181810183558285529284200185905592909152905461228f9190612846565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612328577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612354576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061237257662386f26fc10000830492506010015b6305f5e100831061238a576305f5e100830492506008015b612710831061239e57612710830492506004015b606483106123b0576064830492506002015b600a83106108905760010192915050565b6001600160e01b031981168114610ff957600080fd5b6000602082840312156123e957600080fd5b8135611075816123c1565b60005b8381101561240f5781810151838201526020016123f7565b50506000910152565b60208152600082518060208401526124378160408501602087016123f4565b601f01601f19169190910160400192915050565b60006020828403121561245d57600080fd5b5035919050565b6001600160a01b0381168114610ff957600080fd5b6000806040838503121561248c57600080fd5b823561249781612464565b946020939093013593505050565b6000806000806000608086880312156124bd57600080fd5b85356124c881612464565b945060208601356124d881612464565b935060408601359250606086013567ffffffffffffffff808211156124fc57600080fd5b818801915088601f83011261251057600080fd5b81358181111561251f57600080fd5b89602082850101111561253157600080fd5b9699959850939650602001949392505050565b60006020828403121561255657600080fd5b813561107581612464565b60008060006060848603121561257657600080fd5b833561258181612464565b9250602084013561259181612464565b929592945050506040919091013590565b600080604083850312156125b557600080fd5b50508035926020909101359150565b600080604083850312156125d757600080fd5b82356125e281612464565b9150602083013580151581146125f757600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561264157612641612602565b604052919050565b6000602080838503121561265c57600080fd5b823567ffffffffffffffff8082111561267457600080fd5b818501915085601f83011261268857600080fd5b81358181111561269a5761269a612602565b6126ac601f8201601f19168501612618565b915080825286848285010111156126c257600080fd5b8084840185840137600090820190930192909252509392505050565b6020808252825182820181905260009190848201906040850190845b81811015612716578351835292840192918401916001016126fa565b50909695505050505050565b6000602080838503121561273557600080fd5b823567ffffffffffffffff8082111561274d57600080fd5b818501915085601f83011261276157600080fd5b81358181111561277357612773612602565b8060051b9150612784848301612618565b818152918301840191848101908884111561279e57600080fd5b938501935b838510156127bc578435825293850193908501906127a3565b98975050505050505050565b600080604083850312156127db57600080fd5b82356127e681612464565b915060208301356125f781612464565b600181811c9082168061280a57607f821691505b60208210810361282a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561089057610890612830565b808202811582820484141761089057610890612830565b60008261288d57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156128a457600080fd5b8151611075816123c1565b601f821115610ce5576000816000526020600020601f850160051c810160208610156128d85750805b601f850160051c820191505b818110156128f7578281556001016128e4565b505050505050565b815167ffffffffffffffff81111561291957612919612602565b61292d8161292784546127f6565b846128af565b602080601f831160018114612962576000841561294a5750858301515b600019600386901b1c1916600185901b1785556128f7565b600085815260208120601f198616915b8281101561299157888601518255948401946001909101908401612972565b50858210156129af5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b60006001600160a01b03808816835280871660208401525084604083015260806060830152826080830152828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b6000808454612a37816127f6565b60018281168015612a4f5760018114612a6457612a93565b60ff1984168752821515830287019450612a93565b8860005260208060002060005b85811015612a8a5781548a820152908401908201612a71565b50505082870194505b505050508351612aa78183602088016123f4565b01949350505050565b600181815b80851115612aeb578160001904821115612ad157612ad1612830565b80851615612ade57918102915b93841c9390800290612ab5565b509250929050565b600082612b0257506001610890565b81612b0f57506000610890565b8160018114612b255760028114612b2f57612b4b565b6001915050610890565b60ff841115612b4057612b40612830565b50506001821b610890565b5060208310610133831016604e8410600b8410161715612b6e575081810a610890565b612b788383612ab0565b8060001904821115612b8c57612b8c612830565b029392505050565b600061107560ff841683612af3565b600060208284031215612bb557600080fd5b815161107581612464565b8082018082111561089057610890612830565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220e154ee0a1d9563e65a41886e3587906712836023e4e1a1b2f854bf59a48c1f9664736f6c63430008180033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000ea869669210a69b035b382e0f2a498b87dc6a45c00000000000000000000000083b284118e2f134d496a62f90a53d682a6d6b10c
-----Decoded View---------------
Arg [0] : _owner (address): 0xeA869669210a69B035b382E0F2A498B87dc6a45C
Arg [1] : _wrappingContract (address): 0x83B284118E2f134d496A62F90a53d682a6d6b10C
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000ea869669210a69b035b382e0f2a498b87dc6a45c
Arg [1] : 00000000000000000000000083b284118e2f134d496a62f90a53d682a6d6b10c
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.