ETH Price: $2,044.36 (-5.06%)

Contract

0xAEEF7eB68dF82508A46F0F7cbD07daa758ED4491
 

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

There are no matching entries

10 Internal Transactions found.

Latest 10 internal transactions

Advanced mode:
Parent Transaction Hash Method Block
From
To
0x3d602d80237144962025-11-02 22:02:59139 days ago1762120979
0xAEEF7eB6...758ED4491
 Contract Creation0 ETH
0x3d602d80236994912025-10-31 19:42:47142 days ago1761939767
0xAEEF7eB6...758ED4491
 Contract Creation0 ETH
0x3d602d80236994592025-10-31 19:35:59142 days ago1761939359
0xAEEF7eB6...758ED4491
 Contract Creation0 ETH
0x3d602d80236991222025-10-31 18:27:59142 days ago1761935279
0xAEEF7eB6...758ED4491
 Contract Creation0 ETH
0x3d602d80236844412025-10-29 17:08:11144 days ago1761757691
0xAEEF7eB6...758ED4491
 Contract Creation0 ETH
0x3d602d80236844232025-10-29 17:04:35144 days ago1761757475
0xAEEF7eB6...758ED4491
 Contract Creation0 ETH
0x3d602d80236818142025-10-29 8:18:35144 days ago1761725915
0xAEEF7eB6...758ED4491
 Contract Creation0 ETH
0x3d602d80236689292025-10-27 12:58:35146 days ago1761569915
0xAEEF7eB6...758ED4491
 Contract Creation0 ETH
0x3d602d80236686732025-10-27 12:06:59146 days ago1761566819
0xAEEF7eB6...758ED4491
 Contract Creation0 ETH
0x3d602d80236686352025-10-27 11:59:23146 days ago1761566363
0xAEEF7eB6...758ED4491
 Contract Creation0 ETH
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

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

Contract Source Code Verified (Exact Match)

Contract Name:
EtfTokenDeployer

Compiler Version
v0.8.30+commit.73712a01

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
// SPDX-License-Identifier: MIT
pragma solidity 0.8.30;

import "@openzeppelin/contracts/proxy/Clones.sol";

import "hopium/common/interface/imDirectory.sol";
import "hopium/etf/interface/iEtfToken.sol";

abstract contract Helpers is ImDirectory {
   
    function _randomSalt() internal view returns (bytes32) {
        return keccak256(
            abi.encodePacked(
                block.timestamp,
                block.prevrandao, // replaces block.difficulty since 0.8.18
                msg.sender,
                gasleft()
            )
        );
    }

    error ImplNotSet();
    function _getTokenImplAddress() internal view returns (address tokenImpl) {
        tokenImpl = fetchFromDirectory("etf-token-impl");
        if (tokenImpl == address(0)) revert ImplNotSet();
    }
}

/// @notice Factory that mints minimal-proxy clones of EtfToken (EIP-1167)
contract EtfTokenDeployer is ImDirectory, Helpers {
    using Clones for address;

    constructor(address _directory) ImDirectory(_directory) {}

    /// @notice Deploy a new ETF token clone with per-clone name/symbol
    function deployEtfToken(uint256 etfId, string calldata name, string calldata symbol) external returns (address proxy) {
        // Create deterministic clone (CREATE2). Reverts if already deployed for same salt.
        proxy = Clones.cloneDeterministic(_getTokenImplAddress(), _randomSalt());

        // Initialize with per-clone params
        IEtfToken(proxy).initialize(etfId, name, symbol, address(Directory));
    }

}

// SPDX-License-Identifier: MIT
pragma solidity 0.8.30;

interface IEtfToken {
   function initialize(uint256 etfId_, string memory name_, string memory symbol_, address directory_) external;
   function mint(address to, uint256 amount) external;
   function burn(address from, uint256 amount) external;
}

// SPDX-License-Identifier: MIT
pragma solidity 0.8.30;

/// @notice Interface used by the registry to talk to the external directory.
interface IDirectory {
    function owner() external view returns (address);
    function fetchFromDirectory(string memory _key) external view returns (address);
}

abstract contract ImDirectory {
    IDirectory public Directory;

    constructor(address _directory) {
        _setDirectory(_directory); // no modifier here
    }

    function changeDirectoryAddress(address _directory) external onlyOwner {
        _setDirectory(_directory);
    }

    function _setDirectory(address _directory) internal {
        require(_directory != address(0), "Directory cannot be zero address");
        require(_directory.code.length > 0, "Directory must be a contract");

        // Sanity check the interface
        try IDirectory(_directory).owner() returns (address) {
            Directory = IDirectory(_directory);
        } catch {
            revert("Directory address does not implement owner()");
        }
    }

    modifier onlyOwner() {
        require(msg.sender == Directory.owner(), "Caller is not the owner");
        _;
    }

    function owner() public view returns (address) {
        return Directory.owner();
    }

    function fetchFromDirectory(string memory _key) public view returns (address) {
        return Directory.fetchFromDirectory(_key);
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.4.0) (proxy/Clones.sol)

pragma solidity ^0.8.20;

import {Create2} from "../utils/Create2.sol";
import {Errors} from "../utils/Errors.sol";

/**
 * @dev https://eips.ethereum.org/EIPS/eip-1167[ERC-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.
 */
library Clones {
    error CloneArgumentsTooLong();

    /**
     * @dev Deploys and returns the address of a clone that mimics the behavior of `implementation`.
     *
     * This function uses the create opcode, which should never revert.
     *
     * WARNING: This function does not check if `implementation` has code. A clone that points to an address
     * without code cannot be initialized. Initialization calls may appear to be successful when, in reality, they
     * have no effect and leave the clone uninitialized, allowing a third party to initialize it later.
     */
    function clone(address implementation) internal returns (address instance) {
        return clone(implementation, 0);
    }

    /**
     * @dev Same as {xref-Clones-clone-address-}[clone], but with a `value` parameter to send native currency
     * to the new contract.
     *
     * WARNING: This function does not check if `implementation` has code. A clone that points to an address
     * without code cannot be initialized. Initialization calls may appear to be successful when, in reality, they
     * have no effect and leave the clone uninitialized, allowing a third party to initialize it later.
     *
     * NOTE: Using a non-zero value at creation will require the contract using this function (e.g. a factory)
     * to always have enough balance for new deployments. Consider exposing this function under a payable method.
     */
    function clone(address implementation, uint256 value) internal returns (address instance) {
        if (address(this).balance < value) {
            revert Errors.InsufficientBalance(address(this).balance, value);
        }
        assembly ("memory-safe") {
            // Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes
            // of the `implementation` address with the bytecode before the address.
            mstore(0x00, or(shr(0xe8, shl(0x60, implementation)), 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000))
            // Packs the remaining 17 bytes of `implementation` with the bytecode after the address.
            mstore(0x20, or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3))
            instance := create(value, 0x09, 0x37)
        }
        if (instance == address(0)) {
            revert Errors.FailedDeployment();
        }
    }

    /**
     * @dev Deploys and returns the address of a clone that mimics the behavior of `implementation`.
     *
     * This function uses the create2 opcode and a `salt` to deterministically deploy
     * the clone. Using the same `implementation` and `salt` multiple times will revert, since
     * the clones cannot be deployed twice at the same address.
     *
     * WARNING: This function does not check if `implementation` has code. A clone that points to an address
     * without code cannot be initialized. Initialization calls may appear to be successful when, in reality, they
     * have no effect and leave the clone uninitialized, allowing a third party to initialize it later.
     */
    function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {
        return cloneDeterministic(implementation, salt, 0);
    }

    /**
     * @dev Same as {xref-Clones-cloneDeterministic-address-bytes32-}[cloneDeterministic], but with
     * a `value` parameter to send native currency to the new contract.
     *
     * WARNING: This function does not check if `implementation` has code. A clone that points to an address
     * without code cannot be initialized. Initialization calls may appear to be successful when, in reality, they
     * have no effect and leave the clone uninitialized, allowing a third party to initialize it later.
     *
     * NOTE: Using a non-zero value at creation will require the contract using this function (e.g. a factory)
     * to always have enough balance for new deployments. Consider exposing this function under a payable method.
     */
    function cloneDeterministic(
        address implementation,
        bytes32 salt,
        uint256 value
    ) internal returns (address instance) {
        if (address(this).balance < value) {
            revert Errors.InsufficientBalance(address(this).balance, value);
        }
        assembly ("memory-safe") {
            // Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes
            // of the `implementation` address with the bytecode before the address.
            mstore(0x00, or(shr(0xe8, shl(0x60, implementation)), 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000))
            // Packs the remaining 17 bytes of `implementation` with the bytecode after the address.
            mstore(0x20, or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3))
            instance := create2(value, 0x09, 0x37, salt)
        }
        if (instance == address(0)) {
            revert Errors.FailedDeployment();
        }
    }

    /**
     * @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 ("memory-safe") {
            let ptr := mload(0x40)
            mstore(add(ptr, 0x38), deployer)
            mstore(add(ptr, 0x24), 0x5af43d82803e903d91602b57fd5bf3ff)
            mstore(add(ptr, 0x14), implementation)
            mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73)
            mstore(add(ptr, 0x58), salt)
            mstore(add(ptr, 0x78), keccak256(add(ptr, 0x0c), 0x37))
            predicted := and(keccak256(add(ptr, 0x43), 0x55), 0xffffffffffffffffffffffffffffffffffffffff)
        }
    }

    /**
     * @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));
    }

    /**
     * @dev Deploys and returns the address of a clone that mimics the behavior of `implementation` with custom
     * immutable arguments. These are provided through `args` and cannot be changed after deployment. To
     * access the arguments within the implementation, use {fetchCloneArgs}.
     *
     * This function uses the create opcode, which should never revert.
     *
     * WARNING: This function does not check if `implementation` has code. A clone that points to an address
     * without code cannot be initialized. Initialization calls may appear to be successful when, in reality, they
     * have no effect and leave the clone uninitialized, allowing a third party to initialize it later.
     */
    function cloneWithImmutableArgs(address implementation, bytes memory args) internal returns (address instance) {
        return cloneWithImmutableArgs(implementation, args, 0);
    }

    /**
     * @dev Same as {xref-Clones-cloneWithImmutableArgs-address-bytes-}[cloneWithImmutableArgs], but with a `value`
     * parameter to send native currency to the new contract.
     *
     * WARNING: This function does not check if `implementation` has code. A clone that points to an address
     * without code cannot be initialized. Initialization calls may appear to be successful when, in reality, they
     * have no effect and leave the clone uninitialized, allowing a third party to initialize it later.
     *
     * NOTE: Using a non-zero value at creation will require the contract using this function (e.g. a factory)
     * to always have enough balance for new deployments. Consider exposing this function under a payable method.
     */
    function cloneWithImmutableArgs(
        address implementation,
        bytes memory args,
        uint256 value
    ) internal returns (address instance) {
        if (address(this).balance < value) {
            revert Errors.InsufficientBalance(address(this).balance, value);
        }
        bytes memory bytecode = _cloneCodeWithImmutableArgs(implementation, args);
        assembly ("memory-safe") {
            instance := create(value, add(bytecode, 0x20), mload(bytecode))
        }
        if (instance == address(0)) {
            revert Errors.FailedDeployment();
        }
    }

    /**
     * @dev Deploys and returns the address of a clone that mimics the behavior of `implementation` with custom
     * immutable arguments. These are provided through `args` and cannot be changed after deployment. To
     * access the arguments within the implementation, use {fetchCloneArgs}.
     *
     * This function uses the create2 opcode and a `salt` to deterministically deploy the clone. Using the same
     * `implementation`, `args` and `salt` multiple times will revert, since the clones cannot be deployed twice
     * at the same address.
     *
     * WARNING: This function does not check if `implementation` has code. A clone that points to an address
     * without code cannot be initialized. Initialization calls may appear to be successful when, in reality, they
     * have no effect and leave the clone uninitialized, allowing a third party to initialize it later.
     */
    function cloneDeterministicWithImmutableArgs(
        address implementation,
        bytes memory args,
        bytes32 salt
    ) internal returns (address instance) {
        return cloneDeterministicWithImmutableArgs(implementation, args, salt, 0);
    }

    /**
     * @dev Same as {xref-Clones-cloneDeterministicWithImmutableArgs-address-bytes-bytes32-}[cloneDeterministicWithImmutableArgs],
     * but with a `value` parameter to send native currency to the new contract.
     *
     * WARNING: This function does not check if `implementation` has code. A clone that points to an address
     * without code cannot be initialized. Initialization calls may appear to be successful when, in reality, they
     * have no effect and leave the clone uninitialized, allowing a third party to initialize it later.
     *
     * NOTE: Using a non-zero value at creation will require the contract using this function (e.g. a factory)
     * to always have enough balance for new deployments. Consider exposing this function under a payable method.
     */
    function cloneDeterministicWithImmutableArgs(
        address implementation,
        bytes memory args,
        bytes32 salt,
        uint256 value
    ) internal returns (address instance) {
        bytes memory bytecode = _cloneCodeWithImmutableArgs(implementation, args);
        return Create2.deploy(value, salt, bytecode);
    }

    /**
     * @dev Computes the address of a clone deployed using {Clones-cloneDeterministicWithImmutableArgs}.
     */
    function predictDeterministicAddressWithImmutableArgs(
        address implementation,
        bytes memory args,
        bytes32 salt,
        address deployer
    ) internal pure returns (address predicted) {
        bytes memory bytecode = _cloneCodeWithImmutableArgs(implementation, args);
        return Create2.computeAddress(salt, keccak256(bytecode), deployer);
    }

    /**
     * @dev Computes the address of a clone deployed using {Clones-cloneDeterministicWithImmutableArgs}.
     */
    function predictDeterministicAddressWithImmutableArgs(
        address implementation,
        bytes memory args,
        bytes32 salt
    ) internal view returns (address predicted) {
        return predictDeterministicAddressWithImmutableArgs(implementation, args, salt, address(this));
    }

    /**
     * @dev Get the immutable args attached to a clone.
     *
     * - If `instance` is a clone that was deployed using `clone` or `cloneDeterministic`, this
     *   function will return an empty array.
     * - If `instance` is a clone that was deployed using `cloneWithImmutableArgs` or
     *   `cloneDeterministicWithImmutableArgs`, this function will return the args array used at
     *   creation.
     * - If `instance` is NOT a clone deployed using this library, the behavior is undefined. This
     *   function should only be used to check addresses that are known to be clones.
     */
    function fetchCloneArgs(address instance) internal view returns (bytes memory) {
        bytes memory result = new bytes(instance.code.length - 45); // revert if length is too short
        assembly ("memory-safe") {
            extcodecopy(instance, add(result, 32), 45, mload(result))
        }
        return result;
    }

    /**
     * @dev Helper that prepares the initcode of the proxy with immutable args.
     *
     * An assembly variant of this function requires copying the `args` array, which can be efficiently done using
     * `mcopy`. Unfortunately, that opcode is not available before cancun. A pure solidity implementation using
     * abi.encodePacked is more expensive but also more portable and easier to review.
     *
     * NOTE: https://eips.ethereum.org/EIPS/eip-170[EIP-170] limits the length of the contract code to 24576 bytes.
     * With the proxy code taking 45 bytes, that limits the length of the immutable args to 24531 bytes.
     */
    function _cloneCodeWithImmutableArgs(
        address implementation,
        bytes memory args
    ) private pure returns (bytes memory) {
        if (args.length > 24531) revert CloneArgumentsTooLong();
        return
            abi.encodePacked(
                hex"61",
                uint16(args.length + 45),
                hex"3d81600a3d39f3363d3d373d3d3d363d73",
                implementation,
                hex"5af43d82803e903d91602b57fd5bf3",
                args
            );
    }
}

File 5 of 6 : Errors.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)

pragma solidity ^0.8.20;

/**
 * @dev Collection of common custom errors used in multiple contracts
 *
 * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.
 * It is recommended to avoid relying on the error API for critical functionality.
 *
 * _Available since v5.1._
 */
library Errors {
    /**
     * @dev The ETH balance of the account is not enough to perform the operation.
     */
    error InsufficientBalance(uint256 balance, uint256 needed);

    /**
     * @dev A call to an address target failed. The target may have reverted.
     */
    error FailedCall();

    /**
     * @dev The deployment failed.
     */
    error FailedDeployment();

    /**
     * @dev A necessary precompile is missing.
     */
    error MissingPrecompile(address);
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (utils/Create2.sol)

pragma solidity ^0.8.20;

import {Errors} from "./Errors.sol";

/**
 * @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.
 * `CREATE2` can be used to compute in advance the address where a smart
 * contract will be deployed, which allows for interesting new mechanisms known
 * as 'counterfactual interactions'.
 *
 * See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more
 * information.
 */
library Create2 {
    /**
     * @dev There's no code to deploy.
     */
    error Create2EmptyBytecode();

    /**
     * @dev Deploys a contract using `CREATE2`. The address where the contract
     * will be deployed can be known in advance via {computeAddress}.
     *
     * The bytecode for a contract can be obtained from Solidity with
     * `type(contractName).creationCode`.
     *
     * Requirements:
     *
     * - `bytecode` must not be empty.
     * - `salt` must have not been used for `bytecode` already.
     * - the factory must have a balance of at least `amount`.
     * - if `amount` is non-zero, `bytecode` must have a `payable` constructor.
     */
    function deploy(uint256 amount, bytes32 salt, bytes memory bytecode) internal returns (address addr) {
        if (address(this).balance < amount) {
            revert Errors.InsufficientBalance(address(this).balance, amount);
        }
        if (bytecode.length == 0) {
            revert Create2EmptyBytecode();
        }
        assembly ("memory-safe") {
            addr := create2(amount, add(bytecode, 0x20), mload(bytecode), salt)
            // if no address was created, and returndata is not empty, bubble revert
            if and(iszero(addr), not(iszero(returndatasize()))) {
                let p := mload(0x40)
                returndatacopy(p, 0, returndatasize())
                revert(p, returndatasize())
            }
        }
        if (addr == address(0)) {
            revert Errors.FailedDeployment();
        }
    }

    /**
     * @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the
     * `bytecodeHash` or `salt` will result in a new destination address.
     */
    function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) {
        return computeAddress(salt, bytecodeHash, address(this));
    }

    /**
     * @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at
     * `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}.
     */
    function computeAddress(bytes32 salt, bytes32 bytecodeHash, address deployer) internal pure returns (address addr) {
        assembly ("memory-safe") {
            let ptr := mload(0x40) // Get free memory pointer

            // |                   | ↓ ptr ...  ↓ ptr + 0x0B (start) ...  ↓ ptr + 0x20 ...  ↓ ptr + 0x40 ...   |
            // |-------------------|---------------------------------------------------------------------------|
            // | bytecodeHash      |                                                        CCCCCCCCCCCCC...CC |
            // | salt              |                                      BBBBBBBBBBBBB...BB                   |
            // | deployer          | 000000...0000AAAAAAAAAAAAAAAAAAA...AA                                     |
            // | 0xFF              |            FF                                                             |
            // |-------------------|---------------------------------------------------------------------------|
            // | memory            | 000000...00FFAAAAAAAAAAAAAAAAAAA...AABBBBBBBBBBBBB...BBCCCCCCCCCCCCC...CC |
            // | keccak(start, 85) |            ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ |

            mstore(add(ptr, 0x40), bytecodeHash)
            mstore(add(ptr, 0x20), salt)
            mstore(ptr, deployer) // Right-aligned with 12 preceding garbage bytes
            let start := add(ptr, 0x0b) // The hashed data starts at the final garbage byte which we will set to 0xff
            mstore8(start, 0xff)
            addr := and(keccak256(start, 85), 0xffffffffffffffffffffffffffffffffffffffff)
        }
    }
}

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

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_directory","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"FailedDeployment","type":"error"},{"inputs":[],"name":"ImplNotSet","type":"error"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"InsufficientBalance","type":"error"},{"inputs":[],"name":"Directory","outputs":[{"internalType":"contract IDirectory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_directory","type":"address"}],"name":"changeDirectoryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"etfId","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"name":"deployEtfToken","outputs":[{"internalType":"address","name":"proxy","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_key","type":"string"}],"name":"fetchFromDirectory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

608060405234801561000f575f5ffd5b50604051610abb380380610abb83398101604081905261002e916101ce565b806100388161003f565b50506101fb565b6001600160a01b03811661009a5760405162461bcd60e51b815260206004820181905260248201527f4469726563746f72792063616e6e6f74206265207a65726f206164647265737360448201526064015b60405180910390fd5b5f816001600160a01b03163b116100f35760405162461bcd60e51b815260206004820152601c60248201527f4469726563746f7279206d757374206265206120636f6e7472616374000000006044820152606401610091565b806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561014d575060408051601f3d908101601f1916820190925261014a918101906101ce565b60015b6101ae5760405162461bcd60e51b815260206004820152602c60248201527f4469726563746f7279206164647265737320646f6573206e6f7420696d706c6560448201526b6d656e74206f776e6572282960a01b6064820152608401610091565b505f80546001600160a01b0383166001600160a01b031990911617905550565b5f602082840312156101de575f5ffd5b81516001600160a01b03811681146101f4575f5ffd5b9392505050565b6108b3806102085f395ff3fe608060405234801561000f575f5ffd5b5060043610610055575f3560e01c80632726261814610059578063658a847a1461008857806378f6c7c41461009a5780638da5cb5b146100ad578063ba4c7be1146100b5575b5f5ffd5b61006c61006736600461061d565b6100ca565b6040516001600160a01b03909116815260200160405180910390f35b5f5461006c906001600160a01b031681565b61006c6100a8366004610715565b61013f565b61006c6101cc565b6100c86100c33660046107a2565b610245565b005b5f80546040516304e4c4c360e31b81526001600160a01b03909116906327262618906100fa9085906004016107bd565b602060405180830381865afa158015610115573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061013991906107f2565b92915050565b5f61015861014b610329565b610153610385565b6103d7565b5f54604051631baf4d8b60e21b81529192506001600160a01b0380841692636ebd362c92610196928b928b928b928b928b9290911690600401610835565b5f604051808303815f87803b1580156101ad575f5ffd5b505af11580156101bf573d5f5f3e3d5ffd5b5050505095945050505050565b5f5f5f9054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561021c573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061024091906107f2565b905090565b5f5f9054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610294573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b891906107f2565b6001600160a01b0316336001600160a01b03161461031d5760405162461bcd60e51b815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e657200000000000000000060448201526064015b60405180910390fd5b610326816103ea565b50565b5f6103596040518060400160405280600e81526020016d195d198b5d1bdad95b8b5a5b5c1b60921b8152506100ca565b90506001600160a01b03811661038257604051638020a5c760e01b815260040160405180910390fd5b90565b5f4244335a6040805160208101959095528401929092526bffffffffffffffffffffffff19606091821b1690830152607482015260940160405160208183030381529060405280519060200120905090565b5f6103e383835f610574565b9392505050565b6001600160a01b0381166104405760405162461bcd60e51b815260206004820181905260248201527f4469726563746f72792063616e6e6f74206265207a65726f20616464726573736044820152606401610314565b5f816001600160a01b03163b116104995760405162461bcd60e51b815260206004820152601c60248201527f4469726563746f7279206d757374206265206120636f6e7472616374000000006044820152606401610314565b806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156104f3575060408051601f3d908101601f191682019092526104f0918101906107f2565b60015b6105545760405162461bcd60e51b815260206004820152602c60248201527f4469726563746f7279206164647265737320646f6573206e6f7420696d706c6560448201526b6d656e74206f776e6572282960a01b6064820152608401610314565b505f80546001600160a01b0383166001600160a01b031990911617905550565b5f8147101561059f5760405163cf47918160e01b815247600482015260248101839052604401610314565b763d602d80600a3d3981f3363d3d373d3d3d363d730000008460601b60e81c175f526e5af43d82803e903d91602b57fd5bf38460781b17602052826037600984f590506001600160a01b0381166103e35760405163b06ebf3d60e01b815260040160405180910390fd5b634e487b7160e01b5f52604160045260245ffd5b5f6020828403121561062d575f5ffd5b813567ffffffffffffffff811115610643575f5ffd5b8201601f81018413610653575f5ffd5b803567ffffffffffffffff81111561066d5761066d610609565b604051601f8201601f19908116603f0116810167ffffffffffffffff8111828210171561069c5761069c610609565b6040528181528282016020018610156106b3575f5ffd5b816020840160208301375f91810160200191909152949350505050565b5f5f83601f8401126106e0575f5ffd5b50813567ffffffffffffffff8111156106f7575f5ffd5b60208301915083602082850101111561070e575f5ffd5b9250929050565b5f5f5f5f5f60608688031215610729575f5ffd5b85359450602086013567ffffffffffffffff811115610746575f5ffd5b610752888289016106d0565b909550935050604086013567ffffffffffffffff811115610771575f5ffd5b61077d888289016106d0565b969995985093965092949392505050565b6001600160a01b0381168114610326575f5ffd5b5f602082840312156107b2575f5ffd5b81356103e38161078e565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215610802575f5ffd5b81516103e38161078e565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b868152608060208201525f61084e60808301878961080d565b828103604084015261086181868861080d565b91505060018060a01b038316606083015297965050505050505056fea26469706673582212204cb3d1d90b4a22406ff9e6bf8539e4a596407d94412c4e4908d1727da2db5ddd64736f6c634300081e0033000000000000000000000000ec8b3d03fae8ff245fd629172e776811188c5447

Deployed Bytecode

0x608060405234801561000f575f5ffd5b5060043610610055575f3560e01c80632726261814610059578063658a847a1461008857806378f6c7c41461009a5780638da5cb5b146100ad578063ba4c7be1146100b5575b5f5ffd5b61006c61006736600461061d565b6100ca565b6040516001600160a01b03909116815260200160405180910390f35b5f5461006c906001600160a01b031681565b61006c6100a8366004610715565b61013f565b61006c6101cc565b6100c86100c33660046107a2565b610245565b005b5f80546040516304e4c4c360e31b81526001600160a01b03909116906327262618906100fa9085906004016107bd565b602060405180830381865afa158015610115573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061013991906107f2565b92915050565b5f61015861014b610329565b610153610385565b6103d7565b5f54604051631baf4d8b60e21b81529192506001600160a01b0380841692636ebd362c92610196928b928b928b928b928b9290911690600401610835565b5f604051808303815f87803b1580156101ad575f5ffd5b505af11580156101bf573d5f5f3e3d5ffd5b5050505095945050505050565b5f5f5f9054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561021c573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061024091906107f2565b905090565b5f5f9054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610294573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102b891906107f2565b6001600160a01b0316336001600160a01b03161461031d5760405162461bcd60e51b815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e657200000000000000000060448201526064015b60405180910390fd5b610326816103ea565b50565b5f6103596040518060400160405280600e81526020016d195d198b5d1bdad95b8b5a5b5c1b60921b8152506100ca565b90506001600160a01b03811661038257604051638020a5c760e01b815260040160405180910390fd5b90565b5f4244335a6040805160208101959095528401929092526bffffffffffffffffffffffff19606091821b1690830152607482015260940160405160208183030381529060405280519060200120905090565b5f6103e383835f610574565b9392505050565b6001600160a01b0381166104405760405162461bcd60e51b815260206004820181905260248201527f4469726563746f72792063616e6e6f74206265207a65726f20616464726573736044820152606401610314565b5f816001600160a01b03163b116104995760405162461bcd60e51b815260206004820152601c60248201527f4469726563746f7279206d757374206265206120636f6e7472616374000000006044820152606401610314565b806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156104f3575060408051601f3d908101601f191682019092526104f0918101906107f2565b60015b6105545760405162461bcd60e51b815260206004820152602c60248201527f4469726563746f7279206164647265737320646f6573206e6f7420696d706c6560448201526b6d656e74206f776e6572282960a01b6064820152608401610314565b505f80546001600160a01b0383166001600160a01b031990911617905550565b5f8147101561059f5760405163cf47918160e01b815247600482015260248101839052604401610314565b763d602d80600a3d3981f3363d3d373d3d3d363d730000008460601b60e81c175f526e5af43d82803e903d91602b57fd5bf38460781b17602052826037600984f590506001600160a01b0381166103e35760405163b06ebf3d60e01b815260040160405180910390fd5b634e487b7160e01b5f52604160045260245ffd5b5f6020828403121561062d575f5ffd5b813567ffffffffffffffff811115610643575f5ffd5b8201601f81018413610653575f5ffd5b803567ffffffffffffffff81111561066d5761066d610609565b604051601f8201601f19908116603f0116810167ffffffffffffffff8111828210171561069c5761069c610609565b6040528181528282016020018610156106b3575f5ffd5b816020840160208301375f91810160200191909152949350505050565b5f5f83601f8401126106e0575f5ffd5b50813567ffffffffffffffff8111156106f7575f5ffd5b60208301915083602082850101111561070e575f5ffd5b9250929050565b5f5f5f5f5f60608688031215610729575f5ffd5b85359450602086013567ffffffffffffffff811115610746575f5ffd5b610752888289016106d0565b909550935050604086013567ffffffffffffffff811115610771575f5ffd5b61077d888289016106d0565b969995985093965092949392505050565b6001600160a01b0381168114610326575f5ffd5b5f602082840312156107b2575f5ffd5b81356103e38161078e565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215610802575f5ffd5b81516103e38161078e565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b868152608060208201525f61084e60808301878961080d565b828103604084015261086181868861080d565b91505060018060a01b038316606083015297965050505050505056fea26469706673582212204cb3d1d90b4a22406ff9e6bf8539e4a596407d94412c4e4908d1727da2db5ddd64736f6c634300081e0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000ec8b3d03fae8ff245fd629172e776811188c5447

-----Decoded View---------------
Arg [0] : _directory (address): 0xEC8B3D03fae8fF245Fd629172E776811188C5447

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000ec8b3d03fae8ff245fd629172e776811188c5447


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