ERC-1155
Overview
Max Total Supply
0
Holders
391
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
NFT
Compiler Version
v0.8.3+commit.8d00100c
Optimization Enabled:
Yes with 100000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: Apache-2.0 pragma solidity 0.8.3; import "./ERC1155MintBurnPackedBalance.sol"; import "../interfaces/IERC1155Metadata.sol"; contract NFT is ERC1155MintBurnPackedBalance, IERC1155Metadata { address public owner; string public baseURI; constructor(string memory _baseURI) { owner = msg.sender; baseURI = _baseURI; } modifier onlyOwner { require(msg.sender == owner, "not allowed"); _; } function changeOwner(address _newOwner) public onlyOwner { owner = _newOwner; } function changeBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function mint(address _to, uint256 _id, uint256 _amount) public onlyOwner { _mint(_to, _id, _amount, ""); } function batchMint(address _to, uint256[] memory _ids, uint256[] memory _amounts) public onlyOwner { _batchMint(_to, _ids, _amounts, ""); } function burn(address _from, uint256 _id, uint256 _amount) public onlyOwner { _burn(_from, _id, _amount); } function batchBurn(address _from, uint256[] memory _ids, uint256[] memory _amounts) public onlyOwner { _batchBurn(_from, _ids, _amounts); } function supportsInterface(bytes4 _interfaceID) public override pure returns (bool) { if (_interfaceID == type(IERC1155).interfaceId || _interfaceID == type(IERC1155Metadata).interfaceId) { return true; } return super.supportsInterface(_interfaceID); } function uri(uint256 _id) external view override returns (string memory) { return string(abi.encodePacked(baseURI, uint2str(_id))); } function uint2str(uint _i) internal pure returns (string memory _uintAsString) { if (_i == 0) { return "0"; } uint j = _i; uint len; while (j != 0) { len++; j /= 10; } bytes memory bstr = new bytes(len); uint k = len; while (_i != 0) { k = k-1; uint8 temp = (48 + uint8(_i - _i / 10 * 10)); bytes1 b1 = bytes1(temp); bstr[k] = b1; _i /= 10; } return string(bstr); } }
// SPDX-License-Identifier: Apache-2.0 pragma solidity 0.8.3; import "./ERC1155PackedBalance.sol"; /** * @dev Multi-Fungible Tokens with minting and burning methods. These methods assume * a parent contract to be executed as they are `internal` functions. */ contract ERC1155MintBurnPackedBalance is ERC1155PackedBalance { /****************************************| | Minting Functions | |_______________________________________*/ /** * @notice Mint _amount of tokens of a given id * @param _to The address to mint tokens to * @param _id Token id to mint * @param _amount The amount to be minted * @param _data Data to pass if receiver is contract */ function _mint(address _to, uint256 _id, uint256 _amount, bytes memory _data) internal { //Add _amount _updateIDBalance(_to, _id, _amount, Operations.Add); // Add amount to recipient // Emit event emit TransferSingle(msg.sender, address(0x0), _to, _id, _amount); // Calling onReceive method if recipient is contract _callonERC1155Received(address(0x0), _to, _id, _amount, gasleft(), _data); } /** * @notice Mint tokens for each (_ids[i], _amounts[i]) pair * @param _to The address to mint tokens to * @param _ids Array of ids to mint * @param _amounts Array of amount of tokens to mint per id * @param _data Data to pass if receiver is contract */ function _batchMint(address _to, uint256[] memory _ids, uint256[] memory _amounts, bytes memory _data) internal { require(_ids.length == _amounts.length, "ERC1155MintBurnPackedBalance#_batchMint: INVALID_ARRAYS_LENGTH"); if (_ids.length > 0) { // Load first bin and index where the token ID balance exists (uint256 bin, uint256 index) = getIDBinIndex(_ids[0]); // Balance for current bin in memory (initialized with first transfer) uint256 balTo = _viewUpdateBinValue(balances[_to][bin], index, _amounts[0], Operations.Add); // Number of transfer to execute uint256 nTransfer = _ids.length; // Last bin updated uint256 lastBin = bin; for (uint256 i = 1; i < nTransfer; i++) { (bin, index) = getIDBinIndex(_ids[i]); // If new bin if (bin != lastBin) { // Update storage balance of previous bin balances[_to][lastBin] = balTo; balTo = balances[_to][bin]; // Bin will be the most recent bin lastBin = bin; } // Update memory balance balTo = _viewUpdateBinValue(balTo, index, _amounts[i], Operations.Add); } // Update storage of the last bin visited balances[_to][bin] = balTo; } // //Emit event emit TransferBatch(msg.sender, address(0x0), _to, _ids, _amounts); // Calling onReceive method if recipient is contract _callonERC1155BatchReceived(address(0x0), _to, _ids, _amounts, gasleft(), _data); } /****************************************| | Burning Functions | |_______________________________________*/ /** * @notice Burn _amount of tokens of a given token id * @param _from The address to burn tokens from * @param _id Token id to burn * @param _amount The amount to be burned */ function _burn(address _from, uint256 _id, uint256 _amount) internal { // Substract _amount _updateIDBalance(_from, _id, _amount, Operations.Sub); // Emit event emit TransferSingle(msg.sender, _from, address(0x0), _id, _amount); } /** * @notice Burn tokens of given token id for each (_ids[i], _amounts[i]) pair * @dev This batchBurn method does not implement the most efficient way of updating * balances to reduce the potential bug surface as this function is expected to * be less common than transfers. EIP-2200 makes this method significantly * more efficient already for packed balances. * @param _from The address to burn tokens from * @param _ids Array of token ids to burn * @param _amounts Array of the amount to be burned */ function _batchBurn(address _from, uint256[] memory _ids, uint256[] memory _amounts) internal { // Number of burning to execute uint256 nBurn = _ids.length; require(nBurn == _amounts.length, "ERC1155MintBurnPackedBalance#batchBurn: INVALID_ARRAYS_LENGTH"); // Executing all burning for (uint256 i = 0; i < nBurn; i++) { // Update storage balance _updateIDBalance(_from, _ids[i], _amounts[i], Operations.Sub); // Add amount to recipient } // Emit batch burn event emit TransferBatch(msg.sender, _from, address(0x0), _ids, _amounts); } }
// SPDX-License-Identifier: Apache-2.0 pragma solidity 0.8.3; interface IERC1155Metadata { event URI(string _uri, uint256 indexed _id); /****************************************| | Functions | |_______________________________________*/ /** * @notice A distinct Uniform Resource Identifier (URI) for a given token. * @dev URIs are defined in RFC 3986. * URIs are assumed to be deterministically generated based on token ID * Token IDs are assumed to be represented in their hex format in URIs * @return URI string */ function uri(uint256 _id) external view returns (string memory); }
// SPDX-License-Identifier: Apache-2.0 pragma solidity 0.8.3; import "../interfaces/IERC1155TokenReceiver.sol"; import "../interfaces/IERC1155.sol"; import "../utils/Address.sol"; import "../utils/ERC165.sol"; /** * @dev Implementation of Multi-Token Standard contract. This implementation of the ERC-1155 standard * utilizes the fact that balances of different token ids can be concatenated within individual * uint256 storage slots. This allows the contract to batch transfer tokens more efficiently at * the cost of limiting the maximum token balance each address can hold. This limit is * 2^IDS_BITS_SIZE, which can be adjusted below. In practice, using IDS_BITS_SIZE smaller than 16 * did not lead to major efficiency gains. */ contract ERC1155PackedBalance is IERC1155, ERC165 { using Address for address; /***********************************| | Variables and Events | |__________________________________*/ // onReceive function signatures bytes4 constant internal ERC1155_RECEIVED_VALUE = 0xf23a6e61; bytes4 constant internal ERC1155_BATCH_RECEIVED_VALUE = 0xbc197c81; // Constants regarding bin sizes for balance packing // IDS_BITS_SIZE **MUST** be a power of 2 (e.g. 2, 4, 8, 16, 32, 64, 128) uint256 internal constant IDS_BITS_SIZE = 32; // Max balance amount in bits per token ID uint256 internal constant IDS_PER_UINT256 = 256 / IDS_BITS_SIZE; // Number of ids per uint256 // Operations for _updateIDBalance enum Operations { Add, Sub } // Token IDs balances ; balances[address][id] => balance (using array instead of mapping for efficiency) mapping (address => mapping(uint256 => uint256)) internal balances; // Operators mapping (address => mapping(address => bool)) internal operators; /***********************************| | Public Transfer Functions | |__________________________________*/ /** * @notice Transfers amount amount of an _id from the _from address to the _to address specified * @param _from Source address * @param _to Target address * @param _id ID of the token type * @param _amount Transfered amount * @param _data Additional data with no specified format, sent in call to `_to` */ function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _amount, bytes memory _data) public override { // Requirements require((msg.sender == _from) || isApprovedForAll(_from, msg.sender), "ERC1155PackedBalance#safeTransferFrom: INVALID_OPERATOR"); require(_to != address(0),"ERC1155PackedBalance#safeTransferFrom: INVALID_RECIPIENT"); // require(_amount <= balances); Not necessary since checked with _viewUpdateBinValue() checks _safeTransferFrom(_from, _to, _id, _amount); _callonERC1155Received(_from, _to, _id, _amount, gasleft(), _data); } /** * @notice Send multiple types of Tokens from the _from address to the _to address (with safety call) * @dev Arrays should be sorted so that all ids in a same storage slot are adjacent (more efficient) * @param _from Source addresses * @param _to Target addresses * @param _ids IDs of each token type * @param _amounts Transfer amounts per token type * @param _data Additional data with no specified format, sent in call to `_to` */ function safeBatchTransferFrom(address _from, address _to, uint256[] memory _ids, uint256[] memory _amounts, bytes memory _data) public override { // Requirements require((msg.sender == _from) || isApprovedForAll(_from, msg.sender), "ERC1155PackedBalance#safeBatchTransferFrom: INVALID_OPERATOR"); require(_to != address(0),"ERC1155PackedBalance#safeBatchTransferFrom: INVALID_RECIPIENT"); _safeBatchTransferFrom(_from, _to, _ids, _amounts); _callonERC1155BatchReceived(_from, _to, _ids, _amounts, gasleft(), _data); } /***********************************| | Internal Transfer Functions | |__________________________________*/ /** * @notice Transfers amount amount of an _id from the _from address to the _to address specified * @param _from Source address * @param _to Target address * @param _id ID of the token type * @param _amount Transfered amount */ function _safeTransferFrom(address _from, address _to, uint256 _id, uint256 _amount) internal { //Update balances _updateIDBalance(_from, _id, _amount, Operations.Sub); // Subtract amount from sender _updateIDBalance(_to, _id, _amount, Operations.Add); // Add amount to recipient // Emit event emit TransferSingle(msg.sender, _from, _to, _id, _amount); } /** * @notice Verifies if receiver is contract and if so, calls (_to).onERC1155Received(...) */ function _callonERC1155Received(address _from, address _to, uint256 _id, uint256 _amount, uint256 _gasLimit, bytes memory _data) internal { // Check if recipient is contract if (_to.isContract()) { bytes4 retval = IERC1155TokenReceiver(_to).onERC1155Received{gas:_gasLimit}(msg.sender, _from, _id, _amount, _data); require(retval == ERC1155_RECEIVED_VALUE, "ERC1155PackedBalance#_callonERC1155Received: INVALID_ON_RECEIVE_MESSAGE"); } } /** * @notice Send multiple types of Tokens from the _from address to the _to address (with safety call) * @dev Arrays should be sorted so that all ids in a same storage slot are adjacent (more efficient) * @param _from Source addresses * @param _to Target addresses * @param _ids IDs of each token type * @param _amounts Transfer amounts per token type */ function _safeBatchTransferFrom(address _from, address _to, uint256[] memory _ids, uint256[] memory _amounts) internal { uint256 nTransfer = _ids.length; // Number of transfer to execute require(nTransfer == _amounts.length, "ERC1155PackedBalance#_safeBatchTransferFrom: INVALID_ARRAYS_LENGTH"); if (_from != _to && nTransfer > 0) { // Load first bin and index where the token ID balance exists (uint256 bin, uint256 index) = getIDBinIndex(_ids[0]); // Balance for current bin in memory (initialized with first transfer) uint256 balFrom = _viewUpdateBinValue(balances[_from][bin], index, _amounts[0], Operations.Sub); uint256 balTo = _viewUpdateBinValue(balances[_to][bin], index, _amounts[0], Operations.Add); // Last bin updated uint256 lastBin = bin; for (uint256 i = 1; i < nTransfer; i++) { (bin, index) = getIDBinIndex(_ids[i]); // If new bin if (bin != lastBin) { // Update storage balance of previous bin balances[_from][lastBin] = balFrom; balances[_to][lastBin] = balTo; balFrom = balances[_from][bin]; balTo = balances[_to][bin]; // Bin will be the most recent bin lastBin = bin; } // Update memory balance balFrom = _viewUpdateBinValue(balFrom, index, _amounts[i], Operations.Sub); balTo = _viewUpdateBinValue(balTo, index, _amounts[i], Operations.Add); } // Update storage of the last bin visited balances[_from][bin] = balFrom; balances[_to][bin] = balTo; // If transfer to self, just make sure all amounts are valid } else { for (uint256 i = 0; i < nTransfer; i++) { require(balanceOf(_from, _ids[i]) >= _amounts[i], "ERC1155PackedBalance#_safeBatchTransferFrom: UNDERFLOW"); } } // Emit event emit TransferBatch(msg.sender, _from, _to, _ids, _amounts); } /** * @notice Verifies if receiver is contract and if so, calls (_to).onERC1155BatchReceived(...) */ function _callonERC1155BatchReceived(address _from, address _to, uint256[] memory _ids, uint256[] memory _amounts, uint256 _gasLimit, bytes memory _data) internal { // Pass data if recipient is contract if (_to.isContract()) { bytes4 retval = IERC1155TokenReceiver(_to).onERC1155BatchReceived{gas: _gasLimit}(msg.sender, _from, _ids, _amounts, _data); require(retval == ERC1155_BATCH_RECEIVED_VALUE, "ERC1155PackedBalance#_callonERC1155BatchReceived: INVALID_ON_RECEIVE_MESSAGE"); } } /***********************************| | Operator Functions | |__________________________________*/ /** * @notice Enable or disable approval for a third party ("operator") to manage all of caller's tokens * @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) external override { // Update operator status operators[msg.sender][_operator] = _approved; emit ApprovalForAll(msg.sender, _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 isOperator True if the operator is approved, false if not */ function isApprovedForAll(address _owner, address _operator) public override view returns (bool isOperator) { return operators[_owner][_operator]; } /***********************************| | Public Balance Functions | |__________________________________*/ /** * @notice Get the balance of an account's Tokens * @param _owner The address of the token holder * @param _id ID of the Token * @return The _owner's balance of the Token type requested */ function balanceOf(address _owner, uint256 _id) public override view returns (uint256) { uint256 bin; uint256 index; //Get bin and index of _id (bin, index) = getIDBinIndex(_id); return getValueInBin(balances[_owner][bin], index); } /** * @notice Get the balance of multiple account/token pairs * @param _owners The addresses of the token holders (sorted owners will lead to less gas usage) * @param _ids ID of the Tokens (sorted ids will lead to less gas usage * @return The _owner's balance of the Token types requested (i.e. balance for each (owner, id) pair) */ function balanceOfBatch(address[] memory _owners, uint256[] memory _ids) public override view returns (uint256[] memory) { uint256 n_owners = _owners.length; require(n_owners == _ids.length, "ERC1155PackedBalance#balanceOfBatch: INVALID_ARRAY_LENGTH"); // First values (uint256 bin, uint256 index) = getIDBinIndex(_ids[0]); uint256 balance_bin = balances[_owners[0]][bin]; uint256 last_bin = bin; // Initialization uint256[] memory batchBalances = new uint256[](n_owners); batchBalances[0] = getValueInBin(balance_bin, index); // Iterate over each owner and token ID for (uint256 i = 1; i < n_owners; i++) { (bin, index) = getIDBinIndex(_ids[i]); // SLOAD if bin changed for the same owner or if owner changed if (bin != last_bin || _owners[i-1] != _owners[i]) { balance_bin = balances[_owners[i]][bin]; last_bin = bin; } batchBalances[i] = getValueInBin(balance_bin, index); } return batchBalances; } /***********************************| | Packed Balance Functions | |__________________________________*/ /** * @notice Update the balance of a id for a given address * @param _address Address to update id balance * @param _id Id to update balance of * @param _amount Amount to update the id balance * @param _operation Which operation to conduct : * Operations.Add: Add _amount to id balance * Operations.Sub: Substract _amount from id balance */ function _updateIDBalance(address _address, uint256 _id, uint256 _amount, Operations _operation) internal { uint256 bin; uint256 index; // Get bin and index of _id (bin, index) = getIDBinIndex(_id); // Update balance balances[_address][bin] = _viewUpdateBinValue(balances[_address][bin], index, _amount, _operation); } /** * @notice Update a value in _binValues * @param _binValues Uint256 containing values of size IDS_BITS_SIZE (the token balances) * @param _index Index of the value in the provided bin * @param _amount Amount to update the id balance * @param _operation Which operation to conduct : * Operations.Add: Add _amount to value in _binValues at _index * Operations.Sub: Substract _amount from value in _binValues at _index */ function _viewUpdateBinValue(uint256 _binValues, uint256 _index, uint256 _amount, Operations _operation) internal pure returns (uint256 newBinValues) { uint256 shift = IDS_BITS_SIZE * _index; uint256 mask = (uint256(1) << IDS_BITS_SIZE) - 1; if (_operation == Operations.Add) { newBinValues = _binValues + (_amount << shift); require(newBinValues >= _binValues, "ERC1155PackedBalance#_viewUpdateBinValue: OVERFLOW"); require( ((_binValues >> shift) & mask) + _amount < 2**IDS_BITS_SIZE, // Checks that no other id changed "ERC1155PackedBalance#_viewUpdateBinValue: OVERFLOW" ); } else if (_operation == Operations.Sub) { newBinValues = _binValues - (_amount << shift); require(newBinValues <= _binValues, "ERC1155PackedBalance#_viewUpdateBinValue: UNDERFLOW"); require( ((_binValues >> shift) & mask) >= _amount, // Checks that no other id changed "ERC1155PackedBalance#_viewUpdateBinValue: UNDERFLOW" ); } else { revert("ERC1155PackedBalance#_viewUpdateBinValue: INVALID_BIN_WRITE_OPERATION"); // Bad operation } return newBinValues; } /** * @notice Return the bin number and index within that bin where ID is * @param _id Token id * @return bin index (Bin number, ID"s index within that bin) */ function getIDBinIndex(uint256 _id) public pure returns (uint256 bin, uint256 index) { bin = _id / IDS_PER_UINT256; index = _id % IDS_PER_UINT256; return (bin, index); } /** * @notice Return amount in _binValues at position _index * @param _binValues uint256 containing the balances of IDS_PER_UINT256 ids * @param _index Index at which to retrieve amount * @return amount at given _index in _bin */ function getValueInBin(uint256 _binValues, uint256 _index) public pure returns (uint256) { // require(_index < IDS_PER_UINT256) is not required since getIDBinIndex ensures `_index < IDS_PER_UINT256` // Mask to retrieve data for a given binData uint256 mask = (uint256(1) << IDS_BITS_SIZE) - 1; // Shift amount uint256 rightShift = IDS_BITS_SIZE * _index; return (_binValues >> rightShift) & mask; } /***********************************| | ERC165 Functions | |__________________________________*/ /** * @notice Query if a contract implements an interface * @param _interfaceID The interface identifier, as specified in ERC-165 * @return `true` if the contract implements `_interfaceID` and */ function supportsInterface(bytes4 _interfaceID) public override virtual pure returns (bool) { if (_interfaceID == type(IERC1155).interfaceId) { return true; } return super.supportsInterface(_interfaceID); } }
// SPDX-License-Identifier: Apache-2.0 pragma solidity 0.8.3; /** * @dev ERC-1155 interface for accepting safe transfers. */ interface IERC1155TokenReceiver { /** * @notice Handle the receipt of a single ERC1155 token type * @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeTransferFrom` after the balance has been updated * This function MAY throw to revert and reject the transfer * Return of other amount than the magic value MUST result in the transaction being reverted * Note: The token contract address is always the message sender * @param _operator The address which called the `safeTransferFrom` function * @param _from The address which previously owned the token * @param _id The id of the token being transferred * @param _amount The amount of tokens being transferred * @param _data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` */ function onERC1155Received(address _operator, address _from, uint256 _id, uint256 _amount, bytes calldata _data) external returns(bytes4); /** * @notice Handle the receipt of multiple ERC1155 token types * @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeBatchTransferFrom` after the balances have been updated * This function MAY throw to revert and reject the transfer * Return of other amount than the magic value WILL result in the transaction being reverted * Note: The token contract address is always the message sender * @param _operator The address which called the `safeBatchTransferFrom` function * @param _from The address which previously owned the token * @param _ids An array containing ids of each token being transferred * @param _amounts An array containing amounts of each token being transferred * @param _data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` */ function onERC1155BatchReceived(address _operator, address _from, uint256[] calldata _ids, uint256[] calldata _amounts, bytes calldata _data) external returns(bytes4); }
// SPDX-License-Identifier: Apache-2.0 pragma solidity 0.8.3; interface IERC1155 { /****************************************| | Events | |_______________________________________*/ /** * @dev Either TransferSingle or TransferBatch MUST emit when tokens are transferred, including zero amount transfers as well as minting or burning * Operator MUST be msg.sender * When minting/creating tokens, the `_from` field MUST be set to `0x0` * When burning/destroying tokens, the `_to` field MUST be set to `0x0` * The total amount transferred from address 0x0 minus the total amount transferred to 0x0 may be used by clients and exchanges to be added to the "circulating supply" for a given token ID * To broadcast the existence of a token ID with no initial balance, the contract SHOULD emit the TransferSingle event from `0x0` to `0x0`, with the token creator as `_operator`, and a `_amount` of 0 */ event TransferSingle(address indexed _operator, address indexed _from, address indexed _to, uint256 _id, uint256 _amount); /** * @dev Either TransferSingle or TransferBatch MUST emit when tokens are transferred, including zero amount transfers as well as minting or burning * Operator MUST be msg.sender * When minting/creating tokens, the `_from` field MUST be set to `0x0` * When burning/destroying tokens, the `_to` field MUST be set to `0x0` * The total amount transferred from address 0x0 minus the total amount transferred to 0x0 may be used by clients and exchanges to be added to the "circulating supply" for a given token ID * To broadcast the existence of multiple token IDs with no initial balance, this SHOULD emit the TransferBatch event from `0x0` to `0x0`, with the token creator as `_operator`, and a `_amount` of 0 */ event TransferBatch(address indexed _operator, address indexed _from, address indexed _to, uint256[] _ids, uint256[] _amounts); /** * @dev MUST emit when an approval is updated */ event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); /****************************************| | Functions | |_______________________________________*/ /** * @notice Transfers amount of an _id from the _from address to the _to address specified * @dev MUST emit TransferSingle event on success * Caller must be approved to manage the _from account's tokens (see isApprovedForAll) * MUST throw if `_to` is the zero address * MUST throw if balance of sender for token `_id` is lower than the `_amount` sent * MUST throw on any other error * When transfer is complete, this function MUST check if `_to` is a smart contract (code size > 0). If so, it MUST call `onERC1155Received` on `_to` and revert if the return amount is not `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * @param _from Source address * @param _to Target address * @param _id ID of the token type * @param _amount Transfered amount * @param _data Additional data with no specified format, sent in call to `_to` */ function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _amount, bytes calldata _data) external; /** * @notice Send multiple types of Tokens from the _from address to the _to address (with safety call) * @dev MUST emit TransferBatch event on success * Caller must be approved to manage the _from account's tokens (see isApprovedForAll) * MUST throw if `_to` is the zero address * MUST throw if length of `_ids` is not the same as length of `_amounts` * MUST throw if any of the balance of sender for token `_ids` is lower than the respective `_amounts` sent * MUST throw on any other error * When transfer is complete, this function MUST check if `_to` is a smart contract (code size > 0). If so, it MUST call `onERC1155BatchReceived` on `_to` and revert if the return amount is not `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * Transfers and events MUST occur in the array order they were submitted (_ids[0] before _ids[1], etc) * @param _from Source addresses * @param _to Target addresses * @param _ids IDs of each token type * @param _amounts Transfer amounts per token type * @param _data Additional data with no specified format, sent in call to `_to` */ function safeBatchTransferFrom(address _from, address _to, uint256[] calldata _ids, uint256[] calldata _amounts, bytes calldata _data) external; /** * @notice Get the balance of an account's Tokens * @param _owner The address of the token holder * @param _id ID of the Token * @return The _owner's balance of the Token type requested */ function balanceOf(address _owner, uint256 _id) external view returns (uint256); /** * @notice Get the balance of multiple account/token pairs * @param _owners The addresses of the token holders * @param _ids ID of the Tokens * @return The _owner's balance of the Token types requested (i.e. balance for each (owner, id) pair) */ function balanceOfBatch(address[] calldata _owners, uint256[] calldata _ids) external view returns (uint256[] memory); /** * @notice Enable or disable approval for a third party ("operator") to manage all of 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) external; /** * @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 isOperator True if the operator is approved, false if not */ function isApprovedForAll(address _owner, address _operator) external view returns (bool isOperator); }
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.3; /** * Utility library of inline functions on addresses */ library Address { // Default hash for EOA accounts returned by extcodehash bytes32 constant internal ACCOUNT_HASH = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; /** * Returns whether the target address is a contract * @dev This function will return false if invoked during the constructor of a contract. * @param _address address of the account to check * @return Whether the target address is a contract */ function isContract(address _address) internal view returns (bool) { bytes32 codehash; // Currently there is no better way to check if there is a contract in an address // than to check the size of the code at that address or if it has a non-zero code hash or account hash assembly { codehash := extcodehash(_address) } return (codehash != 0x0 && codehash != ACCOUNT_HASH); } }
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.3; abstract contract ERC165 { /** * @notice Query if a contract implements an interface * @param _interfaceID The interface identifier, as specified in ERC-165 * @return `true` if the contract implements `_interfaceID` */ function supportsInterface(bytes4 _interfaceID) virtual public pure returns (bool) { return _interfaceID == this.supportsInterface.selector; } }
{ "optimizer": { "enabled": true, "runs": 100000, "details": { "yul": true, "constantOptimizer": false } }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"_operator","type":"address"},{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"_uri","type":"string"},{"indexed":true,"internalType":"uint256","name":"_id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_owners","type":"address[]"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"}],"name":"balanceOfBatch","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":"address","name":"_from","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"batchBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"batchMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"changeBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getIDBinIndex","outputs":[{"internalType":"uint256","name":"bin","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_binValues","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"getValueInBin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"isOperator","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","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":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeBatchTransferFrom","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":"uint256","name":"_amount","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":"bytes4","name":"_interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620035f3380380620035f3833981016040819052620000349162000121565b600280547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790558051620000739060039060208401906200007b565b505062000269565b828054620000899062000216565b90600052602060002090601f016020900481019282620000ad5760008555620000f8565b82601f10620000c857805160ff1916838001178555620000f8565b82800160010185558215620000f8579182015b82811115620000f8578251825591602001919060010190620000db565b50620001069291506200010a565b5090565b5b808211156200010657600081556001016200010b565b6000602080838503121562000134578182fd5b825167ffffffffffffffff808211156200014c578384fd5b818501915085601f83011262000160578384fd5b81518181111562000175576200017562000253565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715620001be57620001be62000253565b816040528281528886848701011115620001d6578687fd5b8693505b82841015620001f95784840186015181850187015292850192620001da565b828411156200020a57868684830101525b98975050505050505050565b600181811c908216806200022b57607f821691505b602082108114156200024d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61337a80620002796000396000f3fe608060405234801561001057600080fd5b50600436106101355760003560e01c80638da5cb5b116100b2578063e985e9c511610081578063f242432a11610066578063f242432a14610308578063f5298aca1461031b578063f6eb127a1461032e57610135565b8063e985e9c5146102ac578063eaec5f81146102f557610135565b80638da5cb5b14610219578063a22cb4651461025e578063a6f9dae114610271578063db90e83c1461028457610135565b8063156e29f61161010957806339a0c6f9116100ee57806339a0c6f9146101de5780634e1273f4146101f15780636c0360eb1461021157610135565b8063156e29f6146101b85780632eb2c2d6146101cb57610135565b8062fdd58e1461013a57806301ffc9a7146101605780630ca83480146101835780630e89341c14610198575b600080fd5b61014d610148366004612b1a565b610341565b6040519081526020015b60405180910390f35b61017361016e366004612c36565b610396565b6040519015158152602001610157565b610196610191366004612a6f565b610447565b005b6101ab6101a6366004612cbc565b6104ed565b6040516101579190612f5c565b6101966101c6366004612b43565b610521565b6101966101d9366004612966565b6105bd565b6101966101ec366004612c6e565b610761565b6102046101ff366004612b75565b6107f9565b6040516101579190612f24565b6101ab610c52565b6002546102399073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610157565b61019661026c366004612ae0565b610ce0565b61019661027f36600461291a565b610d77565b610297610292366004612cbc565b610e3f565b60408051928352602083019190915201610157565b6101736102ba366004612934565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205460ff1690565b61014d610303366004612cd4565b610e79565b610196610316366004612a0c565b610ea7565b610196610329366004612b43565b611044565b61019661033c366004612a6f565b6110d0565b600080600061034f84610e3f565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260208181526040808320858452909152902054919350915061038d9082610e79565b95945050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a2600000000000000000000000000000000000000000000000000000000148061042957507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e89341c00000000000000000000000000000000000000000000000000000000145b1561043657506001610442565b61043f8261115c565b90505b919050565b60025473ffffffffffffffffffffffffffffffffffffffff1633146104cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e6f7420616c6c6f77656400000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6104e8838383604051806020016040528060008152506111fa565b505050565b606060036104fa8361150c565b60405160200161050b929190612d95565b6040516020818303038152906040529050919050565b60025473ffffffffffffffffffffffffffffffffffffffff1633146105a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e6f7420616c6c6f77656400000000000000000000000000000000000000000060448201526064016104c4565b6104e8838383604051806020016040528060008152506116b8565b3373ffffffffffffffffffffffffffffffffffffffff86161480610611575073ffffffffffffffffffffffffffffffffffffffff8516600090815260016020908152604080832033845290915290205460ff165b61069d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f455243313135355061636b656442616c616e636523736166654261746368547260448201527f616e7366657246726f6d3a20494e56414c49445f4f50455241544f520000000060648201526084016104c4565b73ffffffffffffffffffffffffffffffffffffffff8416610740576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f455243313135355061636b656442616c616e636523736166654261746368547260448201527f616e7366657246726f6d3a20494e56414c49445f524543495049454e5400000060648201526084016104c4565b61074c8585858561172a565b61075a858585855a86611cb6565b5050505050565b60025473ffffffffffffffffffffffffffffffffffffffff1633146107e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e6f7420616c6c6f77656400000000000000000000000000000000000000000060448201526064016104c4565b80516107f5906003906020840190612759565b5050565b8151815160609190811461088f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f455243313135355061636b656442616c616e63652362616c616e63654f66426160448201527f7463683a20494e56414c49445f41525241595f4c454e4754480000000000000060648201526084016104c4565b6000806108dc856000815181106108cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610e3f565b9150915060008060008860008151811061091f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020549050600083905060008567ffffffffffffffff8111156109bc577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156109e5578160200160208202803683370190505b5090506109f28385610e79565b81600081518110610a2c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602090810291909101015260015b86811015610c4557610a7e8982815181106108cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90965094508286141580610b4a5750898181518110610ac6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168a600183610af291906131a2565b81518110610b29577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b15610be5576000808b8381518110610b8b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008781526020019081526020016000205493508592505b610bef8486610e79565b828281518110610c28577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602090810291909101015280610c3d81613239565b915050610a3a565b5098975050505050505050565b60038054610c5f906131e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8b906131e5565b8015610cd85780601f10610cad57610100808354040283529160200191610cd8565b820191906000526020600020905b815481529060010190602001808311610cbb57829003601f168201915b505050505081565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60025473ffffffffffffffffffffffffffffffffffffffff163314610df8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e6f7420616c6c6f77656400000000000000000000000000000000000000000060448201526064016104c4565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600080610e4f602061010061301f565b610e59908461301f565b9150610e68602061010061301f565b610e729084613272565b9050915091565b600080610e8c60016401000000006131a2565b90506000610e9b846020613165565b9490941c169392505050565b3373ffffffffffffffffffffffffffffffffffffffff86161480610efb575073ffffffffffffffffffffffffffffffffffffffff8516600090815260016020908152604080832033845290915290205460ff165b610f87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f455243313135355061636b656442616c616e636523736166655472616e73666560448201527f7246726f6d3a20494e56414c49445f4f50455241544f5200000000000000000060648201526084016104c4565b73ffffffffffffffffffffffffffffffffffffffff841661102a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f455243313135355061636b656442616c616e636523736166655472616e73666560448201527f7246726f6d3a20494e56414c49445f524543495049454e54000000000000000060648201526084016104c4565b61103685858585611e74565b61075a858585855a86611eed565b60025473ffffffffffffffffffffffffffffffffffffffff1633146110c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e6f7420616c6c6f77656400000000000000000000000000000000000000000060448201526064016104c4565b6104e88383836120a1565b60025473ffffffffffffffffffffffffffffffffffffffff163314611151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e6f7420616c6c6f77656400000000000000000000000000000000000000000060448201526064016104c4565b6104e8838383612109565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a260000000000000000000000000000000000000000000000000000000014156111b057506001610442565b7f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161461043f565b815183511461128b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f455243313135354d696e744275726e5061636b656442616c616e6365235f626160448201527f7463684d696e743a20494e56414c49445f4152524159535f4c454e475448000060648201526084016104c4565b825115611478576000806112d2856000815181106108cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff88166000908152602081815260408083208584529091528120548751939550919350916113579190849088908590611348577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160006122bd565b86519091508360015b8281101561143f576113a48982815181106108cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90965094508186146113ed5773ffffffffffffffffffffffffffffffffffffffff8a16600090815260208181526040808320948352939052828120949094558584529220549184905b61142b84868a8481518110611348577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b93508061143781613239565b915050611360565b50505073ffffffffffffffffffffffffffffffffffffffff87166000908152602081815260408083209583529490529290922091909155505b8373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516114ef929190612f37565b60405180910390a461150660008585855a86611cb6565b50505050565b60608161154d575060408051808201909152600181527f30000000000000000000000000000000000000000000000000000000000000006020820152610442565b8160005b8115611577578061156181613239565b91506115709050600a8361301f565b9150611551565b60008167ffffffffffffffff8111156115b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156115e3576020820181803683370190505b509050815b85156116af576115f96001826131a2565b90506000611608600a8861301f565b61161390600a613165565b61161d90886131a2565b611628906030612ffa565b905060008160f81b90508084848151811061166c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506116a6600a8961301f565b975050506115e8565b50949350505050565b6116c58484846000612698565b604080518481526020810184905273ffffffffffffffffffffffffffffffffffffffff86169160009133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461150660008585855a86611eed565b8151815181146117e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f455243313135355061636b656442616c616e6365235f7361666542617463685460448201527f72616e7366657246726f6d3a20494e56414c49445f4152524159535f4c454e4760648201527f5448000000000000000000000000000000000000000000000000000000000000608482015260a4016104c4565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415801561181e5750600081115b15611af957600080611863856000815181106108cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff89166000908152602081815260408083208584529091528120548751939550919350916118e891908490889085906118d9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160016122bd565b73ffffffffffffffffffffffffffffffffffffffff88166000908152602081815260408083208784529091528120548751929350909161195c9190859089908590611348577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90508360015b86811015611aa7576119a68982815181106108cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9096509450818614611a155773ffffffffffffffffffffffffffffffffffffffff8b811660009081526020818152604080832086845280835281842098909855928d16825281815282822094825284815282822095909555878152948452808520549290935291909220549084905b611a5384868a84815181106118d9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9350611a9383868a8481518110611348577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b925080611a9f81613239565b915050611962565b505073ffffffffffffffffffffffffffffffffffffffff808a16600090815260208181526040808320888452825280832095909555918a16815280825283812095815294905292209190915550611c31565b60005b81811015611c2f57828181518110611b3d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151611b8f87868481518110611b82577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610341565b1015611c1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f455243313135355061636b656442616c616e6365235f7361666542617463685460448201527f72616e7366657246726f6d3a20554e444552464c4f570000000000000000000060648201526084016104c4565b80611c2781613239565b915050611afc565b505b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611ca7929190612f37565b60405180910390a45050505050565b611cd58573ffffffffffffffffffffffffffffffffffffffff1661271f565b15611e6c5760008573ffffffffffffffffffffffffffffffffffffffff1663bc197c8184338a8989886040518763ffffffff1660e01b8152600401611d1e959493929190612e69565b602060405180830381600088803b158015611d3857600080fd5b5087f1158015611d4c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611d719190612c52565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c810000000000000000000000000000000000000000000000000000000014611e6a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f455243313135355061636b656442616c616e6365235f63616c6c6f6e4552433160448201527f313535426174636852656365697665643a20494e56414c49445f4f4e5f52454360648201527f454956455f4d4553534147450000000000000000000000000000000000000000608482015260a4016104c4565b505b505050505050565b611e818483836001612698565b611e8e8383836000612698565b604080518381526020810183905273ffffffffffffffffffffffffffffffffffffffff808616929087169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291015b60405180910390a450505050565b611f0c8573ffffffffffffffffffffffffffffffffffffffff1661271f565b15611e6c5760008573ffffffffffffffffffffffffffffffffffffffff1663f23a6e6184338a8989886040518763ffffffff1660e01b8152600401611f55959493929190612ed4565b602060405180830381600088803b158015611f6f57600080fd5b5087f1158015611f83573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611fa89190612c52565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e610000000000000000000000000000000000000000000000000000000014611e6a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f455243313135355061636b656442616c616e6365235f63616c6c6f6e4552433160448201527f31353552656365697665643a20494e56414c49445f4f4e5f524543454956455f60648201527f4d45535341474500000000000000000000000000000000000000000000000000608482015260a4016104c4565b6120ae8383836001612698565b604080518381526020810183905260009173ffffffffffffffffffffffffffffffffffffffff86169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4505050565b81518151811461219b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f455243313135354d696e744275726e5061636b656442616c616e63652362617460448201527f63684275726e3a20494e56414c49445f4152524159535f4c454e47544800000060648201526084016104c4565b60005b8181101561224557612233858583815181106121e3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858481518110612224577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516001612698565b8061223d81613239565b91505061219e565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611edf929190612f37565b6000806122cb856020613165565b905060006122df60016401000000006131a2565b9050600084600181111561231c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b141561246c5761232e85831b88612fe2565b9250868310156123c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f455243313135355061636b656442616c616e6365235f7669657755706461746560448201527f42696e56616c75653a204f564552464c4f57000000000000000000000000000060648201526084016104c4565b6123cc60206002613079565b6123da8689851c8416612fe2565b10612467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f455243313135355061636b656442616c616e6365235f7669657755706461746560448201527f42696e56616c75653a204f564552464c4f57000000000000000000000000000060648201526084016104c4565b61268e565b60018460018111156124a7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156125e0576124b985831b886131a2565b92508683111561254b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f455243313135355061636b656442616c616e6365235f7669657755706461746560448201527f42696e56616c75653a20554e444552464c4f570000000000000000000000000060648201526084016104c4565b84818389901c161015612467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f455243313135355061636b656442616c616e6365235f7669657755706461746560448201527f42696e56616c75653a20554e444552464c4f570000000000000000000000000060648201526084016104c4565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f455243313135355061636b656442616c616e6365235f7669657755706461746560448201527f42696e56616c75653a20494e56414c49445f42494e5f57524954455f4f50455260648201527f4154494f4e000000000000000000000000000000000000000000000000000000608482015260a4016104c4565b5050949350505050565b6000806126a485610e3f565b73ffffffffffffffffffffffffffffffffffffffff881660009081526020818152604080832085845290915290205491935091506126e4908286866122bd565b73ffffffffffffffffffffffffffffffffffffffff909616600090815260208181526040808320948352939052919091209490945550505050565b6000813f801580159061275257507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708114155b9392505050565b828054612765906131e5565b90600052602060002090601f01602090048101928261278757600085556127cd565b82601f106127a057805160ff19168380011785556127cd565b828001600101855582156127cd579182015b828111156127cd5782518255916020019190600101906127b2565b506127d99291506127dd565b5090565b5b808211156127d957600081556001016127de565b600067ffffffffffffffff83111561280c5761280c6132e4565b61283d60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f86011601612f6f565b905082815283838301111561285157600080fd5b828260208301376000602084830101529392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461044257600080fd5b600082601f83011261289c578081fd5b813560206128b16128ac83612fbe565b612f6f565b80838252828201915082860187848660051b89010111156128d0578586fd5b855b858110156128ee578135845292840192908401906001016128d2565b5090979650505050505050565b600082601f83011261290b578081fd5b612752838335602085016127f2565b60006020828403121561292b578081fd5b61275282612868565b60008060408385031215612946578081fd5b61294f83612868565b915061295d60208401612868565b90509250929050565b600080600080600060a0868803121561297d578081fd5b61298686612868565b945061299460208701612868565b9350604086013567ffffffffffffffff808211156129b0578283fd5b6129bc89838a0161288c565b945060608801359150808211156129d1578283fd5b6129dd89838a0161288c565b935060808801359150808211156129f2578283fd5b506129ff888289016128fb565b9150509295509295909350565b600080600080600060a08688031215612a23578081fd5b612a2c86612868565b9450612a3a60208701612868565b93506040860135925060608601359150608086013567ffffffffffffffff811115612a63578182fd5b6129ff888289016128fb565b600080600060608486031215612a83578283fd5b612a8c84612868565b9250602084013567ffffffffffffffff80821115612aa8578384fd5b612ab48783880161288c565b93506040860135915080821115612ac9578283fd5b50612ad68682870161288c565b9150509250925092565b60008060408385031215612af2578182fd5b612afb83612868565b915060208301358015158114612b0f578182fd5b809150509250929050565b60008060408385031215612b2c578182fd5b612b3583612868565b946020939093013593505050565b600080600060608486031215612b57578081fd5b612b6084612868565b95602085013595506040909401359392505050565b60008060408385031215612b87578182fd5b823567ffffffffffffffff80821115612b9e578384fd5b818501915085601f830112612bb1578384fd5b81356020612bc16128ac83612fbe565b8083825282820191508286018a848660051b8901011115612be0578889fd5b8896505b84871015612c0957612bf581612868565b835260019690960195918301918301612be4565b5096505086013592505080821115612c1f578283fd5b50612c2c8582860161288c565b9150509250929050565b600060208284031215612c47578081fd5b813561275281613313565b600060208284031215612c63578081fd5b815161275281613313565b600060208284031215612c7f578081fd5b813567ffffffffffffffff811115612c95578182fd5b8201601f81018413612ca5578182fd5b612cb4848235602084016127f2565b949350505050565b600060208284031215612ccd578081fd5b5035919050565b60008060408385031215612ce6578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b83811015612d2457815187529582019590820190600101612d08565b509495945050505050565b60008151808452612d478160208601602086016131b9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60008151612d8b8185602086016131b9565b9290920192915050565b600080845482600182811c915080831680612db157607f831692505b6020808410821415612dea577f4e487b710000000000000000000000000000000000000000000000000000000087526022600452602487fd5b818015612dfe5760018114612e2d57612e59565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00861689528489019650612e59565b60008b815260209020885b86811015612e515781548b820152908501908301612e38565b505084890196505b50505050505061038d8185612d79565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525060a06040830152612ea260a0830186612cf5565b8281036060840152612eb48186612cf5565b90508281036080840152612ec88185612d2f565b98975050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015283606083015260a06080830152612f1960a0830184612d2f565b979650505050505050565b6000602082526127526020830184612cf5565b600060408252612f4a6040830185612cf5565b828103602084015261038d8185612cf5565b6000602082526127526020830184612d2f565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612fb657612fb66132e4565b604052919050565b600067ffffffffffffffff821115612fd857612fd86132e4565b5060051b60200190565b60008219821115612ff557612ff5613286565b500190565b600060ff821660ff84168060ff0382111561301757613017613286565b019392505050565b60008261302e5761302e6132b5565b500490565b80825b60018086116130455750613070565b81870482111561305757613057613286565b8086161561306457918102915b9490941c938002613036565b94509492505050565b60006127527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846000826130b057506001612752565b816130bd57506000612752565b81600181146130d357600281146130dd5761310a565b6001915050612752565b60ff8411156130ee576130ee613286565b6001841b91508482111561310457613104613286565b50612752565b5060208310610133831016604e8410600b841016171561313d575081810a8381111561313857613138613286565b612752565b61314a8484846001613033565b80860482111561315c5761315c613286565b02949350505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561319d5761319d613286565b500290565b6000828210156131b4576131b4613286565b500390565b60005b838110156131d45781810151838201526020016131bc565b838111156115065750506000910152565b600181811c908216806131f957607f821691505b60208210811415613233577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561326b5761326b613286565b5060010190565b600082613281576132816132b5565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7fffffffff000000000000000000000000000000000000000000000000000000008116811461334157600080fd5b5056fea2646970667358221220ce6a36360efef742b47fa037fc5bf88afb7a3e2a79d84aca3265c27e7a4e942d64736f6c634300080300330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004268747470733a2f2f75732d63656e7472616c312d72656e66742d6e6674732d6d6574612e636c6f756466756e6374696f6e732e6e65742f6765744d6574613f69643d000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101355760003560e01c80638da5cb5b116100b2578063e985e9c511610081578063f242432a11610066578063f242432a14610308578063f5298aca1461031b578063f6eb127a1461032e57610135565b8063e985e9c5146102ac578063eaec5f81146102f557610135565b80638da5cb5b14610219578063a22cb4651461025e578063a6f9dae114610271578063db90e83c1461028457610135565b8063156e29f61161010957806339a0c6f9116100ee57806339a0c6f9146101de5780634e1273f4146101f15780636c0360eb1461021157610135565b8063156e29f6146101b85780632eb2c2d6146101cb57610135565b8062fdd58e1461013a57806301ffc9a7146101605780630ca83480146101835780630e89341c14610198575b600080fd5b61014d610148366004612b1a565b610341565b6040519081526020015b60405180910390f35b61017361016e366004612c36565b610396565b6040519015158152602001610157565b610196610191366004612a6f565b610447565b005b6101ab6101a6366004612cbc565b6104ed565b6040516101579190612f5c565b6101966101c6366004612b43565b610521565b6101966101d9366004612966565b6105bd565b6101966101ec366004612c6e565b610761565b6102046101ff366004612b75565b6107f9565b6040516101579190612f24565b6101ab610c52565b6002546102399073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610157565b61019661026c366004612ae0565b610ce0565b61019661027f36600461291a565b610d77565b610297610292366004612cbc565b610e3f565b60408051928352602083019190915201610157565b6101736102ba366004612934565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205460ff1690565b61014d610303366004612cd4565b610e79565b610196610316366004612a0c565b610ea7565b610196610329366004612b43565b611044565b61019661033c366004612a6f565b6110d0565b600080600061034f84610e3f565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260208181526040808320858452909152902054919350915061038d9082610e79565b95945050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a2600000000000000000000000000000000000000000000000000000000148061042957507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e89341c00000000000000000000000000000000000000000000000000000000145b1561043657506001610442565b61043f8261115c565b90505b919050565b60025473ffffffffffffffffffffffffffffffffffffffff1633146104cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e6f7420616c6c6f77656400000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6104e8838383604051806020016040528060008152506111fa565b505050565b606060036104fa8361150c565b60405160200161050b929190612d95565b6040516020818303038152906040529050919050565b60025473ffffffffffffffffffffffffffffffffffffffff1633146105a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e6f7420616c6c6f77656400000000000000000000000000000000000000000060448201526064016104c4565b6104e8838383604051806020016040528060008152506116b8565b3373ffffffffffffffffffffffffffffffffffffffff86161480610611575073ffffffffffffffffffffffffffffffffffffffff8516600090815260016020908152604080832033845290915290205460ff165b61069d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f455243313135355061636b656442616c616e636523736166654261746368547260448201527f616e7366657246726f6d3a20494e56414c49445f4f50455241544f520000000060648201526084016104c4565b73ffffffffffffffffffffffffffffffffffffffff8416610740576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f455243313135355061636b656442616c616e636523736166654261746368547260448201527f616e7366657246726f6d3a20494e56414c49445f524543495049454e5400000060648201526084016104c4565b61074c8585858561172a565b61075a858585855a86611cb6565b5050505050565b60025473ffffffffffffffffffffffffffffffffffffffff1633146107e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e6f7420616c6c6f77656400000000000000000000000000000000000000000060448201526064016104c4565b80516107f5906003906020840190612759565b5050565b8151815160609190811461088f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f455243313135355061636b656442616c616e63652362616c616e63654f66426160448201527f7463683a20494e56414c49445f41525241595f4c454e4754480000000000000060648201526084016104c4565b6000806108dc856000815181106108cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610e3f565b9150915060008060008860008151811061091f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020549050600083905060008567ffffffffffffffff8111156109bc577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156109e5578160200160208202803683370190505b5090506109f28385610e79565b81600081518110610a2c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602090810291909101015260015b86811015610c4557610a7e8982815181106108cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90965094508286141580610b4a5750898181518110610ac6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168a600183610af291906131a2565b81518110610b29577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b15610be5576000808b8381518110610b8b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008781526020019081526020016000205493508592505b610bef8486610e79565b828281518110610c28577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602090810291909101015280610c3d81613239565b915050610a3a565b5098975050505050505050565b60038054610c5f906131e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8b906131e5565b8015610cd85780601f10610cad57610100808354040283529160200191610cd8565b820191906000526020600020905b815481529060010190602001808311610cbb57829003601f168201915b505050505081565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60025473ffffffffffffffffffffffffffffffffffffffff163314610df8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e6f7420616c6c6f77656400000000000000000000000000000000000000000060448201526064016104c4565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600080610e4f602061010061301f565b610e59908461301f565b9150610e68602061010061301f565b610e729084613272565b9050915091565b600080610e8c60016401000000006131a2565b90506000610e9b846020613165565b9490941c169392505050565b3373ffffffffffffffffffffffffffffffffffffffff86161480610efb575073ffffffffffffffffffffffffffffffffffffffff8516600090815260016020908152604080832033845290915290205460ff165b610f87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f455243313135355061636b656442616c616e636523736166655472616e73666560448201527f7246726f6d3a20494e56414c49445f4f50455241544f5200000000000000000060648201526084016104c4565b73ffffffffffffffffffffffffffffffffffffffff841661102a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f455243313135355061636b656442616c616e636523736166655472616e73666560448201527f7246726f6d3a20494e56414c49445f524543495049454e54000000000000000060648201526084016104c4565b61103685858585611e74565b61075a858585855a86611eed565b60025473ffffffffffffffffffffffffffffffffffffffff1633146110c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e6f7420616c6c6f77656400000000000000000000000000000000000000000060448201526064016104c4565b6104e88383836120a1565b60025473ffffffffffffffffffffffffffffffffffffffff163314611151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e6f7420616c6c6f77656400000000000000000000000000000000000000000060448201526064016104c4565b6104e8838383612109565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a260000000000000000000000000000000000000000000000000000000014156111b057506001610442565b7f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161461043f565b815183511461128b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f455243313135354d696e744275726e5061636b656442616c616e6365235f626160448201527f7463684d696e743a20494e56414c49445f4152524159535f4c454e475448000060648201526084016104c4565b825115611478576000806112d2856000815181106108cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff88166000908152602081815260408083208584529091528120548751939550919350916113579190849088908590611348577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160006122bd565b86519091508360015b8281101561143f576113a48982815181106108cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90965094508186146113ed5773ffffffffffffffffffffffffffffffffffffffff8a16600090815260208181526040808320948352939052828120949094558584529220549184905b61142b84868a8481518110611348577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b93508061143781613239565b915050611360565b50505073ffffffffffffffffffffffffffffffffffffffff87166000908152602081815260408083209583529490529290922091909155505b8373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516114ef929190612f37565b60405180910390a461150660008585855a86611cb6565b50505050565b60608161154d575060408051808201909152600181527f30000000000000000000000000000000000000000000000000000000000000006020820152610442565b8160005b8115611577578061156181613239565b91506115709050600a8361301f565b9150611551565b60008167ffffffffffffffff8111156115b9577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156115e3576020820181803683370190505b509050815b85156116af576115f96001826131a2565b90506000611608600a8861301f565b61161390600a613165565b61161d90886131a2565b611628906030612ffa565b905060008160f81b90508084848151811061166c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506116a6600a8961301f565b975050506115e8565b50949350505050565b6116c58484846000612698565b604080518481526020810184905273ffffffffffffffffffffffffffffffffffffffff86169160009133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461150660008585855a86611eed565b8151815181146117e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f455243313135355061636b656442616c616e6365235f7361666542617463685460448201527f72616e7366657246726f6d3a20494e56414c49445f4152524159535f4c454e4760648201527f5448000000000000000000000000000000000000000000000000000000000000608482015260a4016104c4565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415801561181e5750600081115b15611af957600080611863856000815181106108cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff89166000908152602081815260408083208584529091528120548751939550919350916118e891908490889085906118d9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160016122bd565b73ffffffffffffffffffffffffffffffffffffffff88166000908152602081815260408083208784529091528120548751929350909161195c9190859089908590611348577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90508360015b86811015611aa7576119a68982815181106108cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9096509450818614611a155773ffffffffffffffffffffffffffffffffffffffff8b811660009081526020818152604080832086845280835281842098909855928d16825281815282822094825284815282822095909555878152948452808520549290935291909220549084905b611a5384868a84815181106118d9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9350611a9383868a8481518110611348577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b925080611a9f81613239565b915050611962565b505073ffffffffffffffffffffffffffffffffffffffff808a16600090815260208181526040808320888452825280832095909555918a16815280825283812095815294905292209190915550611c31565b60005b81811015611c2f57828181518110611b3d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151611b8f87868481518110611b82577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610341565b1015611c1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f455243313135355061636b656442616c616e6365235f7361666542617463685460448201527f72616e7366657246726f6d3a20554e444552464c4f570000000000000000000060648201526084016104c4565b80611c2781613239565b915050611afc565b505b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611ca7929190612f37565b60405180910390a45050505050565b611cd58573ffffffffffffffffffffffffffffffffffffffff1661271f565b15611e6c5760008573ffffffffffffffffffffffffffffffffffffffff1663bc197c8184338a8989886040518763ffffffff1660e01b8152600401611d1e959493929190612e69565b602060405180830381600088803b158015611d3857600080fd5b5087f1158015611d4c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611d719190612c52565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c810000000000000000000000000000000000000000000000000000000014611e6a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f455243313135355061636b656442616c616e6365235f63616c6c6f6e4552433160448201527f313535426174636852656365697665643a20494e56414c49445f4f4e5f52454360648201527f454956455f4d4553534147450000000000000000000000000000000000000000608482015260a4016104c4565b505b505050505050565b611e818483836001612698565b611e8e8383836000612698565b604080518381526020810183905273ffffffffffffffffffffffffffffffffffffffff808616929087169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291015b60405180910390a450505050565b611f0c8573ffffffffffffffffffffffffffffffffffffffff1661271f565b15611e6c5760008573ffffffffffffffffffffffffffffffffffffffff1663f23a6e6184338a8989886040518763ffffffff1660e01b8152600401611f55959493929190612ed4565b602060405180830381600088803b158015611f6f57600080fd5b5087f1158015611f83573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611fa89190612c52565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e610000000000000000000000000000000000000000000000000000000014611e6a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f455243313135355061636b656442616c616e6365235f63616c6c6f6e4552433160448201527f31353552656365697665643a20494e56414c49445f4f4e5f524543454956455f60648201527f4d45535341474500000000000000000000000000000000000000000000000000608482015260a4016104c4565b6120ae8383836001612698565b604080518381526020810183905260009173ffffffffffffffffffffffffffffffffffffffff86169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4505050565b81518151811461219b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f455243313135354d696e744275726e5061636b656442616c616e63652362617460448201527f63684275726e3a20494e56414c49445f4152524159535f4c454e47544800000060648201526084016104c4565b60005b8181101561224557612233858583815181106121e3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858481518110612224577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516001612698565b8061223d81613239565b91505061219e565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611edf929190612f37565b6000806122cb856020613165565b905060006122df60016401000000006131a2565b9050600084600181111561231c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b141561246c5761232e85831b88612fe2565b9250868310156123c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f455243313135355061636b656442616c616e6365235f7669657755706461746560448201527f42696e56616c75653a204f564552464c4f57000000000000000000000000000060648201526084016104c4565b6123cc60206002613079565b6123da8689851c8416612fe2565b10612467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f455243313135355061636b656442616c616e6365235f7669657755706461746560448201527f42696e56616c75653a204f564552464c4f57000000000000000000000000000060648201526084016104c4565b61268e565b60018460018111156124a7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156125e0576124b985831b886131a2565b92508683111561254b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f455243313135355061636b656442616c616e6365235f7669657755706461746560448201527f42696e56616c75653a20554e444552464c4f570000000000000000000000000060648201526084016104c4565b84818389901c161015612467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f455243313135355061636b656442616c616e6365235f7669657755706461746560448201527f42696e56616c75653a20554e444552464c4f570000000000000000000000000060648201526084016104c4565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f455243313135355061636b656442616c616e6365235f7669657755706461746560448201527f42696e56616c75653a20494e56414c49445f42494e5f57524954455f4f50455260648201527f4154494f4e000000000000000000000000000000000000000000000000000000608482015260a4016104c4565b5050949350505050565b6000806126a485610e3f565b73ffffffffffffffffffffffffffffffffffffffff881660009081526020818152604080832085845290915290205491935091506126e4908286866122bd565b73ffffffffffffffffffffffffffffffffffffffff909616600090815260208181526040808320948352939052919091209490945550505050565b6000813f801580159061275257507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708114155b9392505050565b828054612765906131e5565b90600052602060002090601f01602090048101928261278757600085556127cd565b82601f106127a057805160ff19168380011785556127cd565b828001600101855582156127cd579182015b828111156127cd5782518255916020019190600101906127b2565b506127d99291506127dd565b5090565b5b808211156127d957600081556001016127de565b600067ffffffffffffffff83111561280c5761280c6132e4565b61283d60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f86011601612f6f565b905082815283838301111561285157600080fd5b828260208301376000602084830101529392505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461044257600080fd5b600082601f83011261289c578081fd5b813560206128b16128ac83612fbe565b612f6f565b80838252828201915082860187848660051b89010111156128d0578586fd5b855b858110156128ee578135845292840192908401906001016128d2565b5090979650505050505050565b600082601f83011261290b578081fd5b612752838335602085016127f2565b60006020828403121561292b578081fd5b61275282612868565b60008060408385031215612946578081fd5b61294f83612868565b915061295d60208401612868565b90509250929050565b600080600080600060a0868803121561297d578081fd5b61298686612868565b945061299460208701612868565b9350604086013567ffffffffffffffff808211156129b0578283fd5b6129bc89838a0161288c565b945060608801359150808211156129d1578283fd5b6129dd89838a0161288c565b935060808801359150808211156129f2578283fd5b506129ff888289016128fb565b9150509295509295909350565b600080600080600060a08688031215612a23578081fd5b612a2c86612868565b9450612a3a60208701612868565b93506040860135925060608601359150608086013567ffffffffffffffff811115612a63578182fd5b6129ff888289016128fb565b600080600060608486031215612a83578283fd5b612a8c84612868565b9250602084013567ffffffffffffffff80821115612aa8578384fd5b612ab48783880161288c565b93506040860135915080821115612ac9578283fd5b50612ad68682870161288c565b9150509250925092565b60008060408385031215612af2578182fd5b612afb83612868565b915060208301358015158114612b0f578182fd5b809150509250929050565b60008060408385031215612b2c578182fd5b612b3583612868565b946020939093013593505050565b600080600060608486031215612b57578081fd5b612b6084612868565b95602085013595506040909401359392505050565b60008060408385031215612b87578182fd5b823567ffffffffffffffff80821115612b9e578384fd5b818501915085601f830112612bb1578384fd5b81356020612bc16128ac83612fbe565b8083825282820191508286018a848660051b8901011115612be0578889fd5b8896505b84871015612c0957612bf581612868565b835260019690960195918301918301612be4565b5096505086013592505080821115612c1f578283fd5b50612c2c8582860161288c565b9150509250929050565b600060208284031215612c47578081fd5b813561275281613313565b600060208284031215612c63578081fd5b815161275281613313565b600060208284031215612c7f578081fd5b813567ffffffffffffffff811115612c95578182fd5b8201601f81018413612ca5578182fd5b612cb4848235602084016127f2565b949350505050565b600060208284031215612ccd578081fd5b5035919050565b60008060408385031215612ce6578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b83811015612d2457815187529582019590820190600101612d08565b509495945050505050565b60008151808452612d478160208601602086016131b9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60008151612d8b8185602086016131b9565b9290920192915050565b600080845482600182811c915080831680612db157607f831692505b6020808410821415612dea577f4e487b710000000000000000000000000000000000000000000000000000000087526022600452602487fd5b818015612dfe5760018114612e2d57612e59565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00861689528489019650612e59565b60008b815260209020885b86811015612e515781548b820152908501908301612e38565b505084890196505b50505050505061038d8185612d79565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525060a06040830152612ea260a0830186612cf5565b8281036060840152612eb48186612cf5565b90508281036080840152612ec88185612d2f565b98975050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015283606083015260a06080830152612f1960a0830184612d2f565b979650505050505050565b6000602082526127526020830184612cf5565b600060408252612f4a6040830185612cf5565b828103602084015261038d8185612cf5565b6000602082526127526020830184612d2f565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612fb657612fb66132e4565b604052919050565b600067ffffffffffffffff821115612fd857612fd86132e4565b5060051b60200190565b60008219821115612ff557612ff5613286565b500190565b600060ff821660ff84168060ff0382111561301757613017613286565b019392505050565b60008261302e5761302e6132b5565b500490565b80825b60018086116130455750613070565b81870482111561305757613057613286565b8086161561306457918102915b9490941c938002613036565b94509492505050565b60006127527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846000826130b057506001612752565b816130bd57506000612752565b81600181146130d357600281146130dd5761310a565b6001915050612752565b60ff8411156130ee576130ee613286565b6001841b91508482111561310457613104613286565b50612752565b5060208310610133831016604e8410600b841016171561313d575081810a8381111561313857613138613286565b612752565b61314a8484846001613033565b80860482111561315c5761315c613286565b02949350505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561319d5761319d613286565b500290565b6000828210156131b4576131b4613286565b500390565b60005b838110156131d45781810151838201526020016131bc565b838111156115065750506000910152565b600181811c908216806131f957607f821691505b60208210811415613233577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561326b5761326b613286565b5060010190565b600082613281576132816132b5565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7fffffffff000000000000000000000000000000000000000000000000000000008116811461334157600080fd5b5056fea2646970667358221220ce6a36360efef742b47fa037fc5bf88afb7a3e2a79d84aca3265c27e7a4e942d64736f6c63430008030033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004268747470733a2f2f75732d63656e7472616c312d72656e66742d6e6674732d6d6574612e636c6f756466756e6374696f6e732e6e65742f6765744d6574613f69643d000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _baseURI (string): https://us-central1-renft-nfts-meta.cloudfunctions.net/getMeta?id=
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000042
Arg [2] : 68747470733a2f2f75732d63656e7472616c312d72656e66742d6e6674732d6d
Arg [3] : 6574612e636c6f756466756e6374696f6e732e6e65742f6765744d6574613f69
Arg [4] : 643d000000000000000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.