ETH Price: $2,643.08 (-2.69%)

Contract

0x5BD71469a144A6EF5D8b998490e6B58b6761694B
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Create Collectio...168238702023-03-14 4:39:35696 days ago1678768775IN
0x5BD71469...b6761694B
0 ETH0.0037346519.07380751
Create Collectio...164179652023-01-16 7:50:11753 days ago1673855411IN
0x5BD71469...b6761694B
0 ETH0.0041901721.41076225
Create Collectio...163840912023-01-11 14:13:11758 days ago1673446391IN
0x5BD71469...b6761694B
0 ETH0.0043333322.13820322
Create Collectio...163825992023-01-11 9:13:11758 days ago1673428391IN
0x5BD71469...b6761694B
0 ETH0.0028257214.43348166
Create Collectio...161915742022-12-15 17:25:59785 days ago1671125159IN
0x5BD71469...b6761694B
0 ETH0.0045838323.39788137
Create Collectio...161896502022-12-15 10:59:11785 days ago1671101951IN
0x5BD71469...b6761694B
0 ETH0.0028334214.47459027
Create Collectio...161841892022-12-14 16:40:35786 days ago1671036035IN
0x5BD71469...b6761694B
0 ETH0.0045171423.08293206
Create Collectio...161809872022-12-14 5:55:35786 days ago1670997335IN
0x5BD71469...b6761694B
0 ETH0.0024580712.55630988
Create Collectio...161809812022-12-14 5:54:23786 days ago1670997263IN
0x5BD71469...b6761694B
0 ETH0.0022875713.2
Create Collectio...161797912022-12-14 1:56:11787 days ago1670982971IN
0x5BD71469...b6761694B
0 ETH0.0028943514.7831145
Create Collectio...161786612022-12-13 22:08:59787 days ago1670969339IN
0x5BD71469...b6761694B
0 ETH0.0078218639.95066888
Create Collectio...161777142022-12-13 18:58:35787 days ago1670957915IN
0x5BD71469...b6761694B
0 ETH0.0037562919.17848173
Create Collectio...161775932022-12-13 18:34:11787 days ago1670956451IN
0x5BD71469...b6761694B
0 ETH0.0057235329.23692568
Create Collectio...161751732022-12-13 10:25:23787 days ago1670927123IN
0x5BD71469...b6761694B
0 ETH0.0026306713.43389085
Create Collectio...161723942022-12-13 1:06:47788 days ago1670893607IN
0x5BD71469...b6761694B
0 ETH0.002766614.13236243
Create Collectio...161720432022-12-12 23:55:59788 days ago1670889359IN
0x5BD71469...b6761694B
0 ETH0.0033512917.11906233
Create Collectio...161695892022-12-12 15:42:11788 days ago1670859731IN
0x5BD71469...b6761694B
0 ETH0.0035124917.93478075
Create Collectio...161681872022-12-12 10:59:59788 days ago1670842799IN
0x5BD71469...b6761694B
0 ETH0.0026167113.36422126
Create Collectio...161673162022-12-12 8:03:59788 days ago1670832239IN
0x5BD71469...b6761694B
0 ETH0.0027680914.13910983
Create Collectio...161632442022-12-11 18:25:35789 days ago1670783135IN
0x5BD71469...b6761694B
0 ETH0.0035119617.93540355
Create Collectio...161610962022-12-11 11:13:59789 days ago1670757239IN
0x5BD71469...b6761694B
0 ETH0.0029453715.04461231
Create Collectio...161589342022-12-11 3:59:23789 days ago1670731163IN
0x5BD71469...b6761694B
0 ETH0.0026723313.6507768
Create Collectio...161561852022-12-10 18:46:23790 days ago1670697983IN
0x5BD71469...b6761694B
0 ETH0.0029075114.85489065
Create Collectio...161524632022-12-10 6:18:47790 days ago1670653127IN
0x5BD71469...b6761694B
0 ETH0.0028973314.79356921
Create Collectio...161522102022-12-10 5:27:35790 days ago1670650055IN
0x5BD71469...b6761694B
0 ETH0.0027702614.1438996
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
171553772023-04-30 0:43:47650 days ago1682815427
0x5BD71469...b6761694B
 Contract Creation0 ETH
169265442023-03-28 14:52:23682 days ago1680015143
0x5BD71469...b6761694B
 Contract Creation0 ETH
168238702023-03-14 4:39:35696 days ago1678768775
0x5BD71469...b6761694B
 Contract Creation0 ETH
164179652023-01-16 7:50:11753 days ago1673855411
0x5BD71469...b6761694B
 Contract Creation0 ETH
163840912023-01-11 14:13:11758 days ago1673446391
0x5BD71469...b6761694B
 Contract Creation0 ETH
163825992023-01-11 9:13:11758 days ago1673428391
0x5BD71469...b6761694B
 Contract Creation0 ETH
161915742022-12-15 17:25:59785 days ago1671125159
0x5BD71469...b6761694B
 Contract Creation0 ETH
161896502022-12-15 10:59:11785 days ago1671101951
0x5BD71469...b6761694B
 Contract Creation0 ETH
161841892022-12-14 16:40:35786 days ago1671036035
0x5BD71469...b6761694B
 Contract Creation0 ETH
161809872022-12-14 5:55:35786 days ago1670997335
0x5BD71469...b6761694B
 Contract Creation0 ETH
161809812022-12-14 5:54:23786 days ago1670997263
0x5BD71469...b6761694B
 Contract Creation0 ETH
161797912022-12-14 1:56:11787 days ago1670982971
0x5BD71469...b6761694B
 Contract Creation0 ETH
161786612022-12-13 22:08:59787 days ago1670969339
0x5BD71469...b6761694B
 Contract Creation0 ETH
161777142022-12-13 18:58:35787 days ago1670957915
0x5BD71469...b6761694B
 Contract Creation0 ETH
161775932022-12-13 18:34:11787 days ago1670956451
0x5BD71469...b6761694B
 Contract Creation0 ETH
161751732022-12-13 10:25:23787 days ago1670927123
0x5BD71469...b6761694B
 Contract Creation0 ETH
161737412022-12-13 5:37:23787 days ago1670909843
0x5BD71469...b6761694B
 Contract Creation0 ETH
161723942022-12-13 1:06:47788 days ago1670893607
0x5BD71469...b6761694B
 Contract Creation0 ETH
161720432022-12-12 23:55:59788 days ago1670889359
0x5BD71469...b6761694B
 Contract Creation0 ETH
161695892022-12-12 15:42:11788 days ago1670859731
0x5BD71469...b6761694B
 Contract Creation0 ETH
161681872022-12-12 10:59:59788 days ago1670842799
0x5BD71469...b6761694B
 Contract Creation0 ETH
161673162022-12-12 8:03:59788 days ago1670832239
0x5BD71469...b6761694B
 Contract Creation0 ETH
161632442022-12-11 18:25:35789 days ago1670783135
0x5BD71469...b6761694B
 Contract Creation0 ETH
161610962022-12-11 11:13:59789 days ago1670757239
0x5BD71469...b6761694B
 Contract Creation0 ETH
161589342022-12-11 3:59:23789 days ago1670731163
0x5BD71469...b6761694B
 Contract Creation0 ETH
View All Internal Transactions
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
File 1 of 8 : ComposableItemFactory.sol
// 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));
  }
}

File 2 of 8 : Ownable.sol
// 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);
    }
}

File 3 of 8 : AddressUpgradeable.sol
// 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);
            }
        }
    }
}

File 4 of 8 : Clones.sol
// 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));
    }
}

File 5 of 8 : Strings.sol
// 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);
    }
}

File 6 of 8 : IComposableItemFactory.sol
// 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);
}

File 7 of 8 : IComposableItemInitializer.sol
// 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;
}

File 8 of 8 : Context.sol
// 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;
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 10000
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

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

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


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.