Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 42 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Create Collectio... | 16823870 | 696 days ago | IN | 0 ETH | 0.00373465 | ||||
Create Collectio... | 16417965 | 753 days ago | IN | 0 ETH | 0.00419017 | ||||
Create Collectio... | 16384091 | 758 days ago | IN | 0 ETH | 0.00433333 | ||||
Create Collectio... | 16382599 | 758 days ago | IN | 0 ETH | 0.00282572 | ||||
Create Collectio... | 16191574 | 785 days ago | IN | 0 ETH | 0.00458383 | ||||
Create Collectio... | 16189650 | 785 days ago | IN | 0 ETH | 0.00283342 | ||||
Create Collectio... | 16184189 | 786 days ago | IN | 0 ETH | 0.00451714 | ||||
Create Collectio... | 16180987 | 786 days ago | IN | 0 ETH | 0.00245807 | ||||
Create Collectio... | 16180981 | 786 days ago | IN | 0 ETH | 0.00228757 | ||||
Create Collectio... | 16179791 | 787 days ago | IN | 0 ETH | 0.00289435 | ||||
Create Collectio... | 16178661 | 787 days ago | IN | 0 ETH | 0.00782186 | ||||
Create Collectio... | 16177714 | 787 days ago | IN | 0 ETH | 0.00375629 | ||||
Create Collectio... | 16177593 | 787 days ago | IN | 0 ETH | 0.00572353 | ||||
Create Collectio... | 16175173 | 787 days ago | IN | 0 ETH | 0.00263067 | ||||
Create Collectio... | 16172394 | 788 days ago | IN | 0 ETH | 0.0027666 | ||||
Create Collectio... | 16172043 | 788 days ago | IN | 0 ETH | 0.00335129 | ||||
Create Collectio... | 16169589 | 788 days ago | IN | 0 ETH | 0.00351249 | ||||
Create Collectio... | 16168187 | 788 days ago | IN | 0 ETH | 0.00261671 | ||||
Create Collectio... | 16167316 | 788 days ago | IN | 0 ETH | 0.00276809 | ||||
Create Collectio... | 16163244 | 789 days ago | IN | 0 ETH | 0.00351196 | ||||
Create Collectio... | 16161096 | 789 days ago | IN | 0 ETH | 0.00294537 | ||||
Create Collectio... | 16158934 | 789 days ago | IN | 0 ETH | 0.00267233 | ||||
Create Collectio... | 16156185 | 790 days ago | IN | 0 ETH | 0.00290751 | ||||
Create Collectio... | 16152463 | 790 days ago | IN | 0 ETH | 0.00289733 | ||||
Create Collectio... | 16152210 | 790 days ago | IN | 0 ETH | 0.00277026 |
Latest 25 internal transactions (View All)
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
ComposableItemFactory
Compiler Version
v0.8.15+commit.e14f2714
Optimization Enabled:
Yes with 10000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0 /// @title The Composable Item Factory /********************************* * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * * ░░░░░░█████████░░█████████░░░ * * ░░░░░░██░░░████░░██░░░████░░░ * * ░░██████░░░████████░░░████░░░ * * ░░██░░██░░░████░░██░░░████░░░ * * ░░██░░██░░░████░░██░░░████░░░ * * ░░░░░░█████████░░█████████░░░ * * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * *********************************/ // LICENSE // ComposableItemFactory.sol is a modified version of Foundation's FNDCollectionFactory.sol: // https://github.com/f8n/fnd-protocol/blob/9dcdd63ebad77bca79f12ee4c791f931cfa8a3c2/contracts/FNDCollectionFactory.sol pragma solidity ^0.8.6; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol"; import "@openzeppelin/contracts/proxy/Clones.sol"; import "@openzeppelin/contracts/utils/Strings.sol"; import { IComposableItemFactory } from './interfaces/IComposableItemFactory.sol'; import { IComposableItemInitializer } from './interfaces/IComposableItemInitializer.sol'; /** * @title A factory to create NFT collections. * @notice Call this factory to create an NFT collection contract managed by a single owner. * @dev This creates and initializes an ERC-1165 minimal proxy pointing to the NFT collection contract template. */ contract ComposableItemFactory is IComposableItemFactory, Ownable { using AddressUpgradeable for address; using AddressUpgradeable for address payable; using Clones for address; using Strings for uint256; /** * @notice The address of the template all new collections will leverage. */ address public implementation; /** * @notice The implementation version new collections will use. * @dev This is auto-incremented each time the implementation is changed. */ uint256 public version; // An address who has permissions to mint Composable Items, passed down during initializer address public minter; /** * @notice Defines requirements for the collection factory at deployment time. * @param _implementation The new collection implementation address. */ constructor(address _implementation, address _minter) { _updateImplementation(_implementation); minter = _minter; } /** * @notice Allows Owner to change the collection implementation used for future collections. * This call will auto-increment the version. * Existing collections are not impacted. * @param _implementation The new collection implementation address. */ function setImplementation(address _implementation) external onlyOwner { _updateImplementation(_implementation); } function setMinter(address _minter) external onlyOwner { minter = _minter; emit MinterUpdated(_minter); } /** * @notice Create a new collection contract. * @dev The nonce is required and must be unique for the msg.sender + implementation version, * otherwise this call will revert. * @param name The name for the new collection being created. * @param symbol The symbol for the new collection being created. * @param nonce An arbitrary value used to allow a creator to mint multiple collections. * @return tokenAddress The address of the new collection contract. */ function createCollection( string calldata name, string calldata symbol, uint256 nonce ) external returns (address tokenAddress) { require(bytes(name).length != 0, "ComposableItemFactory: name is required"); require(bytes(symbol).length != 0, "ComposableItemFactory: symbol is required"); // This reverts if the NFT was previously created using this implementation version + msg.sender + nonce tokenAddress = implementation.cloneDeterministic(_getSalt(_msgSender(), nonce)); IComposableItemInitializer(tokenAddress).initialize(name, symbol, _msgSender(), minter); emit CollectionCreated(tokenAddress, _msgSender(), version, name, symbol, nonce); } /** * @dev Updates the implementation address, increments the version */ function _updateImplementation(address _implementation) private { require(_implementation.isContract(), "ComposableItemFactory: implementation is not a contract"); implementation = _implementation; unchecked { // Version cannot overflow 256 bits. version++; } emit ImplementationUpdated(_implementation, version); } /** * @notice Returns the address of a collection given the current implementation version, creator, and nonce. * This will return the same address whether the collection has already been created or not. * @param creator The creator of the collection. * @param nonce An arbitrary value used to allow a creator to mint multiple collections. * @return collectionAddress The address of the collection contract that would be created by this nonce. */ function predictCollectionAddress(address creator, uint256 nonce) external view returns (address collectionAddress) { collectionAddress = implementation.predictDeterministicAddress(_getSalt(creator, nonce)); } function _getSalt(address creator, uint256 nonce) private pure returns (bytes32) { return keccak256(abi.encodePacked(creator, nonce)); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.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 Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { 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 v4.4.0 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library AddressUpgradeable { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (proxy/Clones.sol) pragma solidity ^0.8.0; /** * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for * deploying minimal proxy contracts, also known as "clones". * * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies * > a minimal bytecode implementation that delegates all calls to a known, fixed address. * * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2` * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the * deterministic method. * * _Available since v3.4._ */ library Clones { /** * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`. * * This function uses the create opcode, which should never revert. */ function clone(address implementation) internal returns (address instance) { assembly { let ptr := mload(0x40) mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000) mstore(add(ptr, 0x14), shl(0x60, implementation)) mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000) instance := create(0, ptr, 0x37) } require(instance != address(0), "ERC1167: create failed"); } /** * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`. * * This function uses the create2 opcode and a `salt` to deterministically deploy * the clone. Using the same `implementation` and `salt` multiple time will revert, since * the clones cannot be deployed twice at the same address. */ function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) { assembly { let ptr := mload(0x40) mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000) mstore(add(ptr, 0x14), shl(0x60, implementation)) mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000) instance := create2(0, ptr, 0x37, salt) } require(instance != address(0), "ERC1167: create2 failed"); } /** * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}. */ function predictDeterministicAddress( address implementation, bytes32 salt, address deployer ) internal pure returns (address predicted) { assembly { let ptr := mload(0x40) mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000) mstore(add(ptr, 0x14), shl(0x60, implementation)) mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000) mstore(add(ptr, 0x38), shl(0x60, deployer)) mstore(add(ptr, 0x4c), salt) mstore(add(ptr, 0x6c), keccak256(ptr, 0x37)) predicted := keccak256(add(ptr, 0x37), 0x55) } } /** * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}. */ function predictDeterministicAddress(address implementation, bytes32 salt) internal view returns (address predicted) { return predictDeterministicAddress(implementation, salt, address(this)); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @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); } }
// SPDX-License-Identifier: GPL-3.0 /// @title Interface for Composable Item Factory /********************************* * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * * ░░░░░░█████████░░█████████░░░ * * ░░░░░░██░░░████░░██░░░████░░░ * * ░░██████░░░████████░░░████░░░ * * ░░██░░██░░░████░░██░░░████░░░ * * ░░██░░██░░░████░░██░░░████░░░ * * ░░░░░░█████████░░█████████░░░ * * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * *********************************/ pragma solidity ^0.8.6; interface IComposableItemFactory { /** * @notice Emitted when a new collection is created from this factory. * @param tokenAddress The address of the new NFT collection contract. * @param creator The address of the creator which owns the new collection. * @param version The implementation version used by the new collection. * @param name The name of the collection contract created. * @param symbol The symbol of the collection contract created. * @param nonce The nonce used by the creator when creating the collection, * used to define the address of the collection. */ event CollectionCreated( address indexed tokenAddress, address indexed creator, uint256 indexed version, string name, string symbol, uint256 nonce ); /** * @notice Emitted when the implementation contract used by new collections is updated. * @param implementation The new implementation contract address. * @param version The version of the new implementation, auto-incremented. */ event ImplementationUpdated(address indexed implementation, uint256 indexed version); event MinterUpdated(address indexed minter); }
// SPDX-License-Identifier: GPL-3.0 /// @title Interface for Composable Item Initializer /********************************* * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * * ░░░░░░█████████░░█████████░░░ * * ░░░░░░██░░░████░░██░░░████░░░ * * ░░██████░░░████████░░░████░░░ * * ░░██░░██░░░████░░██░░░████░░░ * * ░░██░░██░░░████░░██░░░████░░░ * * ░░░░░░█████████░░█████████░░░ * * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * * ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ * *********************************/ pragma solidity ^0.8.6; interface IComposableItemInitializer { function initialize( string memory _name, string memory _symbol, address _creator, address _minter ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (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": 10000 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_implementation","type":"address"},{"internalType":"address","name":"_minter","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"address","name":"creator","type":"address"},{"indexed":true,"internalType":"uint256","name":"version","type":"uint256"},{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"string","name":"symbol","type":"string"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"CollectionCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"},{"indexed":true,"internalType":"uint256","name":"version","type":"uint256"}],"name":"ImplementationUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"minter","type":"address"}],"name":"MinterUpdated","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"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"createCollection","outputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"nonce","type":"uint256"}],"name":"predictCollectionAddress","outputs":[{"internalType":"address","name":"collectionAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_implementation","type":"address"}],"name":"setImplementation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b5060405162000f4538038062000f45833981016040819052610031916101c1565b61003a33610069565b610043826100b9565b600380546001600160a01b0319166001600160a01b0392909216919091179055506101f4565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6100d5816001600160a01b031661019f60201b6107b51760201c565b61014b5760405162461bcd60e51b815260206004820152603760248201527f436f6d706f7361626c654974656d466163746f72793a20696d706c656d656e7460448201527f6174696f6e206973206e6f74206120636f6e7472616374000000000000000000606482015260840160405180910390fd5b600180546001600160a01b0319166001600160a01b038316908117825560028054909201918290556040517f5678af47993f4856157dd819bee3183b87c10ee1b3575a5128fe25896c073a2890600090a350565b3b151590565b80516001600160a01b03811681146101bc57600080fd5b919050565b600080604083850312156101d457600080fd5b6101dd836101a5565b91506101eb602084016101a5565b90509250929050565b610d4180620002046000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c8063715018a611610076578063d784d4261161005b578063d784d42614610192578063f2fde38b146101a5578063fca3b5aa146101b857600080fd5b8063715018a61461016a5780638da5cb5b1461017457600080fd5b80634197ed74116100a75780634197ed741461012057806354fd4d50146101335780635c60da1b1461014a57600080fd5b806307546172146100c35780631b8c9c4b1461010d575b600080fd5b6003546100e39073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100e361011b366004610b2b565b6101cb565b6100e361012e366004610b9e565b610200565b61013c60025481565b604051908152602001610104565b6001546100e39073ffffffffffffffffffffffffffffffffffffffff1681565b61017261047e565b005b60005473ffffffffffffffffffffffffffffffffffffffff166100e3565b6101726101a0366004610c12565b61050b565b6101726101b3366004610c12565b610598565b6101726101c6366004610c12565b6106c5565b60006101f96101da84846107bb565b60015473ffffffffffffffffffffffffffffffffffffffff1690610816565b9392505050565b6000848103610296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f436f6d706f7361626c654974656d466163746f72793a206e616d65206973207260448201527f657175697265640000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000839003610327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f436f6d706f7361626c654974656d466163746f72793a2073796d626f6c20697360448201527f2072657175697265640000000000000000000000000000000000000000000000606482015260840161028d565b61035361033433846107bb565b60015473ffffffffffffffffffffffffffffffffffffffff1690610892565b905073ffffffffffffffffffffffffffffffffffffffff8116638f15b41487878787336003546040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1681526103cd96959493929173ffffffffffffffffffffffffffffffffffffffff1690600401610c76565b600060405180830381600087803b1580156103e757600080fd5b505af11580156103fb573d6000803e3d6000fd5b505050506002546104093390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fd3cbcb86b6ae20e08baf6a5fbaf0c922acff26cdc663bdf06744f5023bbcd254898989898960405161046d959493929190610cd1565b60405180910390a495945050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161028d565b6105096000610970565b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461058c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161028d565b610595816109e5565b50565b60005473ffffffffffffffffffffffffffffffffffffffff163314610619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161028d565b73ffffffffffffffffffffffffffffffffffffffff81166106bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161028d565b61059581610970565b60005473ffffffffffffffffffffffffffffffffffffffff163314610746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161028d565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fad0f299ec81a386c98df0ac27dae11dd020ed1b56963c53a7292e7a3a314539a90600090a250565b3b151590565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084901b166020820152603481018290526000906054016040516020818303038152906040528051906020012090505b92915050565b60006101f98383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff8116610810576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640161028d565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff81163b610a89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f436f6d706f7361626c654974656d466163746f72793a20696d706c656d656e7460448201527f6174696f6e206973206e6f74206120636f6e7472616374000000000000000000606482015260840161028d565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117825560028054909201918290556040517f5678af47993f4856157dd819bee3183b87c10ee1b3575a5128fe25896c073a2890600090a350565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b2657600080fd5b919050565b60008060408385031215610b3e57600080fd5b610b4783610b02565b946020939093013593505050565b60008083601f840112610b6757600080fd5b50813567ffffffffffffffff811115610b7f57600080fd5b602083019150836020828501011115610b9757600080fd5b9250929050565b600080600080600060608688031215610bb657600080fd5b853567ffffffffffffffff80821115610bce57600080fd5b610bda89838a01610b55565b90975095506020880135915080821115610bf357600080fd5b50610c0088828901610b55565b96999598509660400135949350505050565b600060208284031215610c2457600080fd5b6101f982610b02565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b608081526000610c8a60808301888a610c2d565b8281036020840152610c9d818789610c2d565b91505073ffffffffffffffffffffffffffffffffffffffff8085166040840152808416606084015250979650505050505050565b606081526000610ce5606083018789610c2d565b8281036020840152610cf8818688610c2d565b915050826040830152969550505050505056fea26469706673582212203c0ff9ce2e69abe4edc65066f949e2152643ba4e9fb7c492aa487e19ea1f2bee64736f6c634300080f0033000000000000000000000000f155b173fdbacd5b5afd7ba6af03e78bab5c568a0000000000000000000000007779fb5ae7996870701b811322e6b631c3dc5a9b
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100be5760003560e01c8063715018a611610076578063d784d4261161005b578063d784d42614610192578063f2fde38b146101a5578063fca3b5aa146101b857600080fd5b8063715018a61461016a5780638da5cb5b1461017457600080fd5b80634197ed74116100a75780634197ed741461012057806354fd4d50146101335780635c60da1b1461014a57600080fd5b806307546172146100c35780631b8c9c4b1461010d575b600080fd5b6003546100e39073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100e361011b366004610b2b565b6101cb565b6100e361012e366004610b9e565b610200565b61013c60025481565b604051908152602001610104565b6001546100e39073ffffffffffffffffffffffffffffffffffffffff1681565b61017261047e565b005b60005473ffffffffffffffffffffffffffffffffffffffff166100e3565b6101726101a0366004610c12565b61050b565b6101726101b3366004610c12565b610598565b6101726101c6366004610c12565b6106c5565b60006101f96101da84846107bb565b60015473ffffffffffffffffffffffffffffffffffffffff1690610816565b9392505050565b6000848103610296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f436f6d706f7361626c654974656d466163746f72793a206e616d65206973207260448201527f657175697265640000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000839003610327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f436f6d706f7361626c654974656d466163746f72793a2073796d626f6c20697360448201527f2072657175697265640000000000000000000000000000000000000000000000606482015260840161028d565b61035361033433846107bb565b60015473ffffffffffffffffffffffffffffffffffffffff1690610892565b905073ffffffffffffffffffffffffffffffffffffffff8116638f15b41487878787336003546040517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b1681526103cd96959493929173ffffffffffffffffffffffffffffffffffffffff1690600401610c76565b600060405180830381600087803b1580156103e757600080fd5b505af11580156103fb573d6000803e3d6000fd5b505050506002546104093390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fd3cbcb86b6ae20e08baf6a5fbaf0c922acff26cdc663bdf06744f5023bbcd254898989898960405161046d959493929190610cd1565b60405180910390a495945050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161028d565b6105096000610970565b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461058c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161028d565b610595816109e5565b50565b60005473ffffffffffffffffffffffffffffffffffffffff163314610619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161028d565b73ffffffffffffffffffffffffffffffffffffffff81166106bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161028d565b61059581610970565b60005473ffffffffffffffffffffffffffffffffffffffff163314610746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161028d565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fad0f299ec81a386c98df0ac27dae11dd020ed1b56963c53a7292e7a3a314539a90600090a250565b3b151590565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084901b166020820152603481018290526000906054016040516020818303038152906040528051906020012090505b92915050565b60006101f98383306040517f3d602d80600a3d3981f3363d3d373d3d3d363d730000000000000000000000008152606093841b60148201527f5af43d82803e903d91602b57fd5bf3ff000000000000000000000000000000006028820152921b6038830152604c8201526037808220606c830152605591012090565b60006040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528360601b60148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f591505073ffffffffffffffffffffffffffffffffffffffff8116610810576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015260640161028d565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff81163b610a89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f436f6d706f7361626c654974656d466163746f72793a20696d706c656d656e7460448201527f6174696f6e206973206e6f74206120636f6e7472616374000000000000000000606482015260840161028d565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117825560028054909201918290556040517f5678af47993f4856157dd819bee3183b87c10ee1b3575a5128fe25896c073a2890600090a350565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b2657600080fd5b919050565b60008060408385031215610b3e57600080fd5b610b4783610b02565b946020939093013593505050565b60008083601f840112610b6757600080fd5b50813567ffffffffffffffff811115610b7f57600080fd5b602083019150836020828501011115610b9757600080fd5b9250929050565b600080600080600060608688031215610bb657600080fd5b853567ffffffffffffffff80821115610bce57600080fd5b610bda89838a01610b55565b90975095506020880135915080821115610bf357600080fd5b50610c0088828901610b55565b96999598509660400135949350505050565b600060208284031215610c2457600080fd5b6101f982610b02565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b608081526000610c8a60808301888a610c2d565b8281036020840152610c9d818789610c2d565b91505073ffffffffffffffffffffffffffffffffffffffff8085166040840152808416606084015250979650505050505050565b606081526000610ce5606083018789610c2d565b8281036020840152610cf8818688610c2d565b915050826040830152969550505050505056fea26469706673582212203c0ff9ce2e69abe4edc65066f949e2152643ba4e9fb7c492aa487e19ea1f2bee64736f6c634300080f0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000f155b173fdbacd5b5afd7ba6af03e78bab5c568a0000000000000000000000007779fb5ae7996870701b811322e6b631c3dc5a9b
-----Decoded View---------------
Arg [0] : _implementation (address): 0xF155b173FDbaCd5b5afd7BA6Af03E78BAB5c568a
Arg [1] : _minter (address): 0x7779FB5ae7996870701B811322e6b631C3dC5a9b
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000f155b173fdbacd5b5afd7ba6af03e78bab5c568a
Arg [1] : 0000000000000000000000007779fb5ae7996870701b811322e6b631c3dc5a9b
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.