Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 25 from a total of 14,242 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Mint | 22517781 | 2 hrs ago | IN | 0 ETH | 0.00043702 | ||||
Mint | 22517718 | 2 hrs ago | IN | 0 ETH | 0.00034133 | ||||
Mint | 22517422 | 3 hrs ago | IN | 0 ETH | 0.0005799 | ||||
Mint | 22517403 | 3 hrs ago | IN | 0 ETH | 0.00064537 | ||||
Mint | 22517289 | 3 hrs ago | IN | 0 ETH | 0.00027779 | ||||
Mint | 22517217 | 3 hrs ago | IN | 0 ETH | 0.00026071 | ||||
Mint | 22517201 | 4 hrs ago | IN | 0 ETH | 0.00039046 | ||||
Mint | 22517001 | 4 hrs ago | IN | 0 ETH | 0.00026433 | ||||
Mint | 22516960 | 4 hrs ago | IN | 0 ETH | 0.00027991 | ||||
Mint | 22516916 | 4 hrs ago | IN | 0 ETH | 0.00022456 | ||||
Mint | 22516787 | 5 hrs ago | IN | 0 ETH | 0.00026851 | ||||
Mint | 22516710 | 5 hrs ago | IN | 0 ETH | 0.00027491 | ||||
Mint | 22516636 | 5 hrs ago | IN | 0 ETH | 0.00018819 | ||||
Mint | 22516519 | 6 hrs ago | IN | 0 ETH | 0.00018358 | ||||
Mint | 22516512 | 6 hrs ago | IN | 0 ETH | 0.00020501 | ||||
Mint | 22516402 | 6 hrs ago | IN | 0 ETH | 0.00021612 | ||||
Mint | 22516189 | 7 hrs ago | IN | 0 ETH | 0.00018446 | ||||
Mint | 22516108 | 7 hrs ago | IN | 0 ETH | 0.00019565 | ||||
Mint | 22516107 | 7 hrs ago | IN | 0 ETH | 0.00019742 | ||||
Mint | 22516096 | 7 hrs ago | IN | 0 ETH | 0.00019124 | ||||
Mint | 22516084 | 7 hrs ago | IN | 0 ETH | 0.00018756 | ||||
Mint | 22516034 | 7 hrs ago | IN | 0 ETH | 0.00020196 | ||||
Mint | 22516007 | 8 hrs ago | IN | 0 ETH | 0.00019552 | ||||
Mint | 22515981 | 8 hrs ago | IN | 0 ETH | 0.00024712 | ||||
Mint | 22515932 | 8 hrs ago | IN | 0 ETH | 0.00018219 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Method | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|---|
0x60806040 | 19786464 | 381 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Name:
ManifoldERC721Single
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 1000000 runs
Other Settings:
london EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /// @author: manifold.xyz import "@manifoldxyz/libraries-solidity/contracts/access/IAdminControl.sol"; import "@manifoldxyz/creator-core-solidity/contracts/core/IERC721CreatorCore.sol"; import "./IManifoldERC721Single.sol"; /** * Manifold ERC721 Single Mint Implementation */ contract ManifoldERC721Single is IManifoldERC721Single { /** * @dev Only allows approved admins to call the specified function */ modifier creatorAdminRequired(address creator) { if (!IAdminControl(creator).isAdmin(msg.sender)) revert("Must be owner or admin of creator contract"); _; } /** * @dev See {IManifoldERC721Single-mint}. */ function mint(address creatorCore, uint256 expectedTokenId, string calldata uri, address recipient) external override creatorAdminRequired(creatorCore) { uint256 tokenId = IERC721CreatorCore(creatorCore).mintBase(recipient, uri); if (tokenId != expectedTokenId) { revert InvalidInput(); } } }
// 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 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 mint a token. Can only be called by a registered extension. * Returns tokenId minted */ function mintExtension(address to, uint80 data) 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 batch mint a token. Can only be called by a registered extension. * Returns tokenId minted */ function mintExtensionBatch(address to, uint80[] calldata data) 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; /** * @dev get token data */ function tokenData(uint256 tokenId) external view returns (uint80); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /// @author: manifold.xyz /** * Manifold ERC721 Single Mint interface */ interface IManifoldERC721Single { error InvalidInput(); /** * @dev Mint a token */ function mint(address creatorCore, uint256 expectedTokenId, string calldata uri, address recipient) external; }
// 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 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 ApproveTransferUpdated(address extension); 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); /** * @dev Set the default approve transfer contract location. */ function setApproveTransfer(address extension) external; /** * @dev Get the default approve transfer contract location. */ function getApproveTransfer() external view returns (address); }
{ "remappings": [ "create2-scripts/=lib/create2-helpers/script/", "create2-helpers/=lib/create2-helpers/src/", "forge-std/=lib/forge-std/src/", "@ensdomains/=node_modules/@ensdomains/", "@manifoldxyz/=node_modules/@manifoldxyz/", "@openzeppelin/=node_modules/@openzeppelin/", "ds-test/=lib/forge-std/lib/ds-test/src/", "erc4626-tests/=lib/operator-filter-registry/lib/openzeppelin-contracts/lib/erc4626-tests/", "eth-gas-reporter/=node_modules/eth-gas-reporter/", "hardhat/=node_modules/hardhat/", "murky/=lib/murky/src/", "openzeppelin-contracts-upgradeable/=lib/operator-filter-registry/lib/openzeppelin-contracts-upgradeable/", "openzeppelin-contracts/=lib/murky/lib/openzeppelin-contracts/", "operator-filter-registry/=node_modules/operator-filter-registry/", "truffle/=node_modules/truffle/" ], "optimizer": { "enabled": true, "runs": 1000000 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs" }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "london", "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"name":"InvalidInput","type":"error"},{"inputs":[{"internalType":"address","name":"creatorCore","type":"address"},{"internalType":"uint256","name":"expectedTokenId","type":"uint256"},{"internalType":"string","name":"uri","type":"string"},{"internalType":"address","name":"recipient","type":"address"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b506103ee806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80637cfc3ddf14610030575b600080fd5b61004361003e36600461026e565b610045565b005b6040517f24d7806c000000000000000000000000000000000000000000000000000000008152336004820152859073ffffffffffffffffffffffffffffffffffffffff8216906324d7806c90602401602060405180830381865afa1580156100b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100d5919061030c565b610165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4d757374206265206f776e6572206f722061646d696e206f662063726561746f60448201527f7220636f6e747261637400000000000000000000000000000000000000000000606482015260840160405180910390fd5b6040517f7884af4400000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff881690637884af44906101be90869089908990600401610335565b6020604051808303816000875af11580156101dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610201919061039f565b905085811461023c576040517fb4fa3fb300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461026957600080fd5b919050565b60008060008060006080868803121561028657600080fd5b61028f86610245565b945060208601359350604086013567ffffffffffffffff808211156102b357600080fd5b818801915088601f8301126102c757600080fd5b8135818111156102d657600080fd5b8960208285010111156102e857600080fd5b60208301955080945050505061030060608701610245565b90509295509295909350565b60006020828403121561031e57600080fd5b8151801515811461032e57600080fd5b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b6000602082840312156103b157600080fd5b505191905056fea26469706673582212207bfa2acebc3b1376da8fa26c28f087c5130b30fff124d1730b0bede595be08fd64736f6c63430008110033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061002b5760003560e01c80637cfc3ddf14610030575b600080fd5b61004361003e36600461026e565b610045565b005b6040517f24d7806c000000000000000000000000000000000000000000000000000000008152336004820152859073ffffffffffffffffffffffffffffffffffffffff8216906324d7806c90602401602060405180830381865afa1580156100b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100d5919061030c565b610165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4d757374206265206f776e6572206f722061646d696e206f662063726561746f60448201527f7220636f6e747261637400000000000000000000000000000000000000000000606482015260840160405180910390fd5b6040517f7884af4400000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff881690637884af44906101be90869089908990600401610335565b6020604051808303816000875af11580156101dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610201919061039f565b905085811461023c576040517fb4fa3fb300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461026957600080fd5b919050565b60008060008060006080868803121561028657600080fd5b61028f86610245565b945060208601359350604086013567ffffffffffffffff808211156102b357600080fd5b818801915088601f8301126102c757600080fd5b8135818111156102d657600080fd5b8960208285010111156102e857600080fd5b60208301955080945050505061030060608701610245565b90509295509295909350565b60006020828403121561031e57600080fd5b8151801515811461032e57600080fd5b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b6000602082840312156103b157600080fd5b505191905056fea26469706673582212207bfa2acebc3b1376da8fa26c28f087c5130b30fff124d1730b0bede595be08fd64736f6c63430008110033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.