Contract 0xA0a81A526484b9499ce308a59ef71A4693D00Ebc

 
 
Txn Hash
Method
Block
From
To
Value [Txn Fee]
0x2af39ff48f9e24c4a646104b91978ba17a6c682d3fcbc3d6b543d81ad6e8ee6fSet Approval For...404776282023-03-18 5:19:187 days 2 hrs ago visualvibrations.nft  IN  0xa0a81a526484b9499ce308a59ef71a4693d00ebc0 MATIC0.002846257234117.134747703
0x7bd0d5fae3d84d8d731d79a69322ac47113d34555fc79c2362f524d8b93ebd81Set Approval For...404776252023-03-18 5:19:127 days 2 hrs ago visualvibrations.nft  IN  0xa0a81a526484b9499ce308a59ef71a4693d00ebc0 MATIC0.002846257234117.134747703
0x209e4014bacca3651d8a469fe69cc6150a99463a49ba02908b649f3c31386f78Set Approval For...404776232023-03-18 5:19:087 days 2 hrs ago visualvibrations.nft  IN  0xa0a81a526484b9499ce308a59ef71a4693d00ebc0 MATIC0.00290161187119.412810014
0xe0fb4209c7abcd943389e5b3562d4b0f4d95bca37b5447ca6ba3a924825db88dSet Approval For...404776222023-03-18 5:19:067 days 2 hrs ago visualvibrations.nft  IN  0xa0a81a526484b9499ce308a59ef71a4693d00ebc0 MATIC0.002775548853114.224818038
0x0e66aced987d6eacce89c062c4d933e2020e0fca291609194df55a666471079eSet Approval For...404776222023-03-18 5:19:067 days 2 hrs ago visualvibrations.nft  IN  0xa0a81a526484b9499ce308a59ef71a4693d00ebc0 MATIC0.002775548853114.224818038
0xc7d415960b0f18fce955cbdcd596ef247fb5616bfb4c8dae853591c0806fdbc9Safe Transfer Fr...398295682023-03-01 4:33:2324 days 3 hrs ago0x1ac1ca3665b5cd5fdd8bc76f924b76c2a2889d39 IN  0xa0a81a526484b9499ce308a59ef71a4693d00ebc0 MATIC0.0205220722181.3
0x463c6c253c9ddcd4ee36aaef0e77f7bc857e0c7eeac70122293b543eb9699814Set Approval For...398295572023-03-01 4:32:5924 days 3 hrs ago0xc3f1e47998513d5952e453bd55d9a89742f2ba43 IN  0xa0a81a526484b9499ce308a59ef71a4693d00ebc0 MATIC0.0109935969237.9
0x9784163345a2a794a2ab0a1fb0f0d9dab0235dd569fd7a890b2e188ad6eeaa36Set Approval For...396667362023-02-24 19:18:1328 days 12 hrs ago0xd568f8a4526b81c0f6c90768e014376d1ca386f7 IN  0xa0a81a526484b9499ce308a59ef71a4693d00ebc0 MATIC0.005608985745 121.377718411
0x56e879c4f1c5aa81262c9aac198720779cd86af4a9f9c6553a1071199868731fSet Approval For...396667112023-02-24 19:17:0728 days 12 hrs ago0x7d02cd6a19eeb550722e87c44273130617df2a2f IN  0xa0a81a526484b9499ce308a59ef71a4693d00ebc0 MATIC0.00532224889 115.172770349
0x02655c8de8b54a3a0927bb43a632be93955def33bc2a2381d5b5673a5c5d2399Transfer From396245352023-02-23 15:21:2529 days 16 hrs ago0x718dc3288aef6dacbe7f2d8e4585f43b96495256 IN  0xa0a81a526484b9499ce308a59ef71a4693d00ebc0 MATIC0.024828794639 199.116200642
0xd35aa681f4635e0f56bb0f258c21702401c6c1ee14e9be9a914fca51e775218bSet Approval For...392482582023-02-13 14:18:0339 days 17 hrs ago0x70357647840f7f2fb47b8587f405e95528ee41d5 IN  0xa0a81a526484b9499ce308a59ef71a4693d00ebc0 MATIC0.00644261287 244.863854301
0xdf096038cef1db3e37751ec38b50fc016a8deaef5959ec5caa1d7b6a4a7ff004Set Approval For...392479782023-02-13 14:08:0739 days 17 hrs ago0x70357647840f7f2fb47b8587f405e95528ee41d5 IN  0xa0a81a526484b9499ce308a59ef71a4693d00ebc0 MATIC0.009498019256 205.535895267
0x1962b783bce11c29c04a4fd234ece36d90bebeb63c8064a21120f096612364ffCreate Collectib...391818102023-02-11 18:29:2541 days 13 hrs ago0x5cb4ed7892cf925bb67c86aec992ca459c9c3ac4 IN  0xa0a81a526484b9499ce308a59ef71a4693d00ebc0 MATIC0.050644787986 184.558827983
0x209da623ac1d412e6093072d58b679272a4b327481d9c9cc0ed629c9430d0c37Create Collectib...391817532023-02-11 18:27:2341 days 13 hrs ago0x5cb4ed7892cf925bb67c86aec992ca459c9c3ac4 IN  0xa0a81a526484b9499ce308a59ef71a4693d00ebc0 MATIC0.057752933535 210.462204496
0x1a839d156896f715e3a3db2b51e4050290e3dface278144cc25b26467024d6e4Create Collectib...391815192023-02-11 18:18:3741 days 13 hrs ago0x5cb4ed7892cf925bb67c86aec992ca459c9c3ac4 IN  0xa0a81a526484b9499ce308a59ef71a4693d00ebc0 MATIC0.04904708434 178.736505011
0xbd4aab1ffd7f27a5a831d8af3b1a6edd4720fece3167bfdfdfa550dcaa52d3f6Create Collectib...391814492023-02-11 18:16:0941 days 13 hrs ago0x5cb4ed7892cf925bb67c86aec992ca459c9c3ac4 IN  0xa0a81a526484b9499ce308a59ef71a4693d00ebc0 MATIC0.074555148856 255.755030209
0x9d8cdc9179b3fe0801b8f15a7fcd6ee02e133dfabbed60146d5787f5038a61adSet Approval For...391814382023-02-11 18:15:4541 days 13 hrs ago0x5cb4ed7892cf925bb67c86aec992ca459c9c3ac4 IN  0xa0a81a526484b9499ce308a59ef71a4693d00ebc0 MATIC0.012425891032 268.894657814
0x800d9593941ebb26b03e8f82cc2bb028ea7ddb0f4c861425c25489f04aebb909Create Collectib...391365152023-02-10 13:35:5642 days 18 hrs ago0xb35e34902061758a6e5ccad646323ecfcf14e9b6 IN  0xa0a81a526484b9499ce308a59ef71a4693d00ebc0 MATIC0.112706331173 442.857433748
0x7cbfa52c1ed5d62f81cae4632df55560c2a2534baca7d74358be3b62a6aa1e0cCreate Collectib...391364062023-02-10 13:32:0442 days 18 hrs ago0xb35e34902061758a6e5ccad646323ecfcf14e9b6 IN  0xa0a81a526484b9499ce308a59ef71a4693d00ebc0 MATIC0.143023472105 561.982695758
0xf3d8c8ecec10c1acdc7dfe92680f5aac15933d6f3fd73c2a77f70fa5f2b17555Create Collectib...391363392023-02-10 13:29:4242 days 18 hrs ago0xb35e34902061758a6e5ccad646323ecfcf14e9b6 IN  0xa0a81a526484b9499ce308a59ef71a4693d00ebc0 MATIC0.141183111027 554.751357683
0x258c44745bac89235a0dbaebdf9d339342413f720a07a9f43ea9d7ae5356be67Create Collectib...391361832023-02-10 13:24:1042 days 18 hrs ago0xb35e34902061758a6e5ccad646323ecfcf14e9b6 IN  0xa0a81a526484b9499ce308a59ef71a4693d00ebc0 MATIC0.202172031948 736.783912232
0x3c0a5e08df6150b16b0a5d5a9cf0c3e7591ef6e7829eaef8426b14bad9014b03Create Collectib...391361272023-02-10 13:22:1042 days 18 hrs ago0xb35e34902061758a6e5ccad646323ecfcf14e9b6 IN  0xa0a81a526484b9499ce308a59ef71a4693d00ebc0 MATIC0.230832240192 841.231496558
0x93cb9b104fac2c83f34f77a34504e755aaf4cfb5282682163c84acb08fa669abCreate Collectib...391360502023-02-10 13:19:2842 days 18 hrs ago0xb35e34902061758a6e5ccad646323ecfcf14e9b6 IN  0xa0a81a526484b9499ce308a59ef71a4693d00ebc0 MATIC0.150389727672 548.047548094
0xecbef9b5a37a70af42ba8a80dc8d9e40c36192ab2f378bbe6ef3c63a50fa24ceCreate Collectib...391359462023-02-10 13:15:4642 days 18 hrs ago0xb35e34902061758a6e5ccad646323ecfcf14e9b6 IN  0xa0a81a526484b9499ce308a59ef71a4693d00ebc0 MATIC0.095741252553 376.19648309
0x573d40e1238e189f8eebcd4eff7e7df64e4162a90acb583b141eb7635fb21cc0Create Collectib...390842512023-02-09 5:04:5544 days 2 hrs ago visualvibrations.nft  IN  0xa0a81a526484b9499ce308a59ef71a4693d00ebc0 MATIC0.050711509156 184.810053851
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MaticArt721

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 1 : MaticArt721.sol
/**
 *Submitted for verification at polygonscan.com on 2022-01-06
*/

// SPDX-License-Identifier:UNLICENSED
pragma solidity ^0.8.4;

library Strings {

    function toString(uint256 value) internal pure returns (string memory) {

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        uint256 index = digits - 1;
        temp = value;
        while (temp != 0) {
            buffer[index--] = bytes1(uint8(48 + temp % 10));
            temp /= 10;
        }
        return string(buffer);
    }
}

library EnumerableMap {

    struct MapEntry {
        bytes32 _key;
        bytes32 _value;
    }

    struct Map {
        MapEntry[] _entries;

        mapping (bytes32 => uint256) _indexes;
    }

    function _set(Map storage map, bytes32 key, bytes32 value) private returns (bool) {
        uint256 keyIndex = map._indexes[key];

        if (keyIndex == 0) { // Equivalent to !contains(map, key)
            map._entries.push(MapEntry({ _key: key, _value: value }));
            map._indexes[key] = map._entries.length;
            return true;
        } else {
            map._entries[keyIndex - 1]._value = value;
            return false;
        }
    }

    function _remove(Map storage map, bytes32 key) private returns (bool) {
        uint256 keyIndex = map._indexes[key];

        if (keyIndex != 0) { // Equivalent to contains(map, key)
            uint256 toDeleteIndex = keyIndex - 1;
            uint256 lastIndex = map._entries.length - 1;
            MapEntry storage lastEntry = map._entries[lastIndex];

            map._entries[toDeleteIndex] = lastEntry;
            map._indexes[lastEntry._key] = toDeleteIndex + 1; // All indexes are 1-based

            map._entries.pop();

            delete map._indexes[key];

            return true;
        } else {
            return false;
        }
    }

    function _contains(Map storage map, bytes32 key) private view returns (bool) {
        return map._indexes[key] != 0;
    }

    function _length(Map storage map) private view returns (uint256) {
        return map._entries.length;
    }

    function _at(Map storage map, uint256 index) private view returns (bytes32, bytes32) {
        require(map._entries.length > index, "EnumerableMap: index out of bounds");

        MapEntry storage entry = map._entries[index];
        return (entry._key, entry._value);
    }

    function _tryGet(Map storage map, bytes32 key) private view returns (bool, bytes32) {
        uint256 keyIndex = map._indexes[key];
        if (keyIndex == 0) return (false, 0); // Equivalent to contains(map, key)
        return (true, map._entries[keyIndex - 1]._value); // All indexes are 1-based
    }

    function _get(Map storage map, bytes32 key) private view returns (bytes32) {
        uint256 keyIndex = map._indexes[key];
        require(keyIndex != 0, "EnumerableMap: nonexistent key"); // Equivalent to contains(map, key)
        return map._entries[keyIndex - 1]._value; // All indexes are 1-based
    }

    function _get(Map storage map, bytes32 key, string memory errorMessage) private view returns (bytes32) {
        uint256 keyIndex = map._indexes[key];
        require(keyIndex != 0, errorMessage); // Equivalent to contains(map, key)
        return map._entries[keyIndex - 1]._value; // All indexes are 1-based
    }

    struct UintToAddressMap {
        Map _inner;
    }

    function set(UintToAddressMap storage map, uint256 key, address value) internal returns (bool) {
        return _set(map._inner, bytes32(key), bytes32(uint256(uint160(value))));
    }

    function remove(UintToAddressMap storage map, uint256 key) internal returns (bool) {
        return _remove(map._inner, bytes32(key));
    }

    function contains(UintToAddressMap storage map, uint256 key) internal view returns (bool) {
        return _contains(map._inner, bytes32(key));
    }

    function length(UintToAddressMap storage map) internal view returns (uint256) {
        return _length(map._inner);
    }

    function at(UintToAddressMap storage map, uint256 index) internal view returns (uint256, address) {
        (bytes32 key, bytes32 value) = _at(map._inner, index);
        return (uint256(key), address(uint160(uint256(value))));
    }

    function tryGet(UintToAddressMap storage map, uint256 key) internal view returns (bool, address) {
        (bool success, bytes32 value) = _tryGet(map._inner, bytes32(key));
        return (success, address(uint160(uint256(value))));
    }

    function get(UintToAddressMap storage map, uint256 key) internal view returns (address) {
        return address(uint160(uint256(_get(map._inner, bytes32(key)))));
    }

    function get(UintToAddressMap storage map, uint256 key, string memory errorMessage) internal view returns (address) {
        return address(uint160(uint256(_get(map._inner, bytes32(key), errorMessage))));
    }
}

library EnumerableSet {
    struct Set {
        bytes32[] _values;
        mapping (bytes32 => uint256) _indexes;
    }

    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    function _remove(Set storage set, bytes32 value) private returns (bool) {
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) { // Equivalent to contains(set, value)
            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;
            bytes32 lastvalue = set._values[lastIndex];

            set._values[toDeleteIndex] = lastvalue;
            set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based

            set._values.pop();

            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        require(set._values.length > index, "EnumerableSet: index out of bounds");
        return set._values[index];
    }

    struct Bytes32Set {
        Set _inner;
    }

    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    struct AddressSet {
        Set _inner;
    }

    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }

    struct UintSet {
        Set _inner;
    }

    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }
}

library Address {

    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */

library SafeMath {

    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b > a) return (false, 0);
        return (true, a - b);
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (a == 0) return (true, 0);
        uint256 c = a * b;
        if (c / a != b) return (false, 0);
        return (true, c);
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a / b);
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a % b);
    }

    /**
    * @dev Adds two numbers, throws on overflow.
    */

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }


    /**
    * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
    */    

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "SafeMath: subtraction overflow");
        return a - b;
    }

    /**
    * @dev Multiplies two numbers, throws on overflow.
    */

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) return 0;
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }


    /**
    * @dev Integer division of two numbers, truncating the quotient.
    */

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: division by zero");
        return a / b;
    }

        /**
    * @dev Integer modulo of two numbers, truncating the remainder.
    */ 

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: modulo by zero");
        return a % b;
    }

}  

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);
}

abstract contract ERC165 is IERC165 {

    bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;

    mapping(bytes4 => bool) private _supportedInterfaces;

    constructor () {
        _registerInterface(_INTERFACE_ID_ERC165);
    }

    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return _supportedInterfaces[interfaceId];
    }

    function _registerInterface(bytes4 interfaceId) internal virtual {
        require(interfaceId != 0xffffffff, "ERC165: invalid interface id");
        _supportedInterfaces[interfaceId] = true;
    }
}

interface IERC721 is IERC165 {

    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    event URI(string value, uint256 indexed id);

    event tokenBaseURI(string value);

    function balanceOf(address owner) external view returns (uint256 balance);

    function royaltyFee(uint256 tokenId) external view  returns(uint256);
        
    function getCreator(uint256 tokenId) external view returns(address);

    function ownerOf(uint256 tokenId) external view returns (address owner);

    function safeTransferFrom(address from, address to, uint256 tokenId) external;

    function transferFrom(address from, address to, uint256 tokenId) external;

    function approve(address to, uint256 tokenId) external;

    function getApproved(uint256 tokenId) external view returns (address operator);

    function setApprovalForAll(address operator, bool _approved) external;

    function isApprovedForAll(address owner, address operator) external view returns (bool);

    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
}


interface IERC721Receiver {

    function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);
}

interface IERC721Enumerable is IERC721 {

    function totalSupply() external view returns (uint256);

    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    function tokenByIndex(uint256 index) external view returns (uint256);
}

interface IERC721Metadata is IERC721 {

    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function tokenURI(uint256 tokenId) external view returns (string memory);
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return payable(msg.sender);
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

contract ERC721 is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable {
    using SafeMath for uint256;
    using Address for address;
    using EnumerableSet for EnumerableSet.UintSet;
    using EnumerableMap for EnumerableMap.UintToAddressMap;
    using Strings for uint256;

    bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;

    // Mapping from token ID to account balances

    mapping (address => EnumerableSet.UintSet) private _holderTokens;

    EnumerableMap.UintToAddressMap private _tokenOwners;

     // Mapping from tokenId to operator approvals

    mapping (uint256 => address) private _tokenApprovals;

    // Mapping from account to operator approvals

    mapping (address => mapping (address => bool)) private _operatorApprovals;

    string private _name;

    string private _symbol;

    // mapping for token URIs

    mapping (uint256 => string) private _tokenURIs;

   // mapping for token royaltyFee    

    mapping(uint256 => uint256) private _royaltyFee;

  // mapping for token creator

    mapping (uint256 => address) private _creator;

    string private _baseURI;

    bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;

    bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;

    bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;

    constructor (string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;

        _registerInterface(_INTERFACE_ID_ERC721);
        _registerInterface(_INTERFACE_ID_ERC721_METADATA);
        _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE);
    }

    /**
        @notice Get the Token balance of an account's.
        @param owner  The address of the token holder
        @return        The account's balance of the Token type requested
     */

    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _holderTokens[owner].length();
    }

    /**
        @notice Get the owner of tokenId.
        @param tokenId  The tokenId of the token holder
        @return        The current owner of the requested tokenId
     */

    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        return _tokenOwners.get(tokenId, "ERC721: owner query for nonexistent token");
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = baseURI();

        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }
        return string(abi.encodePacked(base, tokenId.toString()));
    }

    function baseURI() public view virtual returns (string memory) {
        return _baseURI;
    }

    function royaltyFee(uint256 tokenId) public view override returns(uint256) {
        return _royaltyFee[tokenId];
    }

    function getCreator(uint256 tokenId) public view override returns(address) {
        return _creator[tokenId];
    }

    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        return _holderTokens[owner].at(index);
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _tokenOwners.length();
    }

    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        (uint256 tokenId, ) = _tokenOwners.at(index);
        return tokenId;
    }

    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(_msgSender() == owner || ERC721.isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
        @notice Enable or disable approval for a third party ("operator") to manage all of the caller's tokens.
        @dev MUST emit the ApprovalForAll event on success.
        @param operator  Address to add to the set of authorized operators
        @param approved  True if the operator is approved, false to revoke approval
    */

    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

    /**
        @notice Queries the approval status of an operator for a given owner.
        @param owner     The owner of the Tokens
        @param operator  Address of authorized operator
        @return           True if the operator is approved, false if not
    */

    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    function transferFrom(address from, address to, uint256 tokenId) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }


    /**
        @notice Transfers `_value` amount of an `_id` from the `_from` address to the `_to` address specified (with safety call).
        @dev Caller must be approved to manage the tokens being transferred out of the `_from` account (see "Approval" section of the standard).
        MUST revert if `_to` is the zero address.
        MUST revert if balance of holder for token `_id` is lower than the `_value` sent.
        MUST revert on any other error.
        MUST emit the `TransferSingle` event to reflect the balance change (see "Safe Transfer Rules" section of the standard).
        After the above conditions are met, this function MUST check if `_to` is a smart contract (e.g. code size > 0). If so, it MUST call `onERC1155Received` on `_to` and act appropriately (see "Safe Transfer Rules" section of the standard).
        @param from    Source address
        @param to      Target address
        @param tokenId      ID of the token type.
        @param _data    Additional data with no specified format, MUST be sent unaltered in call to `onERC1155Received` on `_to`
    */

    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);

    }

    function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _tokenOwners.contains(tokenId);
    }

    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || ERC721.isApprovedForAll(owner, spender));
    }

    function _safeMint(address to, uint256 tokenId, uint256 fee) internal virtual {
        _safeMint(to, tokenId, fee, "");
    }

    function _safeMint(address to, uint256 tokenId, uint256 fee, bytes memory _data) internal virtual {
        _mint(to, tokenId, fee);
        require(_checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    function _mint(address to, uint256 tokenId, uint256 fee) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _holderTokens[to].add(tokenId);

        _tokenOwners.set(tokenId, to);
        _creator[tokenId] = msg.sender;
        _royaltyFee[tokenId] = fee;

        emit Transfer(address(0), to, tokenId);
       
    }

     /**
     * @dev Internal function to burn a specific token.
     * Reverts if the token does not exist.
     * Deprecated, use {ERC721-_burn} instead.
     * required msg.sender must be owner of the token.
     * @param tokenId uint256 Token being burned
     */

    function _burn(uint256 tokenId) internal virtual {
        require(msg.sender == ownerOf(tokenId),"caller not owner");
        address owner = ERC721.ownerOf(tokenId); // internal owner

        _beforeTokenTransfer(owner, address(0), tokenId);

        _approve(address(0), tokenId);

        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }

        _holderTokens[owner].remove(tokenId);

        _tokenOwners.remove(tokenId);

        emit Transfer(owner, address(0), tokenId);
    }

    function _transfer(address from, address to, uint256 tokenId) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); // internal owner
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        _approve(address(0), tokenId);

        _holderTokens[from].remove(tokenId);
        _holderTokens[to].add(tokenId);

        _tokenOwners.set(tokenId, to);

        emit Transfer(from, to, tokenId);
    }

     /**
     * @dev Internal function to set the token URI for a given token.
     * Reverts if the token ID does not exist.
     * @param tokenId uint256 ID of the token to set its URI
     * @param _tokenURI string URI to assign
     */

    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), "ERC721Metadata: URI set of nonexistent token");
        _tokenURIs[tokenId] = _tokenURI;
         emit URI(_tokenURI, tokenId);
    }

    function _setBaseURI(string memory baseURI_) internal virtual {
        _baseURI = baseURI_;
        emit tokenBaseURI(baseURI_);
    }

    function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)
        private returns (bool)
    {
        if (!to.isContract()) {
            return true;
        }
        bytes memory returndata = to.functionCall(abi.encodeWithSelector(
            IERC721Receiver(to).onERC721Received.selector,
            _msgSender(),
            from,
            tokenId,
            _data
        ), "ERC721: transfer to non ERC721Receiver implementer");
        bytes4 retval = abi.decode(returndata, (bytes4));
        return (retval == _ERC721_RECEIVED);
    }

    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId); // internal owner
    }

    function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { }
}

contract MaticArt721 is ERC721 {
    event OwnershipTransferred(address indexed newOwner, address indexed owner);

    uint256 public tokenCounter;
    address public owner;

    struct Sign {
        uint8 v;
        bytes32 r;
        bytes32 s;
    }

    constructor (string memory name, string memory symbol, string memory tokenURIPrefix) ERC721 (name, symbol){
        tokenCounter = 1;
        owner = msg.sender;
        _setBaseURI(tokenURIPrefix);
    }

    modifier onlyOwner() {
        require(owner == msg.sender, "Ownable: caller is not the owner");
        _;
    }

    function transferOwnership(address newOwner) public onlyOwner returns(bool){
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(newOwner, owner);
        owner = newOwner;
        return true;
    }

    function verifySign(string memory tokenURI, address caller, Sign memory sign) internal view {
        bytes32 hash = keccak256(abi.encodePacked(this, caller, tokenURI));
        require(owner == ecrecover(keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)), sign.v, sign.r, sign.s), "Owner sign verification failed");
    }

    
    /**
     * @dev Internal function to mint a new token.
     * Reverts if the given token ID already exists.
     * @param sign struct combination of uint8, bytes32, bytes32 are v, r, s.
     * @param tokenURI string memory URI of the token to be minted.
     * @param fee uint256 royalty of the token to be minted.
     */

    function createCollectible(string memory tokenURI, uint256 fee, Sign memory sign) public returns (uint256) {
        uint256 newItemId = tokenCounter;
        verifySign(tokenURI, msg.sender, sign);
        _safeMint(msg.sender, newItemId, fee);
        _setTokenURI(newItemId, tokenURI);
        tokenCounter = tokenCounter + 1;
        return newItemId;
    }

    function setBaseURI(string memory _baseURI) public onlyOwner{
        _setBaseURI(_baseURI);
    }
    
    function burn(uint256 tokenId) public {
        require(_exists(tokenId), "ERC721: nonexistent token");
        _burn(tokenId);
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"tokenURIPrefix","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","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":"newOwner","type":"address"},{"indexed":true,"internalType":"address","name":"owner","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":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"}],"name":"tokenBaseURI","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"tokenURI","type":"string"},{"internalType":"uint256","name":"fee","type":"uint256"},{"components":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct MaticArt721.Sign","name":"sign","type":"tuple"}],"name":"createCollectible","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getCreator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"royaltyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","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":"tokenId","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":"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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b50604051620028cf380380620028cf8339810160408190526200003491620002e2565b8282620000486301ffc9a760e01b620000d7565b81516200005d906006906020850190620001ad565b50805162000073906007906020840190620001ad565b50620000866380ac58cd60e01b620000d7565b62000098635b5e139f60e01b620000d7565b620000aa63780e9d6360e01b620000d7565b50506001600c55600d80546001600160a01b03191633179055620000ce816200015b565b5050506200042a565b6001600160e01b03198082161415620001365760405162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015260640160405180910390fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b80516200017090600b906020840190620001ad565b507f5514cc7324ac64a875ba50a1849367d39c8b030fe0f563c3c7142984552bc30681604051620001a291906200036f565b60405180910390a150565b828054620001bb90620003d7565b90600052602060002090601f016020900481019282620001df57600085556200022a565b82601f10620001fa57805160ff19168380011785556200022a565b828001600101855582156200022a579182015b828111156200022a5782518255916020019190600101906200020d565b50620002389291506200023c565b5090565b5b808211156200023857600081556001016200023d565b600082601f83011262000264578081fd5b81516001600160401b038082111562000281576200028162000414565b604051601f8301601f19908116603f01168101908282118183101715620002ac57620002ac62000414565b81604052838152866020858801011115620002c5578485fd5b620002d8846020830160208901620003a4565b9695505050505050565b600080600060608486031215620002f7578283fd5b83516001600160401b03808211156200030e578485fd5b6200031c8783880162000253565b9450602086015191508082111562000332578384fd5b620003408783880162000253565b9350604086015191508082111562000356578283fd5b50620003658682870162000253565b9150509250925092565b602081526000825180602084015262000390816040850160208701620003a4565b601f01601f19169190910160400192915050565b60005b83811015620003c1578181015183820152602001620003a7565b83811115620003d1576000848401525b50505050565b600181811c90821680620003ec57607f821691505b602082108114156200040e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b612495806200043a6000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c80636c0360eb116100de578063c57dc23511610097578063d082e38111610071578063d082e3811461034c578063d48e638a14610355578063e985e9c51461037e578063f2fde38b146103ba57600080fd5b8063c57dc23514610306578063c7ed93f214610326578063c87b56dd1461033957600080fd5b80636c0360eb146102aa57806370a08231146102b25780638da5cb5b146102c557806395d89b41146102d8578063a22cb465146102e0578063b88d4fde146102f357600080fd5b80632f745c59116101305780632f745c591461023857806342842e0e1461024b57806342966c681461025e5780634f6ccce71461027157806355f804b3146102845780636352211e1461029757600080fd5b806301ffc9a71461017857806306fdde03146101ba578063081812fc146101cf578063095ea7b3146101fa57806318160ddd1461020f57806323b872dd14610225575b600080fd5b6101a5610186366004612034565b6001600160e01b03191660009081526020819052604090205460ff1690565b60405190151581526020015b60405180910390f35b6101c26103cd565b6040516101b19190612258565b6101e26101dd366004612146565b61045f565b6040516001600160a01b0390911681526020016101b1565b61020d61020836600461200b565b6104ec565b005b610217610602565b6040519081526020016101b1565b61020d610233366004611f1d565b610613565b61021761024636600461200b565b610644565b61020d610259366004611f1d565b61066f565b61020d61026c366004612146565b61068a565b61021761027f366004612146565b6106eb565b61020d61029236600461206c565b610701565b6101e26102a5366004612146565b610764565b6101c261078c565b6102176102c0366004611ed1565b61079b565b600d546101e2906001600160a01b031681565b6101c2610827565b61020d6102ee366004611fd1565b610836565b61020d610301366004611f58565b6108fb565b610217610314366004612146565b60009081526009602052604090205490565b61021761033436600461209f565b610933565b6101c2610347366004612146565b610974565b610217600c5481565b6101e2610363366004612146565b6000908152600a60205260409020546001600160a01b031690565b6101a561038c366004611eeb565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6101a56103c8366004611ed1565b610ae6565b6060600680546103dc90612342565b80601f016020809104026020016040519081016040528092919081815260200182805461040890612342565b80156104555780601f1061042a57610100808354040283529160200191610455565b820191906000526020600020905b81548152906001019060200180831161043857829003601f168201915b5050505050905090565b600061046a82610c07565b6104d05760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006104f782610764565b9050806001600160a01b0316836001600160a01b031614156105655760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016104c7565b336001600160a01b03821614806105815750610581813361038c565b6105f35760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016104c7565b6105fd8383610c14565b505050565b600061060e6002610c82565b905090565b61061d3382610c8c565b6106395760405162461bcd60e51b81526004016104c79061226b565b6105fd838383610d76565b6001600160a01b03821660009081526001602052604081206106669083610ef7565b90505b92915050565b6105fd838383604051806020016040528060008152506108fb565b61069381610c07565b6106df5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a206e6f6e6578697374656e7420746f6b656e0000000000000060448201526064016104c7565b6106e881610f03565b50565b6000806106f9600284611019565b509392505050565b600d546001600160a01b0316331461075b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104c7565b6106e881611035565b6000610669826040518060600160405280602981526020016124376029913960029190611083565b6060600b80546103dc90612342565b60006001600160a01b0382166108065760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016104c7565b6001600160a01b038216600090815260016020526040902061066990610c82565b6060600780546103dc90612342565b6001600160a01b03821633141561088f5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016104c7565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6109053383610c8c565b6109215760405162461bcd60e51b81526004016104c79061226b565b61092d84848484611090565b50505050565b600c5460009061094485338561110e565b61094f338286611251565b610959818661126c565b600c546109679060016122bc565b600c5590505b9392505050565b606061097f82610c07565b6109e35760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016104c7565b600082815260086020526040812080546109fc90612342565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2890612342565b8015610a755780601f10610a4a57610100808354040283529160200191610a75565b820191906000526020600020905b815481529060010190602001808311610a5857829003601f168201915b505050505090506000610a8661078c565b9050805160001415610a99575092915050565b815115610acb578082604051602001610ab39291906121ec565b60405160208183030381529060405292505050919050565b80610ad585611332565b604051602001610ab39291906121ec565b600d546000906001600160a01b03163314610b435760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104c7565b6001600160a01b038216610ba85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104c7565b600d546040516001600160a01b03918216918416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350600d80546001600160a01b0319166001600160a01b03831617905560015b919050565b6000610669600283611465565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610c4982610764565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000610669825490565b6000610c9782610c07565b610cf85760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016104c7565b6000610d0383610764565b9050806001600160a01b0316846001600160a01b03161480610d3e5750836001600160a01b0316610d338461045f565b6001600160a01b0316145b80610d6e57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316610d8982610764565b6001600160a01b031614610df15760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016104c7565b6001600160a01b038216610e535760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016104c7565b610e5e600082610c14565b6001600160a01b0383166000908152600160205260409020610e80908261147d565b506001600160a01b0382166000908152600160205260409020610ea39082611489565b50610eb060028284611495565b5080826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061066683836114ab565b610f0c81610764565b6001600160a01b0316336001600160a01b031614610f5f5760405162461bcd60e51b815260206004820152601060248201526f31b0b63632b9103737ba1037bbb732b960811b60448201526064016104c7565b6000610f6a82610764565b9050610f77600083610c14565b60008281526008602052604090208054610f9090612342565b159050610fae576000828152600860205260408120610fae91611d52565b6001600160a01b0381166000908152600160205260409020610fd0908361147d565b50610fdc60028361153f565b5060405182906000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6000808080611028868661154b565b9097909650945050505050565b805161104890600b906020840190611d8c565b507f5514cc7324ac64a875ba50a1849367d39c8b030fe0f563c3c7142984552bc306816040516110789190612258565b60405180910390a150565b6000610d6e8484846115f6565b61109b848484610d76565b6110a78484848461166d565b61092d5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60648201526084016104c7565b6000308385604051602001611125939291906121a6565b60405160208183030381529060405280519060200120905060018160405160200161117c91907f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b60408051601f19818403018152828252805160209182012086518783015188850151600087529386018086529290925260ff16928401929092526060830191909152608082015260a0016020604051602081039080840390855afa1580156111e8573d6000803e3d6000fd5b5050604051601f190151600d546001600160a01b03908116911614905061092d5760405162461bcd60e51b815260206004820152601e60248201527f4f776e6572207369676e20766572696669636174696f6e206661696c6564000060448201526064016104c7565b6105fd8383836040518060200160405280600081525061173e565b61127582610c07565b6112d65760405162461bcd60e51b815260206004820152602c60248201527f4552433732314d657461646174613a2055524920736574206f66206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016104c7565b600082815260086020908152604090912082516112f592840190611d8c565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b826040516113269190612258565b60405180910390a25050565b6060816113565750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611380578061136a8161237d565b91506113799050600a836122d4565b915061135a565b60008167ffffffffffffffff8111156113a957634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156113d3576020820181803683370190505b50905060006113e36001846122e8565b90508593505b831561145c576113fa600a85612398565b6114059060306122bc565b60f81b82826114138161232b565b93508151811061143357634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611455600a856122d4565b93506113e9565b50949350505050565b60008181526001830160205260408120541515610666565b60006106668383611756565b60006106668383611873565b6000610d6e84846001600160a01b0385166118c2565b815460009082106115095760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604482015261647360f01b60648201526084016104c7565b82600001828154811061152c57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905092915050565b60006106668383611971565b8154600090819083106115ab5760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e604482015261647360f01b60648201526084016104c7565b60008460000184815481106115d057634e487b7160e01b600052603260045260246000fd5b906000526020600020906002020190508060000154816001015492509250509250929050565b600082815260018401602052604081205482816116265760405162461bcd60e51b81526004016104c79190612258565b50846116336001836122e8565b8154811061165157634e487b7160e01b600052603260045260246000fd5b9060005260206000209060020201600101549150509392505050565b60006001600160a01b0384163b61168657506001610d6e565b6000611707630a85bd0160e11b338887876040516024016116aa949392919061221b565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050604051806060016040528060328152602001612405603291396001600160a01b0388169190611aa2565b905060008180602001905181019061171f9190612050565b6001600160e01b031916630a85bd0160e11b1492505050949350505050565b611749848484611ab1565b6110a7600085858461166d565b6000818152600183016020526040812054801561186957600061177a6001836122e8565b855490915060009061178e906001906122e8565b905060008660000182815481106117b557634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050808760000184815481106117e657634e487b7160e01b600052603260045260246000fd5b6000918252602090912001556117fd8360016122bc565b6000828152600189016020526040902055865487908061182d57634e487b7160e01b600052603160045260246000fd5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610669565b6000915050610669565b60008181526001830160205260408120546118ba57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610669565b506000610669565b60008281526001840160205260408120548061192757505060408051808201825283815260208082018481528654600181810189556000898152848120955160029093029095019182559151908201558654868452818801909252929091205561096d565b82856119346001846122e8565b8154811061195257634e487b7160e01b600052603260045260246000fd5b906000526020600020906002020160010181905550600091505061096d565b600081815260018301602052604081205480156118695760006119956001836122e8565b85549091506000906119a9906001906122e8565b905060008660000182815481106119d057634e487b7160e01b600052603260045260246000fd5b9060005260206000209060020201905080876000018481548110611a0457634e487b7160e01b600052603260045260246000fd5b60009182526020909120825460029092020190815560019182015490820155611a2e9084906122bc565b815460009081526001890160205260409020558654879080611a6057634e487b7160e01b600052603160045260246000fd5b60008281526020808220600260001990940193840201828155600190810183905592909355888152898201909252604082209190915594506106699350505050565b6060610d6e8484600085611bf1565b6001600160a01b038316611b075760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016104c7565b611b1082610c07565b15611b5d5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016104c7565b6001600160a01b0383166000908152600160205260409020611b7f9083611489565b50611b8c60028385611495565b506000828152600a6020908152604080832080546001600160a01b0319163317905560099091528082208390555183916001600160a01b038616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4505050565b606082471015611c525760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016104c7565b843b611ca05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104c7565b600080866001600160a01b03168587604051611cbc919061218a565b60006040518083038185875af1925050503d8060008114611cf9576040519150601f19603f3d011682016040523d82523d6000602084013e611cfe565b606091505b5091509150611d0e828286611d19565b979650505050505050565b60608315611d2857508161096d565b825115611d385782518084602001fd5b8160405162461bcd60e51b81526004016104c79190612258565b508054611d5e90612342565b6000825580601f10611d6e575050565b601f0160209004906000526020600020908101906106e89190611e10565b828054611d9890612342565b90600052602060002090601f016020900481019282611dba5760008555611e00565b82601f10611dd357805160ff1916838001178555611e00565b82800160010185558215611e00579182015b82811115611e00578251825591602001919060010190611de5565b50611e0c929150611e10565b5090565b5b80821115611e0c5760008155600101611e11565b600067ffffffffffffffff80841115611e4057611e406123d8565b604051601f8501601f19908116603f01168101908282118183101715611e6857611e686123d8565b81604052809350858152868686011115611e8157600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114610c0257600080fd5b600082601f830112611ec2578081fd5b61066683833560208501611e25565b600060208284031215611ee2578081fd5b61066682611e9b565b60008060408385031215611efd578081fd5b611f0683611e9b565b9150611f1460208401611e9b565b90509250929050565b600080600060608486031215611f31578081fd5b611f3a84611e9b565b9250611f4860208501611e9b565b9150604084013590509250925092565b60008060008060808587031215611f6d578081fd5b611f7685611e9b565b9350611f8460208601611e9b565b925060408501359150606085013567ffffffffffffffff811115611fa6578182fd5b8501601f81018713611fb6578182fd5b611fc587823560208401611e25565b91505092959194509250565b60008060408385031215611fe3578182fd5b611fec83611e9b565b915060208301358015158114612000578182fd5b809150509250929050565b6000806040838503121561201d578182fd5b61202683611e9b565b946020939093013593505050565b600060208284031215612045578081fd5b813561096d816123ee565b600060208284031215612061578081fd5b815161096d816123ee565b60006020828403121561207d578081fd5b813567ffffffffffffffff811115612093578182fd5b610d6e84828501611eb2565b600080600083850360a08112156120b4578384fd5b843567ffffffffffffffff808211156120cb578586fd5b6120d788838901611eb2565b9550602087013594506060603f19840112156120f1578384fd5b60405192506060830191508282108183111715612110576121106123d8565b50604090815285013560ff81168114612127578283fd5b8152606085013560208201526080909401356040850152509093909250565b600060208284031215612157578081fd5b5035919050565b600081518084526121768160208601602086016122ff565b601f01601f19169290920160200192915050565b6000825161219c8184602087016122ff565b9190910192915050565b60006bffffffffffffffffffffffff19808660601b168352808560601b1660148401525082516121dd8160288501602087016122ff565b91909101602801949350505050565b600083516121fe8184602088016122ff565b8351908301906122128183602088016122ff565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061224e9083018461215e565b9695505050505050565b602081526000610666602083018461215e565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b600082198211156122cf576122cf6123ac565b500190565b6000826122e3576122e36123c2565b500490565b6000828210156122fa576122fa6123ac565b500390565b60005b8381101561231a578181015183820152602001612302565b8381111561092d5750506000910152565b60008161233a5761233a6123ac565b506000190190565b600181811c9082168061235657607f821691505b6020821081141561237757634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612391576123916123ac565b5060010190565b6000826123a7576123a76123c2565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146106e857600080fdfe4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656ea2646970667358221220dbf6812d6abfa05555fc03cf4756e3bb81c04acd9827b777ce0f1b442564c51c64736f6c63430008040033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000214d415449432e4152542020204e46542046524545204d41524b455420504c4143450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034e46540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002268747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f000000000000000000000000000000000000000000000000000000000000

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000214d415449432e4152542020204e46542046524545204d41524b455420504c4143450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034e46540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002268747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): MATIC.ART NFT FREE MARKET PLACE
Arg [1] : symbol (string): NFT
Arg [2] : tokenURIPrefix (string): https://gateway.pinata.cloud/ipfs/

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000021
Arg [4] : 4d415449432e4152542020204e46542046524545204d41524b455420504c4143
Arg [5] : 4500000000000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [7] : 4e46540000000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000022
Arg [9] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [10] : 732f000000000000000000000000000000000000000000000000000000000000


Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.