ETH Price: $2,522.96 (+1.29%)
Gas: 4.61 Gwei
 

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
Mint225177812025-05-19 15:04:112 hrs ago1747667051IN
0x7946a4bC...19EF85eB9
0 ETH0.000437022.72860791
Mint225177182025-05-19 14:51:232 hrs ago1747666283IN
0x7946a4bC...19EF85eB9
0 ETH0.000341332.13086666
Mint225174222025-05-19 13:51:473 hrs ago1747662707IN
0x7946a4bC...19EF85eB9
0 ETH0.00057993.1606991
Mint225174032025-05-19 13:47:593 hrs ago1747662479IN
0x7946a4bC...19EF85eB9
0 ETH0.000645373.27288877
Mint225172892025-05-19 13:25:113 hrs ago1747661111IN
0x7946a4bC...19EF85eB9
0 ETH0.000277791.94143906
Mint225172172025-05-19 13:10:353 hrs ago1747660235IN
0x7946a4bC...19EF85eB9
0 ETH0.000260711.82207412
Mint225172012025-05-19 13:07:234 hrs ago1747660043IN
0x7946a4bC...19EF85eB9
0 ETH0.000390461.98016298
Mint225170012025-05-19 12:27:234 hrs ago1747657643IN
0x7946a4bC...19EF85eB9
0 ETH0.000264331.84735317
Mint225169602025-05-19 12:19:114 hrs ago1747657151IN
0x7946a4bC...19EF85eB9
0 ETH0.000279911.95624725
Mint225169162025-05-19 12:10:234 hrs ago1747656623IN
0x7946a4bC...19EF85eB9
0 ETH0.000224561.56942731
Mint225167872025-05-19 11:43:595 hrs ago1747655039IN
0x7946a4bC...19EF85eB9
0 ETH0.000268511.65047104
Mint225167102025-05-19 11:28:115 hrs ago1747654091IN
0x7946a4bC...19EF85eB9
0 ETH0.000274911.39418424
Mint225166362025-05-19 11:13:115 hrs ago1747653191IN
0x7946a4bC...19EF85eB9
0 ETH0.000188191.17486697
Mint225165192025-05-19 10:49:236 hrs ago1747651763IN
0x7946a4bC...19EF85eB9
0 ETH0.000183581.28305646
Mint225165122025-05-19 10:47:596 hrs ago1747651679IN
0x7946a4bC...19EF85eB9
0 ETH0.000205011.22211452
Mint225164022025-05-19 10:25:116 hrs ago1747650311IN
0x7946a4bC...19EF85eB9
0 ETH0.000216121.44429839
Mint225161892025-05-19 9:41:597 hrs ago1747647719IN
0x7946a4bC...19EF85eB9
0 ETH0.000184461.28917023
Mint225161082025-05-19 9:25:477 hrs ago1747646747IN
0x7946a4bC...19EF85eB9
0 ETH0.000195651.36740221
Mint225161072025-05-19 9:25:357 hrs ago1747646735IN
0x7946a4bC...19EF85eB9
0 ETH0.000197421.3797683
Mint225160962025-05-19 9:23:237 hrs ago1747646603IN
0x7946a4bC...19EF85eB9
0 ETH0.000191241.3365499
Mint225160842025-05-19 9:20:597 hrs ago1747646459IN
0x7946a4bC...19EF85eB9
0 ETH0.000187561.31086064
Mint225160342025-05-19 9:10:597 hrs ago1747645859IN
0x7946a4bC...19EF85eB9
0 ETH0.000201961.34977821
Mint225160072025-05-19 9:05:358 hrs ago1747645535IN
0x7946a4bC...19EF85eB9
0 ETH0.000195521.36643725
Mint225159812025-05-19 9:00:238 hrs ago1747645223IN
0x7946a4bC...19EF85eB9
0 ETH0.000247121.25324336
Mint225159322025-05-19 8:50:358 hrs ago1747644635IN
0x7946a4bC...19EF85eB9
0 ETH0.000182191.27327852
View all transactions

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Method Block
From
To
0x60806040197864642024-05-03 1:59:11381 days ago1714701551  Contract Creation0 ETH
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 Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.