ETH Price: $4,482.89 (-5.14%)

Contract

0x7946a4bC596E0172C4f7FcC5A1da3A019EF85eB9
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Mint235276942025-10-07 18:33:3539 mins ago1759862015IN
0x7946a4bC...19EF85eB9
0 ETH0.000354112.1766391
Mint235275812025-10-07 18:10:471 hr ago1759860647IN
0x7946a4bC...19EF85eB9
0 ETH0.000248271.73514724
Mint235275532025-10-07 18:05:111 hr ago1759860311IN
0x7946a4bC...19EF85eB9
0 ETH0.000278611.94713848
Mint235275152025-10-07 17:57:351 hr ago1759859855IN
0x7946a4bC...19EF85eB9
0 ETH0.000301642.10813576
Mint235274612025-10-07 17:46:351 hr ago1759859195IN
0x7946a4bC...19EF85eB9
0 ETH0.000285181.9931055
Mint235272572025-10-07 17:05:472 hrs ago1759856747IN
0x7946a4bC...19EF85eB9
0 ETH0.000634243.21643482
Mint235271912025-10-07 16:52:352 hrs ago1759855955IN
0x7946a4bC...19EF85eB9
0 ETH0.000672343.40964051
Mint235267752025-10-07 15:28:593 hrs ago1759850939IN
0x7946a4bC...19EF85eB9
0 ETH0.000771664.8172303
Mint235266262025-10-07 14:58:354 hrs ago1759849115IN
0x7946a4bC...19EF85eB9
0 ETH0.000614514.10660021
Mint235266232025-10-07 14:57:594 hrs ago1759849079IN
0x7946a4bC...19EF85eB9
0 ETH0.000643564.017584
Mint235265682025-10-07 14:46:594 hrs ago1759848419IN
0x7946a4bC...19EF85eB9
0 ETH0.000497193.47475381
Mint235265412025-10-07 14:41:234 hrs ago1759848083IN
0x7946a4bC...19EF85eB9
0 ETH0.00048943.42031018
Mint235261472025-10-07 13:22:115 hrs ago1759843331IN
0x7946a4bC...19EF85eB9
0 ETH0.000295471.84453574
Mint235261242025-10-07 13:17:355 hrs ago1759843055IN
0x7946a4bC...19EF85eB9
0 ETH0.0002591.81008231
Mint235260462025-10-07 13:01:596 hrs ago1759842119IN
0x7946a4bC...19EF85eB9
0 ETH0.000403112.04432866
Mint235258972025-10-07 12:32:116 hrs ago1759840331IN
0x7946a4bC...19EF85eB9
0 ETH0.000242531.69503298
Mint235258192025-10-07 12:16:356 hrs ago1759839395IN
0x7946a4bC...19EF85eB9
0 ETH0.000174250.88369109
Mint235257142025-10-07 11:55:117 hrs ago1759838111IN
0x7946a4bC...19EF85eB9
0 ETH0.000206931.40191275
Mint235255412025-10-07 11:20:237 hrs ago1759836023IN
0x7946a4bC...19EF85eB9
0 ETH0.000200261.20102995
Mint235250352025-10-07 9:38:479 hrs ago1759829927IN
0x7946a4bC...19EF85eB9
0 ETH0.00016241.13499079
Mint235248442025-10-07 9:00:2310 hrs ago1759827623IN
0x7946a4bC...19EF85eB9
0 ETH0.000168941.18069263
Mint235247112025-10-07 8:33:4710 hrs ago1759826027IN
0x7946a4bC...19EF85eB9
0 ETH0.000197741.2344612
Mint235243592025-10-07 7:23:1111 hrs ago1759821791IN
0x7946a4bC...19EF85eB9
0 ETH0.000033240.23232056
Mint235240762025-10-07 6:26:1112 hrs ago1759818371IN
0x7946a4bC...19EF85eB9
0 ETH0.000160841.12412032
Mint235239622025-10-07 6:02:4713 hrs ago1759816967IN
0x7946a4bC...19EF85eB9
0 ETH0.000164561.11487775
View all transactions

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Method Block
From
To
0x60806040197864642024-05-03 1:59:11522 days ago1714701551  Contract Creation0 ETH
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ManifoldERC721Single

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 1000000 runs

Other Settings:
london EvmVersion
// 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);
}

Settings
{
  "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

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"}]

608060405234801561001057600080fd5b506103ee806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80637cfc3ddf14610030575b600080fd5b61004361003e36600461026e565b610045565b005b6040517f24d7806c000000000000000000000000000000000000000000000000000000008152336004820152859073ffffffffffffffffffffffffffffffffffffffff8216906324d7806c90602401602060405180830381865afa1580156100b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100d5919061030c565b610165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4d757374206265206f776e6572206f722061646d696e206f662063726561746f60448201527f7220636f6e747261637400000000000000000000000000000000000000000000606482015260840160405180910390fd5b6040517f7884af4400000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff881690637884af44906101be90869089908990600401610335565b6020604051808303816000875af11580156101dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610201919061039f565b905085811461023c576040517fb4fa3fb300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461026957600080fd5b919050565b60008060008060006080868803121561028657600080fd5b61028f86610245565b945060208601359350604086013567ffffffffffffffff808211156102b357600080fd5b818801915088601f8301126102c757600080fd5b8135818111156102d657600080fd5b8960208285010111156102e857600080fd5b60208301955080945050505061030060608701610245565b90509295509295909350565b60006020828403121561031e57600080fd5b8151801515811461032e57600080fd5b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b6000602082840312156103b157600080fd5b505191905056fea26469706673582212207bfa2acebc3b1376da8fa26c28f087c5130b30fff124d1730b0bede595be08fd64736f6c63430008110033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061002b5760003560e01c80637cfc3ddf14610030575b600080fd5b61004361003e36600461026e565b610045565b005b6040517f24d7806c000000000000000000000000000000000000000000000000000000008152336004820152859073ffffffffffffffffffffffffffffffffffffffff8216906324d7806c90602401602060405180830381865afa1580156100b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100d5919061030c565b610165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4d757374206265206f776e6572206f722061646d696e206f662063726561746f60448201527f7220636f6e747261637400000000000000000000000000000000000000000000606482015260840160405180910390fd5b6040517f7884af4400000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff881690637884af44906101be90869089908990600401610335565b6020604051808303816000875af11580156101dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610201919061039f565b905085811461023c576040517fb4fa3fb300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461026957600080fd5b919050565b60008060008060006080868803121561028657600080fd5b61028f86610245565b945060208601359350604086013567ffffffffffffffff808211156102b357600080fd5b818801915088601f8301126102c757600080fd5b8135818111156102d657600080fd5b8960208285010111156102e857600080fd5b60208301955080945050505061030060608701610245565b90509295509295909350565b60006020828403121561031e57600080fd5b8151801515811461032e57600080fd5b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b6000602082840312156103b157600080fd5b505191905056fea26469706673582212207bfa2acebc3b1376da8fa26c28f087c5130b30fff124d1730b0bede595be08fd64736f6c63430008110033

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
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.