Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
Latest 25 from a total of 36 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Add Script Chunk | 21556367 | 73 days ago | IN | 0 ETH | 0.00129102 | ||||
Add Script Chunk | 21556360 | 73 days ago | IN | 0 ETH | 0.00146038 | ||||
Add Script Chunk | 18067352 | 561 days ago | IN | 0 ETH | 0.17125474 | ||||
Add Script Chunk | 18067350 | 561 days ago | IN | 0 ETH | 0.26856618 | ||||
Add Script Chunk | 18039203 | 565 days ago | IN | 0 ETH | 0.30036134 | ||||
Create Series | 18002611 | 570 days ago | IN | 0 ETH | 0.0009562 | ||||
Set Token URI Pr... | 17073636 | 700 days ago | IN | 0 ETH | 0.0019134 | ||||
Set Token URI Pr... | 17071072 | 701 days ago | IN | 0 ETH | 0.00127194 | ||||
Set Token URI Pr... | 17071065 | 701 days ago | IN | 0 ETH | 0.00128862 | ||||
Mint Internal | 17071059 | 701 days ago | IN | 0 ETH | 0.00620841 | ||||
Add Script Chunk | 17071005 | 701 days ago | IN | 0 ETH | 0.10890273 | ||||
Set Token URI Pr... | 15755148 | 885 days ago | IN | 0 ETH | 0.00084253 | ||||
Set Token URI Pr... | 15701037 | 893 days ago | IN | 0 ETH | 0.00027061 | ||||
Mint Internal | 15700824 | 893 days ago | IN | 0 ETH | 0.00085785 | ||||
Set Token URI Pr... | 15700807 | 893 days ago | IN | 0 ETH | 0.00020042 | ||||
Add Script Chunk | 15700780 | 893 days ago | IN | 0 ETH | 0.03175918 | ||||
Set Token URI Pr... | 15437880 | 932 days ago | IN | 0 ETH | 0.00061346 | ||||
Mint Internal | 15437874 | 932 days ago | IN | 0 ETH | 0.00211689 | ||||
Add Script Chunk | 15437856 | 932 days ago | IN | 0 ETH | 0.06368476 | ||||
Set Token URI Pr... | 15380363 | 941 days ago | IN | 0 ETH | 0.00018375 | ||||
Mint Internal | 15380123 | 941 days ago | IN | 0 ETH | 0.00119466 | ||||
Add Script Chunk | 15380108 | 941 days ago | IN | 0 ETH | 0.02688343 | ||||
Set Token URI Pr... | 15286751 | 956 days ago | IN | 0 ETH | 0.00024219 | ||||
Add Script Chunk | 15264625 | 959 days ago | IN | 0 ETH | 0.01253278 | ||||
Set Token URI Pr... | 15261276 | 960 days ago | IN | 0 ETH | 0.00034813 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
MitchellsExtension
Compiler Version
v0.8.7+commit.e28d00a7
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /// @title: Andrew Mitchell's Manifold Extension /// @author: Andrew Mitchell /// @author: manifold.xyz import "@manifoldxyz/libraries-solidity/contracts/access/IAdminControl.sol"; import "@manifoldxyz/creator-core-solidity/contracts/core/IERC721CreatorCore.sol"; import "@manifoldxyz/creator-core-solidity/contracts/extensions/CreatorExtension.sol"; import "@manifoldxyz/creator-core-solidity/contracts/extensions/ICreatorExtensionTokenURI.sol"; import "@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol"; import "@openzeppelin/contracts/utils/Strings.sol"; import "@openzeppelin/contracts/utils/math/SafeMath.sol"; import "./IManifoldERC721Edition.sol"; /** * 72 101 108 108 111 87 111 114 108 100 * * Andrew Mitchell's custom contract extension. * mitchel1.eth, mitchel1.tez * Uses the Manifold ERC721 Edition Controller Implementation */ contract MitchellsExtension is AdminControl, CreatorExtension, ICreatorExtensionTokenURI, IManifoldERC721Edition { using SafeMath for uint256; using Strings for uint256; struct IndexRange { uint256 startIndex; uint256 count; } mapping(address => mapping(uint256 => string)) public _tokenPrefix; mapping(address => mapping(uint256 => uint256)) public _maxSupply; mapping(address => mapping(uint256 => uint256)) public _price; mapping(address => mapping(uint256 => uint256)) public _totalSupply; mapping(address => mapping(uint256 => IndexRange[])) public _indexRanges; mapping(address => mapping(uint256 => mapping(uint256 => string))) public _scripts; mapping(address => mapping(uint256 => mapping(uint256 => uint256))) _creationDates; mapping(address => mapping(uint256 => mapping(uint256 => address))) _creators; mapping(address => uint256) public _currentSeries; mapping(address => mapping(uint256 => bool)) pauses; function supportsInterface(bytes4 interfaceId) public view virtual override(AdminControl, CreatorExtension, IERC165) returns (bool) { return interfaceId == type(ICreatorExtensionTokenURI).interfaceId || interfaceId == type(IManifoldERC721Edition).interfaceId || CreatorExtension.supportsInterface(interfaceId); } /** * @dev See {IManifoldERC721Edition-totalSupply}. */ function totalSupply(address creator, uint256 series) external view override returns(uint256) { return _totalSupply[creator][series]; } /** * @dev See {IManifoldERC721Edition-maxSupply}. */ function maxSupply(address creator, uint256 series) external view override returns(uint256) { return _maxSupply[creator][series]; } /** * @dev See {IManifoldERC721Edition-createSeries}. */ function createSeries(address creator, uint256 maxSupply_, string calldata prefix) external override adminRequired returns(uint256) { _currentSeries[creator] += 1; uint256 series = _currentSeries[creator]; _maxSupply[creator][series] = maxSupply_; _tokenPrefix[creator][series] = prefix; emit SeriesCreated(msg.sender, creator, series, maxSupply_); return series; } /** * @dev See {IManifoldERC721Edition-latestSeries}. */ function latestSeries(address creator) external view override returns(uint256) { return _currentSeries[creator]; } /** * See {IManifoldERC721Edition-setTokenURIPrefix}. */ function setTokenURIPrefix(address creator, uint256 series, string calldata prefix) external override adminRequired { require(series > 0 && series <= _currentSeries[creator], "Invalid series"); _tokenPrefix[creator][series] = prefix; } /** * Set price of a series */ function setPrice(address creator, uint256 series, uint256 price) external adminRequired { require(series > 0 && series <= _currentSeries[creator], "Invalid series"); _price[creator][series] = price; } /** * @dev See {ICreatorExtensionTokenURI-tokenURI}. */ function tokenURI(address creator, uint256 tokenId) external view override returns (string memory) { (uint256 series, uint256 index) = _tokenSeriesAndIndex(creator, tokenId); return string(abi.encodePacked(_tokenPrefix[creator][series], (index+1).toString())); } /** * @dev See {IManifoldERC721Edition-mint}. */ function mint(address creator, uint256 series, address recipient, uint16 count) external override payable { require(!pauses[creator][series], "Sale has not started"); require(count > 0, "Invalid amount requested"); require(_totalSupply[creator][series]+count <= _maxSupply[creator][series], "Too many requested"); require(msg.value >=_price[creator][series].mul(count), "Not enough ETH sent"); uint256[] memory tokenIds = IERC721CreatorCore(creator).mintExtensionBatch(recipient, count); uint mintIndex = _totalSupply[creator][series]; for (uint256 i = 0; i < count;) { _creators[creator][series][mintIndex] = recipient; _creationDates[creator][series][mintIndex] = block.number; mintIndex++; unchecked{i++;} } _updateIndexRanges(creator, series, tokenIds[0], count); } /** * @dev See {IManifoldERC721Edition-mint}. */ function mintInternal(address creator, uint256 series, address[] calldata recipients) external override adminRequired { require(recipients.length > 0, "Invalid amount requested"); require(_totalSupply[creator][series]+recipients.length <= _maxSupply[creator][series], "Too many requested"); uint mintIndex = _totalSupply[creator][series]; uint256 startIndex = IERC721CreatorCore(creator).mintExtension(recipients[0]); _creators[creator][series][mintIndex] = recipients[0]; _creationDates[creator][series][mintIndex] = block.number; mintIndex ++; for (uint256 i = 1; i < recipients.length;) { IERC721CreatorCore(creator).mintExtension(recipients[i]); _creators[creator][series][mintIndex] = recipients[i]; _creationDates[creator][series][mintIndex] = block.number; mintIndex++; unchecked{i++;} } _updateIndexRanges(creator, series, startIndex, recipients.length); } /** * @dev Update the index ranges, which is used to figure out the index from a tokenId */ function _updateIndexRanges(address creator, uint256 series, uint256 startIndex, uint256 count) internal { IndexRange[] storage indexRanges = _indexRanges[creator][series]; if (indexRanges.length == 0) { indexRanges.push(IndexRange(startIndex, count)); } else { IndexRange storage lastIndexRange = indexRanges[indexRanges.length-1]; if ((lastIndexRange.startIndex + lastIndexRange.count) == startIndex) { lastIndexRange.count += count; } else { indexRanges.push(IndexRange(startIndex, count)); } } _totalSupply[creator][series] += count; } /** * @dev Index from tokenId */ function _tokenSeriesAndIndex(address creator, uint256 tokenId) internal view returns(uint256, uint256) { require(_currentSeries[creator] > 0, "Invalid token"); for (uint series=1; series <= _currentSeries[creator]; series++) { IndexRange[] memory indexRanges = _indexRanges[creator][series]; uint256 offset; for (uint i = 0; i < indexRanges.length; i++) { IndexRange memory currentIndex = indexRanges[i]; if (tokenId < currentIndex.startIndex) break; if (tokenId >= currentIndex.startIndex && tokenId < currentIndex.startIndex + currentIndex.count) { return (series, tokenId - currentIndex.startIndex + offset); } offset += currentIndex.count; } } revert("Invalid token"); } /** * @dev Token Hash used to generate art piece */ function tokenHash(address creator, uint256 series, uint256 tokenId) public view returns (bytes32){ require(_totalSupply[creator][series] >= tokenId, "Token nonexistent"); return bytes32(keccak256(abi.encodePacked(address(creator), _creationDates[creator][series][tokenId], _creators[creator][series][tokenId], tokenId))); } /** * @dev Pause is used to manage when mints can occur */ function togglePause(address creator, uint256 series, bool paused) public adminRequired { pauses[creator][series] = paused; } function addScriptChunk(address creator, uint256 series, uint256 index, string memory _chunk) public adminRequired { _scripts[creator][series][index]=_chunk; } function getScriptChunk(address creator, uint256 series, uint256 index) public view returns (string memory) { return _scripts[creator][series][index]; } function removeScriptChunk(address creator, uint256 series, uint256 index) public adminRequired { delete _scripts[creator][series][index]; } function withdrawAll() public adminRequired { require(payable(msg.sender).send(address(this).balance)); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /// @author: manifold.xyz /** * Manifold ERC721 Edition Controller interface */ interface IManifoldERC721Edition { event SeriesCreated(address caller, address creator, uint256 series, uint256 maxSupply); /** * @dev Create a new series. Returns the series id. */ function createSeries(address creator, uint256 maxSupply, string calldata prefix) external returns(uint256); /** * @dev Get the latest series created. */ function latestSeries(address creator) external view returns(uint256); /** * @dev Set the token uri prefix */ function setTokenURIPrefix(address creator, uint256 series, string calldata prefix) external; /** * @dev Mint NFTs to a single recipient */ function mint(address creator, uint256 series, address recipient, uint16 count) external payable; /** * @dev Mint NFTS to the recipients */ function mintInternal(address creator, uint256 series, address[] calldata recipients) external; /** * @dev Total supply of editions */ function totalSupply(address creator, uint256 series) external view returns(uint256); /** * @dev Max supply of editions */ function maxSupply(address creator, uint256 series) external view returns(uint256); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /// @author: manifold.xyz import "@openzeppelin/contracts/utils/introspection/ERC165.sol"; import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "./IAdminControl.sol"; abstract contract AdminControl is Ownable, IAdminControl, ERC165 { using EnumerableSet for EnumerableSet.AddressSet; // Track registered admins EnumerableSet.AddressSet private _admins; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IAdminControl).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Only allows approved admins to call the specified function */ modifier adminRequired() { require(owner() == msg.sender || _admins.contains(msg.sender), "AdminControl: Must be owner or admin"); _; } /** * @dev See {IAdminControl-getAdmins}. */ function getAdmins() external view override returns (address[] memory admins) { admins = new address[](_admins.length()); for (uint i = 0; i < _admins.length(); i++) { admins[i] = _admins.at(i); } return admins; } /** * @dev See {IAdminControl-approveAdmin}. */ function approveAdmin(address admin) external override onlyOwner { if (!_admins.contains(admin)) { emit AdminApproved(admin, msg.sender); _admins.add(admin); } } /** * @dev See {IAdminControl-revokeAdmin}. */ function revokeAdmin(address admin) external override onlyOwner { if (_admins.contains(admin)) { emit AdminRevoked(admin, msg.sender); _admins.remove(admin); } } /** * @dev See {IAdminControl-isAdmin}. */ function isAdmin(address admin) public override view returns (bool) { return (owner() == admin || _admins.contains(admin)); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /// @author: manifold.xyz import "@openzeppelin/contracts/utils/introspection/IERC165.sol"; /** * @dev Implement this if you want your extension to have overloadable URI's */ interface ICreatorExtensionTokenURI is IERC165 { /** * Get the uri for a given creator/tokenId */ function tokenURI(address creator, uint256 tokenId) external view returns (string memory); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /// @author: manifold.xyz import "@openzeppelin/contracts/utils/introspection/ERC165.sol"; /** * @dev Base creator extension variables */ abstract contract CreatorExtension is ERC165 { /** * @dev Legacy extension interface identifiers * * {IERC165-supportsInterface} needs to return 'true' for this interface * in order backwards compatible with older creator contracts */ bytes4 constant internal LEGACY_EXTENSION_INTERFACE = 0x7005caad; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165) returns (bool) { return interfaceId == LEGACY_EXTENSION_INTERFACE || super.supportsInterface(interfaceId); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /// @author: manifold.xyz import "./ICreatorCore.sol"; /** * @dev Core ERC721 creator interface */ interface IERC721CreatorCore is ICreatorCore { /** * @dev mint a token with no extension. Can only be called by an admin. * Returns tokenId minted */ function mintBase(address to) external returns (uint256); /** * @dev mint a token with no extension. Can only be called by an admin. * Returns tokenId minted */ function mintBase(address to, string calldata uri) external returns (uint256); /** * @dev batch mint a token with no extension. Can only be called by an admin. * Returns tokenId minted */ function mintBaseBatch(address to, uint16 count) external returns (uint256[] memory); /** * @dev batch mint a token with no extension. Can only be called by an admin. * Returns tokenId minted */ function mintBaseBatch(address to, string[] calldata uris) external returns (uint256[] memory); /** * @dev mint a token. Can only be called by a registered extension. * Returns tokenId minted */ function mintExtension(address to) external returns (uint256); /** * @dev mint a token. Can only be called by a registered extension. * Returns tokenId minted */ function mintExtension(address to, string calldata uri) external returns (uint256); /** * @dev batch mint a token. Can only be called by a registered extension. * Returns tokenIds minted */ function mintExtensionBatch(address to, uint16 count) external returns (uint256[] memory); /** * @dev batch mint a token. Can only be called by a registered extension. * Returns tokenId minted */ function mintExtensionBatch(address to, string[] calldata uris) external returns (uint256[] memory); /** * @dev burn a token. Can only be called by token owner or approved address. * On burn, calls back to the registered extension's onBurn method */ function burn(uint256 tokenId) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /// @author: manifold.xyz import "@openzeppelin/contracts/utils/introspection/IERC165.sol"; /** * @dev Interface for admin control */ interface IAdminControl is IERC165 { event AdminApproved(address indexed account, address indexed sender); event AdminRevoked(address indexed account, address indexed sender); /** * @dev gets address of all admins */ function getAdmins() external view returns (address[] memory); /** * @dev add an admin. Can only be called by contract owner. */ function approveAdmin(address admin) external; /** * @dev remove an admin. Can only be called by contract owner. */ function revokeAdmin(address admin) external; /** * @dev checks whether or not given address is an admin * Returns True if they are */ function isAdmin(address admin) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (utils/structs/EnumerableSet.sol) pragma solidity ^0.8.0; /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) * and `uint256` (`UintSet`) are supported. * * [WARNING] * ==== * Trying to delete such a structure from storage will likely result in data corruption, rendering the structure unusable. * See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info. * * In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an array of EnumerableSet. * ==== */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping(bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; if (lastIndex != toDeleteIndex) { bytes32 lastValue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastValue; // Update the index for the moved value set._indexes[lastValue] = valueIndex; // Replace lastValue's index to valueIndex } // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { return set._values[index]; } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function _values(Set storage set) private view returns (bytes32[] memory) { return set._values; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(Bytes32Set storage set) internal view returns (bytes32[] memory) { return _values(set._inner); } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(AddressSet storage set) internal view returns (address[] memory) { bytes32[] memory store = _values(set._inner); address[] memory result; /// @solidity memory-safe-assembly assembly { result := store } return result; } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(UintSet storage set) internal view returns (uint256[] memory) { bytes32[] memory store = _values(set._inner); uint256[] memory result; /// @solidity memory-safe-assembly assembly { result := store } return result; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /// @author: manifold.xyz import "@openzeppelin/contracts/utils/introspection/IERC165.sol"; /** * @dev Core creator interface */ interface ICreatorCore is IERC165 { event ExtensionRegistered(address indexed extension, address indexed sender); event ExtensionUnregistered(address indexed extension, address indexed sender); event ExtensionBlacklisted(address indexed extension, address indexed sender); event MintPermissionsUpdated(address indexed extension, address indexed permissions, address indexed sender); event RoyaltiesUpdated(uint256 indexed tokenId, address payable[] receivers, uint256[] basisPoints); event DefaultRoyaltiesUpdated(address payable[] receivers, uint256[] basisPoints); event ExtensionRoyaltiesUpdated(address indexed extension, address payable[] receivers, uint256[] basisPoints); event ExtensionApproveTransferUpdated(address indexed extension, bool enabled); /** * @dev gets address of all extensions */ function getExtensions() external view returns (address[] memory); /** * @dev add an extension. Can only be called by contract owner or admin. * extension address must point to a contract implementing ICreatorExtension. * Returns True if newly added, False if already added. */ function registerExtension(address extension, string calldata baseURI) external; /** * @dev add an extension. Can only be called by contract owner or admin. * extension address must point to a contract implementing ICreatorExtension. * Returns True if newly added, False if already added. */ function registerExtension(address extension, string calldata baseURI, bool baseURIIdentical) external; /** * @dev add an extension. Can only be called by contract owner or admin. * Returns True if removed, False if already removed. */ function unregisterExtension(address extension) external; /** * @dev blacklist an extension. Can only be called by contract owner or admin. * This function will destroy all ability to reference the metadata of any tokens created * by the specified extension. It will also unregister the extension if needed. * Returns True if removed, False if already removed. */ function blacklistExtension(address extension) external; /** * @dev set the baseTokenURI of an extension. Can only be called by extension. */ function setBaseTokenURIExtension(string calldata uri) external; /** * @dev set the baseTokenURI of an extension. Can only be called by extension. * For tokens with no uri configured, tokenURI will return "uri+tokenId" */ function setBaseTokenURIExtension(string calldata uri, bool identical) external; /** * @dev set the common prefix of an extension. Can only be called by extension. * If configured, and a token has a uri set, tokenURI will return "prefixURI+tokenURI" * Useful if you want to use ipfs/arweave */ function setTokenURIPrefixExtension(string calldata prefix) external; /** * @dev set the tokenURI of a token extension. Can only be called by extension that minted token. */ function setTokenURIExtension(uint256 tokenId, string calldata uri) external; /** * @dev set the tokenURI of a token extension for multiple tokens. Can only be called by extension that minted token. */ function setTokenURIExtension(uint256[] memory tokenId, string[] calldata uri) external; /** * @dev set the baseTokenURI for tokens with no extension. Can only be called by owner/admin. * For tokens with no uri configured, tokenURI will return "uri+tokenId" */ function setBaseTokenURI(string calldata uri) external; /** * @dev set the common prefix for tokens with no extension. Can only be called by owner/admin. * If configured, and a token has a uri set, tokenURI will return "prefixURI+tokenURI" * Useful if you want to use ipfs/arweave */ function setTokenURIPrefix(string calldata prefix) external; /** * @dev set the tokenURI of a token with no extension. Can only be called by owner/admin. */ function setTokenURI(uint256 tokenId, string calldata uri) external; /** * @dev set the tokenURI of multiple tokens with no extension. Can only be called by owner/admin. */ function setTokenURI(uint256[] memory tokenIds, string[] calldata uris) external; /** * @dev set a permissions contract for an extension. Used to control minting. */ function setMintPermissions(address extension, address permissions) external; /** * @dev Configure so transfers of tokens created by the caller (must be extension) gets approval * from the extension before transferring */ function setApproveTransferExtension(bool enabled) external; /** * @dev get the extension of a given token */ function tokenExtension(uint256 tokenId) external view returns (address); /** * @dev Set default royalties */ function setRoyalties(address payable[] calldata receivers, uint256[] calldata basisPoints) external; /** * @dev Set royalties of a token */ function setRoyalties(uint256 tokenId, address payable[] calldata receivers, uint256[] calldata basisPoints) external; /** * @dev Set royalties of an extension */ function setRoyaltiesExtension(address extension, address payable[] calldata receivers, uint256[] calldata basisPoints) external; /** * @dev Get royalites of a token. Returns list of receivers and basisPoints */ function getRoyalties(uint256 tokenId) external view returns (address payable[] memory, uint256[] memory); // Royalty support for various other standards function getFeeRecipients(uint256 tokenId) external view returns (address payable[] memory); function getFeeBps(uint256 tokenId) external view returns (uint[] memory); function getFees(uint256 tokenId) external view returns (address payable[] memory, uint256[] memory); function royaltyInfo(uint256 tokenId, uint256 value) external view returns (address, uint256); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"AdminApproved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"AdminRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"address","name":"creator","type":"address"},{"indexed":false,"internalType":"uint256","name":"series","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxSupply","type":"uint256"}],"name":"SeriesCreated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_currentSeries","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"_indexRanges","outputs":[{"internalType":"uint256","name":"startIndex","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"_maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"_scripts","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"_tokenPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"creator","type":"address"},{"internalType":"uint256","name":"series","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"string","name":"_chunk","type":"string"}],"name":"addScriptChunk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"approveAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"creator","type":"address"},{"internalType":"uint256","name":"maxSupply_","type":"uint256"},{"internalType":"string","name":"prefix","type":"string"}],"name":"createSeries","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAdmins","outputs":[{"internalType":"address[]","name":"admins","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"creator","type":"address"},{"internalType":"uint256","name":"series","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getScriptChunk","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"isAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"creator","type":"address"}],"name":"latestSeries","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"creator","type":"address"},{"internalType":"uint256","name":"series","type":"uint256"}],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"creator","type":"address"},{"internalType":"uint256","name":"series","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint16","name":"count","type":"uint16"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"creator","type":"address"},{"internalType":"uint256","name":"series","type":"uint256"},{"internalType":"address[]","name":"recipients","type":"address[]"}],"name":"mintInternal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"creator","type":"address"},{"internalType":"uint256","name":"series","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"removeScriptChunk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"revokeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"creator","type":"address"},{"internalType":"uint256","name":"series","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"creator","type":"address"},{"internalType":"uint256","name":"series","type":"uint256"},{"internalType":"string","name":"prefix","type":"string"}],"name":"setTokenURIPrefix","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":[{"internalType":"address","name":"creator","type":"address"},{"internalType":"uint256","name":"series","type":"uint256"},{"internalType":"bool","name":"paused","type":"bool"}],"name":"togglePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"creator","type":"address"},{"internalType":"uint256","name":"series","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"creator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"creator","type":"address"},{"internalType":"uint256","name":"series","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6127b18061007e6000396000f3fe6080604052600436106101cd5760003560e01c8063654fb5bd116100f7578063b2811b6a11610095578063e9dc637511610064578063e9dc6375146105dc578063f195a539146105fc578063f2fde38b1461061c578063f845ff5e1461063c57600080fd5b8063b2811b6a1461054f578063b7f909941461057c578063dc6778831461059c578063e8e07280146105bc57600080fd5b80637e4e3d6f116100d15780637e4e3d6f146104af57806381a9f7a2146104f2578063853828b6146105125780638da5cb5b1461052757600080fd5b8063654fb5bd1461045a5780636d73e6691461047a578063715018a61461049a57600080fd5b80632d3456701161016f578063346e6c0e1161013e578063346e6c0e146103715780633580e71b146103b45780633c93d771146103ea578063572578c31461042257600080fd5b80632d345670146102fc5780632f6196b71461031c5780633011e16a1461032f57806331ae450b1461034f57600080fd5b80630f3f24e5116101ab5780630f3f24e514610254578063151c6f411461029a57806318826a34146102ba57806324d7806c146102dc57600080fd5b806301ffc9a7146101d257806306f7221b146102075780630ed795e214610234575b600080fd5b3480156101de57600080fd5b506101f26101ed366004612416565b610671565b60405190151581526020015b60405180910390f35b34801561021357600080fd5b5061022761022236600461227d565b6106b7565b6040516101fe9190612569565b34801561024057600080fd5b5061022761024f36600461227d565b610762565b34801561026057600080fd5b5061028c61026f3660046120b6565b600460209081526000928352604080842090915290825290205481565b6040519081526020016101fe565b3480156102a657600080fd5b5061028c6102b5366004612205565b610823565b3480156102c657600080fd5b506102da6102d5366004612136565b61094b565b005b3480156102e857600080fd5b506101f26102f736600461209b565b610d2c565b34801561030857600080fd5b506102da61031736600461209b565b610d65565b6102da61032a3660046120e0565b610dc3565b34801561033b57600080fd5b506102da61034a36600461227d565b6110dc565b34801561035b57600080fd5b506103646111b1565b6040516101fe919061251c565b34801561037d57600080fd5b5061028c61038c3660046120b6565b6001600160a01b03919091166000908152600660209081526040808320938352929052205490565b3480156103c057600080fd5b5061028c6103cf36600461209b565b6001600160a01b03166000908152600b602052604090205490565b3480156103f657600080fd5b5061028c6104053660046120b6565b600560209081526000928352604080842090915290825290205481565b34801561042e57600080fd5b5061028c61043d3660046120b6565b600660209081526000928352604080842090915290825290205481565b34801561046657600080fd5b506102da610475366004612205565b611260565b34801561048657600080fd5b506102da61049536600461209b565b611344565b3480156104a657600080fd5b506102da61139c565b3480156104bb57600080fd5b5061028c6104ca3660046120b6565b6001600160a01b03919091166000908152600460209081526040808320938352929052205490565b3480156104fe57600080fd5b506102da61050d36600461227d565b6113b0565b34801561051e57600080fd5b506102da611433565b34801561053357600080fd5b506000546040516001600160a01b0390911681526020016101fe565b34801561055b57600080fd5b5061028c61056a36600461209b565b600b6020526000908152604090205481565b34801561058857600080fd5b5061028c61059736600461227d565b6114a1565b3480156105a857600080fd5b506102da6105b73660046121c0565b6115a2565b3480156105c857600080fd5b506102276105d73660046120b6565b611621565b3480156105e857600080fd5b506102276105f73660046120b6565b611645565b34801561060857600080fd5b506102da6106173660046122b0565b6116b9565b34801561062857600080fd5b506102da61063736600461209b565b61173c565b34801561064857600080fd5b5061065c61065736600461227d565b6117b2565b604080519283526020830191909152016101fe565b60006001600160e01b0319821663e9dc637560e01b14806106a257506001600160e01b03198216633810900560e01b145b806106b157506106b1826117fc565b92915050565b6008602090815260009384526040808520825292845282842090528252902080546106e1906126a3565b80601f016020809104026020016040519081016040528092919081815260200182805461070d906126a3565b801561075a5780601f1061072f5761010080835404028352916020019161075a565b820191906000526020600020905b81548152906001019060200180831161073d57829003601f168201915b505050505081565b6001600160a01b03831660009081526008602090815260408083208584528252808320848452909152902080546060919061079c906126a3565b80601f01602080910402602001604051908101604052809291908181526020018280546107c8906126a3565b80156108155780601f106107ea57610100808354040283529160200191610815565b820191906000526020600020905b8154815290600101906020018083116107f857829003601f168201915b505050505090509392505050565b6000336108386000546001600160a01b031690565b6001600160a01b031614806108535750610853600133611821565b6108785760405162461bcd60e51b815260040161086f9061259c565b60405180910390fd5b6001600160a01b0385166000908152600b602052604081208054600192906108a1908490612611565b90915550506001600160a01b0385166000818152600b60209081526040808320546004835281842081855283528184208990559383526003825280832084845290915290206108f1908585611f3c565b50604080513381526001600160a01b0388166020820152908101829052606081018690527f739bed52023d4028ee60025b96a4024aacf5aff3162e8c9711084c74d6b8c6139060800160405180910390a195945050505050565b3361095e6000546001600160a01b031690565b6001600160a01b031614806109795750610979600133611821565b6109955760405162461bcd60e51b815260040161086f9061259c565b806109dd5760405162461bcd60e51b8152602060048201526018602482015277125b9d985b1a5908185b5bdd5b9d081c995c5d595cdd195960421b604482015260640161086f565b6001600160a01b038416600081815260046020908152604080832087845282528083205493835260068252808320878452909152902054610a1f908390612611565b1115610a625760405162461bcd60e51b8152602060048201526012602482015271151bdbc81b585b9e481c995c5d595cdd195960721b604482015260640161086f565b6001600160a01b038416600081815260066020908152604080832087845290915281205491632928ca5885858481610a9c57610a9c61274f565b9050602002016020810190610ab1919061209b565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381600087803b158015610af257600080fd5b505af1158015610b06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2a9190612440565b905083836000818110610b3f57610b3f61274f565b9050602002016020810190610b54919061209b565b6001600160a01b038781166000818152600a602090815260408083208b84528252808320888452825280832080546001600160a01b03191696909516959095179093559081526009825282812088825282528281208582529091522043905581610bbd816126de565b9250600190505b83811015610d1757866001600160a01b0316632928ca58868684818110610bed57610bed61274f565b9050602002016020810190610c02919061209b565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381600087803b158015610c4357600080fd5b505af1158015610c57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7b9190612440565b50848482818110610c8e57610c8e61274f565b9050602002016020810190610ca3919061209b565b6001600160a01b038881166000818152600a602090815260408083208c84528252808320898452825280832080546001600160a01b03191696909516959095179093559081526009825282812089825282528281208682529091522043905582610d0c816126de565b935050600101610bc4565b50610d2486868386611846565b505050505050565b6000816001600160a01b0316610d4a6000546001600160a01b031690565b6001600160a01b031614806106b157506106b1600183611821565b610d6d611993565b610d78600182611821565b15610dc05760405133906001600160a01b038316907f7c0c3c84c67c85fcac635147348bfe374c24a1a93d0366d1cfe9d8853cbf89d590600090a3610dbe6001826119ed565b505b50565b6001600160a01b0384166000908152600c6020908152604080832086845290915290205460ff1615610e2e5760405162461bcd60e51b815260206004820152601460248201527314d85b19481a185cc81b9bdd081cdd185c9d195960621b604482015260640161086f565b60008161ffff1611610e7d5760405162461bcd60e51b8152602060048201526018602482015277125b9d985b1a5908185b5bdd5b9d081c995c5d595cdd195960421b604482015260640161086f565b6001600160a01b038416600081815260046020908152604080832087845282528083205493835260068252808320878452909152902054610ec39061ffff841690612611565b1115610f065760405162461bcd60e51b8152602060048201526012602482015271151bdbc81b585b9e481c995c5d595cdd195960721b604482015260640161086f565b6001600160a01b0384166000908152600560209081526040808320868452909152902054610f389061ffff8316611a02565b341015610f7d5760405162461bcd60e51b8152602060048201526013602482015272139bdd08195b9bdd59da08115512081cd95b9d606a1b604482015260640161086f565b60405163e00aab4b60e01b81526001600160a01b03838116600483015261ffff831660248301526000919086169063e00aab4b90604401600060405180830381600087803b158015610fce57600080fd5b505af1158015610fe2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261100a9190810190612369565b6001600160a01b03861660009081526006602090815260408083208884529091528120549192505b8361ffff168110156110b1576001600160a01b038781166000818152600a602090815260408083208b84528252808320878452825280832080546001600160a01b031916958b169590951790945591815260098252828120898252825282812085825290915220439055816110a6816126de565b925050600101611032565b50610d248686846000815181106110ca576110ca61274f565b60200260200101518661ffff16611846565b336110ef6000546001600160a01b031690565b6001600160a01b0316148061110a575061110a600133611821565b6111265760405162461bcd60e51b815260040161086f9061259c565b60008211801561114e57506001600160a01b0383166000908152600b60205260409020548211155b61118b5760405162461bcd60e51b815260206004820152600e60248201526d496e76616c69642073657269657360901b604482015260640161086f565b6001600160a01b0390921660009081526005602090815260408083209383529290522055565b60606111bd6001611a0e565b67ffffffffffffffff8111156111d5576111d5612765565b6040519080825280602002602001820160405280156111fe578160200160208202803683370190505b50905060005b61120e6001611a0e565b81101561125c57611220600182611a18565b8282815181106112325761123261274f565b6001600160a01b039092166020928302919091019091015280611254816126de565b915050611204565b5090565b336112736000546001600160a01b031690565b6001600160a01b0316148061128e575061128e600133611821565b6112aa5760405162461bcd60e51b815260040161086f9061259c565b6000831180156112d257506001600160a01b0384166000908152600b60205260409020548311155b61130f5760405162461bcd60e51b815260206004820152600e60248201526d496e76616c69642073657269657360901b604482015260640161086f565b6001600160a01b0384166000908152600360209081526040808320868452909152902061133d908383611f3c565b5050505050565b61134c611993565b611357600182611821565b610dc05760405133906001600160a01b038316907f7e1a1a08d52e4ba0e21554733d66165fd5151f99460116223d9e3a608eec5cb190600090a3610dbe600182611a24565b6113a4611993565b6113ae6000611a39565b565b336113c36000546001600160a01b031690565b6001600160a01b031614806113de57506113de600133611821565b6113fa5760405162461bcd60e51b815260040161086f9061259c565b6001600160a01b03831660009081526008602090815260408083208584528252808320848452909152812061142e91611fbc565b505050565b336114466000546001600160a01b031690565b6001600160a01b031614806114615750611461600133611821565b61147d5760405162461bcd60e51b815260040161086f9061259c565b60405133904780156108fc02916000818181858888f193505050506113ae57600080fd5b6001600160a01b03831660009081526006602090815260408083208584529091528120548211156115085760405162461bcd60e51b8152602060048201526011602482015270151bdad95b881b9bdb995e1a5cdd195b9d607a1b604482015260640161086f565b506001600160a01b03831660008181526009602090815260408083208684528252808320858452825280832054938352600a82528083209583529481528482208483528152908490205484516bffffffffffffffffffffffff19606097881b8116828501526034820194909452951b9091166054850152606880850192909252825180850390920182526088909301909152805191012090565b336115b56000546001600160a01b031690565b6001600160a01b031614806115d057506115d0600133611821565b6115ec5760405162461bcd60e51b815260040161086f9061259c565b6001600160a01b03929092166000908152600c6020908152604080832093835292905220805460ff1916911515919091179055565b6003602090815260009283526040808420909152908252902080546106e1906126a3565b60606000806116548585611a89565b6001600160a01b03871660009081526003602090815260408083208584529091529020919350915061168f61168a836001612611565b611c95565b6040516020016116a0929190612475565b6040516020818303038152906040529250505092915050565b336116cc6000546001600160a01b031690565b6001600160a01b031614806116e757506116e7600133611821565b6117035760405162461bcd60e51b815260040161086f9061259c565b6001600160a01b038416600090815260086020908152604080832086845282528083208584528252909120825161133d92840190611ff6565b611744611993565b6001600160a01b0381166117a95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161086f565b610dc081611a39565b600760205282600052604060002060205281600052604060002081815481106117da57600080fd5b6000918252602090912060029091020180546001909101549093509150839050565b60006001600160e01b03198216637005caad60e01b14806106b157506106b182611d9b565b6001600160a01b038116600090815260018301602052604081205415155b9392505050565b6001600160a01b0384166000908152600760209081526040808320868452909152902080546118ac576040805180820190915283815260208082018481528354600181810186556000868152939093209351600290910290930192835551910155611954565b805460009082906118bf9060019061265c565b815481106118cf576118cf61274f565b9060005260206000209060020201905083816001015482600001546118f49190612611565b1415611919578281600101600082825461190e9190612611565b909155506119529050565b60408051808201909152848152602080820185815284546001818101875560008781529390932093516002909102909301928355519101555b505b6001600160a01b038516600090815260066020908152604080832087845290915281208054849290611987908490612611565b90915550505050505050565b6000546001600160a01b031633146113ae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161086f565b600061183f836001600160a01b038416611dd0565b600061183f828461263d565b60006106b1825490565b600061183f8383611ec3565b600061183f836001600160a01b038416611eed565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0382166000908152600b60205260408120548190611ae05760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b604482015260640161086f565b60015b6001600160a01b0385166000908152600b60205260409020548111611c55576001600160a01b0385166000908152600760209081526040808320848452825280832080548251818502810185019093528083529192909190849084015b82821015611b8657838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190611b40565b505050509050600080600090505b8251811015611c3f576000838281518110611bb157611bb161274f565b602002602001015190508060000151881015611bcd5750611c3f565b80518810801590611bed575060208101518151611bea9190612611565b88105b15611c1a57805185908490611c02908b61265c565b611c0c9190612611565b965096505050505050611c8e565b6020810151611c299084612611565b9250508080611c37906126de565b915050611b94565b5050508080611c4d906126de565b915050611ae3565b5060405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b604482015260640161086f565b9250929050565b606081611cb95750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611ce35780611ccd816126de565b9150611cdc9050600a83612629565b9150611cbd565b60008167ffffffffffffffff811115611cfe57611cfe612765565b6040519080825280601f01601f191660200182016040528015611d28576020820181803683370190505b5090505b8415611d9357611d3d60018361265c565b9150611d4a600a866126f9565b611d55906030612611565b60f81b818381518110611d6a57611d6a61274f565b60200101906001600160f81b031916908160001a905350611d8c600a86612629565b9450611d2c565b949350505050565b60006001600160e01b03198216632a9f3abf60e11b14806106b157506301ffc9a760e01b6001600160e01b03198316146106b1565b60008181526001830160205260408120548015611eb9576000611df460018361265c565b8554909150600090611e089060019061265c565b9050818114611e6d576000866000018281548110611e2857611e2861274f565b9060005260206000200154905080876000018481548110611e4b57611e4b61274f565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611e7e57611e7e612739565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506106b1565b60009150506106b1565b6000826000018281548110611eda57611eda61274f565b9060005260206000200154905092915050565b6000818152600183016020526040812054611f34575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556106b1565b5060006106b1565b828054611f48906126a3565b90600052602060002090601f016020900481019282611f6a5760008555611fb0565b82601f10611f835782800160ff19823516178555611fb0565b82800160010185558215611fb0579182015b82811115611fb0578235825591602001919060010190611f95565b5061125c92915061206a565b508054611fc8906126a3565b6000825580601f10611fd8575050565b601f016020900490600052602060002090810190610dc0919061206a565b828054612002906126a3565b90600052602060002090601f0160209004810192826120245760008555611fb0565b82601f1061203d57805160ff1916838001178555611fb0565b82800160010185558215611fb0579182015b82811115611fb057825182559160200191906001019061204f565b5b8082111561125c576000815560010161206b565b80356001600160a01b038116811461209657600080fd5b919050565b6000602082840312156120ad57600080fd5b61183f8261207f565b600080604083850312156120c957600080fd5b6120d28361207f565b946020939093013593505050565b600080600080608085870312156120f657600080fd5b6120ff8561207f565b9350602085013592506121146040860161207f565b9150606085013561ffff8116811461212b57600080fd5b939692955090935050565b6000806000806060858703121561214c57600080fd5b6121558561207f565b935060208501359250604085013567ffffffffffffffff8082111561217957600080fd5b818701915087601f83011261218d57600080fd5b81358181111561219c57600080fd5b8860208260051b85010111156121b157600080fd5b95989497505060200194505050565b6000806000606084860312156121d557600080fd5b6121de8461207f565b925060208401359150604084013580151581146121fa57600080fd5b809150509250925092565b6000806000806060858703121561221b57600080fd5b6122248561207f565b935060208501359250604085013567ffffffffffffffff8082111561224857600080fd5b818701915087601f83011261225c57600080fd5b81358181111561226b57600080fd5b8860208285010111156121b157600080fd5b60008060006060848603121561229257600080fd5b61229b8461207f565b95602085013595506040909401359392505050565b600080600080608085870312156122c657600080fd5b6122cf8561207f565b9350602080860135935060408601359250606086013567ffffffffffffffff808211156122fb57600080fd5b818801915088601f83011261230f57600080fd5b81358181111561232157612321612765565b612333601f8201601f191685016125e0565b9150808252898482850101111561234957600080fd5b808484018584013760008482840101525080935050505092959194509250565b6000602080838503121561237c57600080fd5b825167ffffffffffffffff8082111561239457600080fd5b818501915085601f8301126123a857600080fd5b8151818111156123ba576123ba612765565b8060051b91506123cb8483016125e0565b8181528481019084860184860187018a10156123e657600080fd5b600095505b838610156124095780518352600195909501949186019186016123eb565b5098975050505050505050565b60006020828403121561242857600080fd5b81356001600160e01b03198116811461183f57600080fd5b60006020828403121561245257600080fd5b5051919050565b6000815161246b818560208601612673565b9290920192915050565b600080845481600182811c91508083168061249157607f831692505b60208084108214156124b157634e487b7160e01b86526022600452602486fd5b8180156124c557600181146124d657612503565b60ff19861689528489019650612503565b60008b81526020902060005b868110156124fb5781548b8201529085019083016124e2565b505084890196505b5050505050506125138185612459565b95945050505050565b6020808252825182820181905260009190848201906040850190845b8181101561255d5783516001600160a01b031683529284019291840191600101612538565b50909695505050505050565b6020815260008251806020840152612588816040850160208701612673565b601f01601f19169190910160400192915050565b60208082526024908201527f41646d696e436f6e74726f6c3a204d757374206265206f776e6572206f7220616040820152633236b4b760e11b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561260957612609612765565b604052919050565b600082198211156126245761262461270d565b500190565b60008261263857612638612723565b500490565b60008160001904831182151516156126575761265761270d565b500290565b60008282101561266e5761266e61270d565b500390565b60005b8381101561268e578181015183820152602001612676565b8381111561269d576000848401525b50505050565b600181811c908216806126b757607f821691505b602082108114156126d857634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156126f2576126f261270d565b5060010190565b60008261270857612708612723565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfea26469706673582212205fccbdd0118a73aacc590375d5fdb9fffac03067fdbfb1028e3dbbe475ea7a1864736f6c63430008070033
Deployed Bytecode
0x6080604052600436106101cd5760003560e01c8063654fb5bd116100f7578063b2811b6a11610095578063e9dc637511610064578063e9dc6375146105dc578063f195a539146105fc578063f2fde38b1461061c578063f845ff5e1461063c57600080fd5b8063b2811b6a1461054f578063b7f909941461057c578063dc6778831461059c578063e8e07280146105bc57600080fd5b80637e4e3d6f116100d15780637e4e3d6f146104af57806381a9f7a2146104f2578063853828b6146105125780638da5cb5b1461052757600080fd5b8063654fb5bd1461045a5780636d73e6691461047a578063715018a61461049a57600080fd5b80632d3456701161016f578063346e6c0e1161013e578063346e6c0e146103715780633580e71b146103b45780633c93d771146103ea578063572578c31461042257600080fd5b80632d345670146102fc5780632f6196b71461031c5780633011e16a1461032f57806331ae450b1461034f57600080fd5b80630f3f24e5116101ab5780630f3f24e514610254578063151c6f411461029a57806318826a34146102ba57806324d7806c146102dc57600080fd5b806301ffc9a7146101d257806306f7221b146102075780630ed795e214610234575b600080fd5b3480156101de57600080fd5b506101f26101ed366004612416565b610671565b60405190151581526020015b60405180910390f35b34801561021357600080fd5b5061022761022236600461227d565b6106b7565b6040516101fe9190612569565b34801561024057600080fd5b5061022761024f36600461227d565b610762565b34801561026057600080fd5b5061028c61026f3660046120b6565b600460209081526000928352604080842090915290825290205481565b6040519081526020016101fe565b3480156102a657600080fd5b5061028c6102b5366004612205565b610823565b3480156102c657600080fd5b506102da6102d5366004612136565b61094b565b005b3480156102e857600080fd5b506101f26102f736600461209b565b610d2c565b34801561030857600080fd5b506102da61031736600461209b565b610d65565b6102da61032a3660046120e0565b610dc3565b34801561033b57600080fd5b506102da61034a36600461227d565b6110dc565b34801561035b57600080fd5b506103646111b1565b6040516101fe919061251c565b34801561037d57600080fd5b5061028c61038c3660046120b6565b6001600160a01b03919091166000908152600660209081526040808320938352929052205490565b3480156103c057600080fd5b5061028c6103cf36600461209b565b6001600160a01b03166000908152600b602052604090205490565b3480156103f657600080fd5b5061028c6104053660046120b6565b600560209081526000928352604080842090915290825290205481565b34801561042e57600080fd5b5061028c61043d3660046120b6565b600660209081526000928352604080842090915290825290205481565b34801561046657600080fd5b506102da610475366004612205565b611260565b34801561048657600080fd5b506102da61049536600461209b565b611344565b3480156104a657600080fd5b506102da61139c565b3480156104bb57600080fd5b5061028c6104ca3660046120b6565b6001600160a01b03919091166000908152600460209081526040808320938352929052205490565b3480156104fe57600080fd5b506102da61050d36600461227d565b6113b0565b34801561051e57600080fd5b506102da611433565b34801561053357600080fd5b506000546040516001600160a01b0390911681526020016101fe565b34801561055b57600080fd5b5061028c61056a36600461209b565b600b6020526000908152604090205481565b34801561058857600080fd5b5061028c61059736600461227d565b6114a1565b3480156105a857600080fd5b506102da6105b73660046121c0565b6115a2565b3480156105c857600080fd5b506102276105d73660046120b6565b611621565b3480156105e857600080fd5b506102276105f73660046120b6565b611645565b34801561060857600080fd5b506102da6106173660046122b0565b6116b9565b34801561062857600080fd5b506102da61063736600461209b565b61173c565b34801561064857600080fd5b5061065c61065736600461227d565b6117b2565b604080519283526020830191909152016101fe565b60006001600160e01b0319821663e9dc637560e01b14806106a257506001600160e01b03198216633810900560e01b145b806106b157506106b1826117fc565b92915050565b6008602090815260009384526040808520825292845282842090528252902080546106e1906126a3565b80601f016020809104026020016040519081016040528092919081815260200182805461070d906126a3565b801561075a5780601f1061072f5761010080835404028352916020019161075a565b820191906000526020600020905b81548152906001019060200180831161073d57829003601f168201915b505050505081565b6001600160a01b03831660009081526008602090815260408083208584528252808320848452909152902080546060919061079c906126a3565b80601f01602080910402602001604051908101604052809291908181526020018280546107c8906126a3565b80156108155780601f106107ea57610100808354040283529160200191610815565b820191906000526020600020905b8154815290600101906020018083116107f857829003601f168201915b505050505090509392505050565b6000336108386000546001600160a01b031690565b6001600160a01b031614806108535750610853600133611821565b6108785760405162461bcd60e51b815260040161086f9061259c565b60405180910390fd5b6001600160a01b0385166000908152600b602052604081208054600192906108a1908490612611565b90915550506001600160a01b0385166000818152600b60209081526040808320546004835281842081855283528184208990559383526003825280832084845290915290206108f1908585611f3c565b50604080513381526001600160a01b0388166020820152908101829052606081018690527f739bed52023d4028ee60025b96a4024aacf5aff3162e8c9711084c74d6b8c6139060800160405180910390a195945050505050565b3361095e6000546001600160a01b031690565b6001600160a01b031614806109795750610979600133611821565b6109955760405162461bcd60e51b815260040161086f9061259c565b806109dd5760405162461bcd60e51b8152602060048201526018602482015277125b9d985b1a5908185b5bdd5b9d081c995c5d595cdd195960421b604482015260640161086f565b6001600160a01b038416600081815260046020908152604080832087845282528083205493835260068252808320878452909152902054610a1f908390612611565b1115610a625760405162461bcd60e51b8152602060048201526012602482015271151bdbc81b585b9e481c995c5d595cdd195960721b604482015260640161086f565b6001600160a01b038416600081815260066020908152604080832087845290915281205491632928ca5885858481610a9c57610a9c61274f565b9050602002016020810190610ab1919061209b565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381600087803b158015610af257600080fd5b505af1158015610b06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2a9190612440565b905083836000818110610b3f57610b3f61274f565b9050602002016020810190610b54919061209b565b6001600160a01b038781166000818152600a602090815260408083208b84528252808320888452825280832080546001600160a01b03191696909516959095179093559081526009825282812088825282528281208582529091522043905581610bbd816126de565b9250600190505b83811015610d1757866001600160a01b0316632928ca58868684818110610bed57610bed61274f565b9050602002016020810190610c02919061209b565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381600087803b158015610c4357600080fd5b505af1158015610c57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7b9190612440565b50848482818110610c8e57610c8e61274f565b9050602002016020810190610ca3919061209b565b6001600160a01b038881166000818152600a602090815260408083208c84528252808320898452825280832080546001600160a01b03191696909516959095179093559081526009825282812089825282528281208682529091522043905582610d0c816126de565b935050600101610bc4565b50610d2486868386611846565b505050505050565b6000816001600160a01b0316610d4a6000546001600160a01b031690565b6001600160a01b031614806106b157506106b1600183611821565b610d6d611993565b610d78600182611821565b15610dc05760405133906001600160a01b038316907f7c0c3c84c67c85fcac635147348bfe374c24a1a93d0366d1cfe9d8853cbf89d590600090a3610dbe6001826119ed565b505b50565b6001600160a01b0384166000908152600c6020908152604080832086845290915290205460ff1615610e2e5760405162461bcd60e51b815260206004820152601460248201527314d85b19481a185cc81b9bdd081cdd185c9d195960621b604482015260640161086f565b60008161ffff1611610e7d5760405162461bcd60e51b8152602060048201526018602482015277125b9d985b1a5908185b5bdd5b9d081c995c5d595cdd195960421b604482015260640161086f565b6001600160a01b038416600081815260046020908152604080832087845282528083205493835260068252808320878452909152902054610ec39061ffff841690612611565b1115610f065760405162461bcd60e51b8152602060048201526012602482015271151bdbc81b585b9e481c995c5d595cdd195960721b604482015260640161086f565b6001600160a01b0384166000908152600560209081526040808320868452909152902054610f389061ffff8316611a02565b341015610f7d5760405162461bcd60e51b8152602060048201526013602482015272139bdd08195b9bdd59da08115512081cd95b9d606a1b604482015260640161086f565b60405163e00aab4b60e01b81526001600160a01b03838116600483015261ffff831660248301526000919086169063e00aab4b90604401600060405180830381600087803b158015610fce57600080fd5b505af1158015610fe2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261100a9190810190612369565b6001600160a01b03861660009081526006602090815260408083208884529091528120549192505b8361ffff168110156110b1576001600160a01b038781166000818152600a602090815260408083208b84528252808320878452825280832080546001600160a01b031916958b169590951790945591815260098252828120898252825282812085825290915220439055816110a6816126de565b925050600101611032565b50610d248686846000815181106110ca576110ca61274f565b60200260200101518661ffff16611846565b336110ef6000546001600160a01b031690565b6001600160a01b0316148061110a575061110a600133611821565b6111265760405162461bcd60e51b815260040161086f9061259c565b60008211801561114e57506001600160a01b0383166000908152600b60205260409020548211155b61118b5760405162461bcd60e51b815260206004820152600e60248201526d496e76616c69642073657269657360901b604482015260640161086f565b6001600160a01b0390921660009081526005602090815260408083209383529290522055565b60606111bd6001611a0e565b67ffffffffffffffff8111156111d5576111d5612765565b6040519080825280602002602001820160405280156111fe578160200160208202803683370190505b50905060005b61120e6001611a0e565b81101561125c57611220600182611a18565b8282815181106112325761123261274f565b6001600160a01b039092166020928302919091019091015280611254816126de565b915050611204565b5090565b336112736000546001600160a01b031690565b6001600160a01b0316148061128e575061128e600133611821565b6112aa5760405162461bcd60e51b815260040161086f9061259c565b6000831180156112d257506001600160a01b0384166000908152600b60205260409020548311155b61130f5760405162461bcd60e51b815260206004820152600e60248201526d496e76616c69642073657269657360901b604482015260640161086f565b6001600160a01b0384166000908152600360209081526040808320868452909152902061133d908383611f3c565b5050505050565b61134c611993565b611357600182611821565b610dc05760405133906001600160a01b038316907f7e1a1a08d52e4ba0e21554733d66165fd5151f99460116223d9e3a608eec5cb190600090a3610dbe600182611a24565b6113a4611993565b6113ae6000611a39565b565b336113c36000546001600160a01b031690565b6001600160a01b031614806113de57506113de600133611821565b6113fa5760405162461bcd60e51b815260040161086f9061259c565b6001600160a01b03831660009081526008602090815260408083208584528252808320848452909152812061142e91611fbc565b505050565b336114466000546001600160a01b031690565b6001600160a01b031614806114615750611461600133611821565b61147d5760405162461bcd60e51b815260040161086f9061259c565b60405133904780156108fc02916000818181858888f193505050506113ae57600080fd5b6001600160a01b03831660009081526006602090815260408083208584529091528120548211156115085760405162461bcd60e51b8152602060048201526011602482015270151bdad95b881b9bdb995e1a5cdd195b9d607a1b604482015260640161086f565b506001600160a01b03831660008181526009602090815260408083208684528252808320858452825280832054938352600a82528083209583529481528482208483528152908490205484516bffffffffffffffffffffffff19606097881b8116828501526034820194909452951b9091166054850152606880850192909252825180850390920182526088909301909152805191012090565b336115b56000546001600160a01b031690565b6001600160a01b031614806115d057506115d0600133611821565b6115ec5760405162461bcd60e51b815260040161086f9061259c565b6001600160a01b03929092166000908152600c6020908152604080832093835292905220805460ff1916911515919091179055565b6003602090815260009283526040808420909152908252902080546106e1906126a3565b60606000806116548585611a89565b6001600160a01b03871660009081526003602090815260408083208584529091529020919350915061168f61168a836001612611565b611c95565b6040516020016116a0929190612475565b6040516020818303038152906040529250505092915050565b336116cc6000546001600160a01b031690565b6001600160a01b031614806116e757506116e7600133611821565b6117035760405162461bcd60e51b815260040161086f9061259c565b6001600160a01b038416600090815260086020908152604080832086845282528083208584528252909120825161133d92840190611ff6565b611744611993565b6001600160a01b0381166117a95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161086f565b610dc081611a39565b600760205282600052604060002060205281600052604060002081815481106117da57600080fd5b6000918252602090912060029091020180546001909101549093509150839050565b60006001600160e01b03198216637005caad60e01b14806106b157506106b182611d9b565b6001600160a01b038116600090815260018301602052604081205415155b9392505050565b6001600160a01b0384166000908152600760209081526040808320868452909152902080546118ac576040805180820190915283815260208082018481528354600181810186556000868152939093209351600290910290930192835551910155611954565b805460009082906118bf9060019061265c565b815481106118cf576118cf61274f565b9060005260206000209060020201905083816001015482600001546118f49190612611565b1415611919578281600101600082825461190e9190612611565b909155506119529050565b60408051808201909152848152602080820185815284546001818101875560008781529390932093516002909102909301928355519101555b505b6001600160a01b038516600090815260066020908152604080832087845290915281208054849290611987908490612611565b90915550505050505050565b6000546001600160a01b031633146113ae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161086f565b600061183f836001600160a01b038416611dd0565b600061183f828461263d565b60006106b1825490565b600061183f8383611ec3565b600061183f836001600160a01b038416611eed565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0382166000908152600b60205260408120548190611ae05760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b604482015260640161086f565b60015b6001600160a01b0385166000908152600b60205260409020548111611c55576001600160a01b0385166000908152600760209081526040808320848452825280832080548251818502810185019093528083529192909190849084015b82821015611b8657838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190611b40565b505050509050600080600090505b8251811015611c3f576000838281518110611bb157611bb161274f565b602002602001015190508060000151881015611bcd5750611c3f565b80518810801590611bed575060208101518151611bea9190612611565b88105b15611c1a57805185908490611c02908b61265c565b611c0c9190612611565b965096505050505050611c8e565b6020810151611c299084612611565b9250508080611c37906126de565b915050611b94565b5050508080611c4d906126de565b915050611ae3565b5060405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b604482015260640161086f565b9250929050565b606081611cb95750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611ce35780611ccd816126de565b9150611cdc9050600a83612629565b9150611cbd565b60008167ffffffffffffffff811115611cfe57611cfe612765565b6040519080825280601f01601f191660200182016040528015611d28576020820181803683370190505b5090505b8415611d9357611d3d60018361265c565b9150611d4a600a866126f9565b611d55906030612611565b60f81b818381518110611d6a57611d6a61274f565b60200101906001600160f81b031916908160001a905350611d8c600a86612629565b9450611d2c565b949350505050565b60006001600160e01b03198216632a9f3abf60e11b14806106b157506301ffc9a760e01b6001600160e01b03198316146106b1565b60008181526001830160205260408120548015611eb9576000611df460018361265c565b8554909150600090611e089060019061265c565b9050818114611e6d576000866000018281548110611e2857611e2861274f565b9060005260206000200154905080876000018481548110611e4b57611e4b61274f565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611e7e57611e7e612739565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506106b1565b60009150506106b1565b6000826000018281548110611eda57611eda61274f565b9060005260206000200154905092915050565b6000818152600183016020526040812054611f34575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556106b1565b5060006106b1565b828054611f48906126a3565b90600052602060002090601f016020900481019282611f6a5760008555611fb0565b82601f10611f835782800160ff19823516178555611fb0565b82800160010185558215611fb0579182015b82811115611fb0578235825591602001919060010190611f95565b5061125c92915061206a565b508054611fc8906126a3565b6000825580601f10611fd8575050565b601f016020900490600052602060002090810190610dc0919061206a565b828054612002906126a3565b90600052602060002090601f0160209004810192826120245760008555611fb0565b82601f1061203d57805160ff1916838001178555611fb0565b82800160010185558215611fb0579182015b82811115611fb057825182559160200191906001019061204f565b5b8082111561125c576000815560010161206b565b80356001600160a01b038116811461209657600080fd5b919050565b6000602082840312156120ad57600080fd5b61183f8261207f565b600080604083850312156120c957600080fd5b6120d28361207f565b946020939093013593505050565b600080600080608085870312156120f657600080fd5b6120ff8561207f565b9350602085013592506121146040860161207f565b9150606085013561ffff8116811461212b57600080fd5b939692955090935050565b6000806000806060858703121561214c57600080fd5b6121558561207f565b935060208501359250604085013567ffffffffffffffff8082111561217957600080fd5b818701915087601f83011261218d57600080fd5b81358181111561219c57600080fd5b8860208260051b85010111156121b157600080fd5b95989497505060200194505050565b6000806000606084860312156121d557600080fd5b6121de8461207f565b925060208401359150604084013580151581146121fa57600080fd5b809150509250925092565b6000806000806060858703121561221b57600080fd5b6122248561207f565b935060208501359250604085013567ffffffffffffffff8082111561224857600080fd5b818701915087601f83011261225c57600080fd5b81358181111561226b57600080fd5b8860208285010111156121b157600080fd5b60008060006060848603121561229257600080fd5b61229b8461207f565b95602085013595506040909401359392505050565b600080600080608085870312156122c657600080fd5b6122cf8561207f565b9350602080860135935060408601359250606086013567ffffffffffffffff808211156122fb57600080fd5b818801915088601f83011261230f57600080fd5b81358181111561232157612321612765565b612333601f8201601f191685016125e0565b9150808252898482850101111561234957600080fd5b808484018584013760008482840101525080935050505092959194509250565b6000602080838503121561237c57600080fd5b825167ffffffffffffffff8082111561239457600080fd5b818501915085601f8301126123a857600080fd5b8151818111156123ba576123ba612765565b8060051b91506123cb8483016125e0565b8181528481019084860184860187018a10156123e657600080fd5b600095505b838610156124095780518352600195909501949186019186016123eb565b5098975050505050505050565b60006020828403121561242857600080fd5b81356001600160e01b03198116811461183f57600080fd5b60006020828403121561245257600080fd5b5051919050565b6000815161246b818560208601612673565b9290920192915050565b600080845481600182811c91508083168061249157607f831692505b60208084108214156124b157634e487b7160e01b86526022600452602486fd5b8180156124c557600181146124d657612503565b60ff19861689528489019650612503565b60008b81526020902060005b868110156124fb5781548b8201529085019083016124e2565b505084890196505b5050505050506125138185612459565b95945050505050565b6020808252825182820181905260009190848201906040850190845b8181101561255d5783516001600160a01b031683529284019291840191600101612538565b50909695505050505050565b6020815260008251806020840152612588816040850160208701612673565b601f01601f19169190910160400192915050565b60208082526024908201527f41646d696e436f6e74726f6c3a204d757374206265206f776e6572206f7220616040820152633236b4b760e11b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561260957612609612765565b604052919050565b600082198211156126245761262461270d565b500190565b60008261263857612638612723565b500490565b60008160001904831182151516156126575761265761270d565b500290565b60008282101561266e5761266e61270d565b500390565b60005b8381101561268e578181015183820152602001612676565b8381111561269d576000848401525b50505050565b600181811c908216806126b757607f821691505b602082108114156126d857634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156126f2576126f261270d565b5060010190565b60008261270857612708612723565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfea26469706673582212205fccbdd0118a73aacc590375d5fdb9fffac03067fdbfb1028e3dbbe475ea7a1864736f6c63430008070033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.