ETH Price: $3,383.89 (-1.83%)
Gas: 1 Gwei

Contract

0x59ca0E4987F0bC66143Aed9b46ACAD3a4Bbca25F
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Create Token201617042024-06-24 13:01:234 days ago1719234083IN
0x59ca0E49...a4Bbca25F
5 ETH0.021826675.96867848
Approve Creator201612012024-06-24 11:19:354 days ago1719227975IN
0x59ca0E49...a4Bbca25F
0 ETH0.000220424.74811264
Transfer Ownersh...201297682024-06-20 1:48:599 days ago1718848139IN
0x59ca0E49...a4Bbca25F
0 ETH0.000202697.07441747
0x60406080201296982024-06-20 1:34:479 days ago1718847287IN
 Create: Factory
0 ETH0.004374446.67379744

Latest 2 internal transactions

Advanced mode:
Parent Transaction Hash Block From To Value
201617042024-06-24 13:01:234 days ago1719234083
0x59ca0E49...a4Bbca25F
5 ETH
201617042024-06-24 13:01:234 days ago1719234083
0x59ca0E49...a4Bbca25F
 Contract Creation0 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Factory

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion
File 1 of 4 : Factory.sol
// SPDX-License-Identifier: None
pragma solidity ^0.8.24;

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

interface IToken {
    function initialize(bytes calldata params) external payable;
}

interface IValidationLogic {
    function validate(uint256 ethAmt, bytes calldata params) external;
}

contract Factory is Ownable {

    struct ImplementationData {
        address addr;
        uint256 version;
    }

    struct UserToken {
        uint256 tokenType;
        uint256 version;
    }


    IValidationLogic public validationLogic;
    mapping(uint256 => ImplementationData) public tokenImplementations;
    mapping(address => UserToken) public tokenData;
    address[] public createdTokens;
    mapping(address => bool) public canCreate;

    event TokenCreated(address _address);

    error NotApproved();

    constructor(address _validationLogic, address[] memory implementations) Ownable(msg.sender) {
        validationLogic = IValidationLogic(_validationLogic);
        uint256 len = implementations.length;
        for (uint256 i; i < len; i++) {
            tokenImplementations[i] = ImplementationData({addr: implementations[i], version: 1});
        }
    }

    function createToken(uint256 tokenID, bytes calldata params) external payable returns (address newToken) {
        if (!canCreate[msg.sender]) {
            revert NotApproved();
        }
        canCreate[msg.sender] = false;
        ImplementationData storage tokenInfo = tokenImplementations[tokenID];
        validationLogic.validate(msg.value, params);
        newToken = Clones.clone(tokenInfo.addr);
        createdTokens.push(newToken);
        tokenData[newToken] = UserToken({tokenType: tokenID, version: tokenInfo.version});
        IToken(newToken).initialize{value: msg.value}(params);
        emit TokenCreated(newToken);
    }

    function approveCreator(address creator, bool approved) external onlyOwner {
        canCreate[creator] = approved;
    }

    function setImplementations(uint256[] memory ids, address[] memory implementations) external onlyOwner {
        if (ids.length != implementations.length) {
            revert();
        }
        uint256 len = implementations.length;
        for (uint256 i; i < len; i++) {
            ImplementationData storage currImplementation = tokenImplementations[ids[i]];
            if (currImplementation.addr != implementations[i]) {
                currImplementation.addr = implementations[i];
                currImplementation.version += 1;
            }
        }
    }

    function setValidationLogic(address vLogic) external onlyOwner {
        validationLogic = IValidationLogic(vLogic);
    }

}

File 2 of 4 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;

import {Context} from "../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.
 *
 * The initial owner is set to the address provided by the deployer. 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;

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling 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 {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _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 4 : Clones.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (proxy/Clones.sol)

pragma solidity ^0.8.20;

/**
 * @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.
 */
library Clones {
    /**
     * @dev A clone instance deployment failed.
     */
    error ERC1167FailedCreateClone();

    /**
     * @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) {
        /// @solidity memory-safe-assembly
        assembly {
            // 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(0, 0x09, 0x37)
        }
        if (instance == address(0)) {
            revert ERC1167FailedCreateClone();
        }
    }

    /**
     * @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) {
        /// @solidity memory-safe-assembly
        assembly {
            // 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(0, 0x09, 0x37, salt)
        }
        if (instance == address(0)) {
            revert ERC1167FailedCreateClone();
        }
    }

    /**
     * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.
     */
    function predictDeterministicAddress(
        address implementation,
        bytes32 salt,
        address deployer
    ) internal pure returns (address predicted) {
        /// @solidity memory-safe-assembly
        assembly {
            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 := keccak256(add(ptr, 0x43), 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 4 of 4 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.20;

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

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200,
    "details": {
      "yul": true
    }
  },
  "viaIR": true,
  "evmVersion": "paris",
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_validationLogic","type":"address"},{"internalType":"address[]","name":"implementations","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ERC1167FailedCreateClone","type":"error"},{"inputs":[],"name":"NotApproved","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"}],"name":"TokenCreated","type":"event"},{"inputs":[{"internalType":"address","name":"creator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"approveCreator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"canCreate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"createToken","outputs":[{"internalType":"address","name":"newToken","type":"address"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"createdTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"address[]","name":"implementations","type":"address[]"}],"name":"setImplementations","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vLogic","type":"address"}],"name":"setValidationLogic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenData","outputs":[{"internalType":"uint256","name":"tokenType","type":"uint256"},{"internalType":"uint256","name":"version","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenImplementations","outputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"version","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"validationLogic","outputs":[{"internalType":"contract IValidationLogic","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

604060808152346101b757610b1f8038038061001a816101d2565b928339810182828203126101b757610031826101f7565b6020838101516001600160401b0394929391928582116101b757019181601f840112156101b7578251918583116101bc576005938360051b9083806100778185016101d2565b8097815201928201019283116101b75783809101915b83831061019f5750505050331561018757600080546001600160a01b0319808216339081178455929490926001600160a01b039283167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08780a38160019716836001541617600155805195855b87811061010f578a51610913908161020c8239f35b825181101561017357838682841b85010151168b51908c82018281108d82111761015f578d5281528681018a8152828952600288528c892091518254881690871617825551908a015588016100fa565b634e487b7160e01b8a52604160045260248afd5b634e487b7160e01b87526032600452602487fd5b8551631e4fbdf760e01b815260006004820152602490fd5b81906101aa846101f7565b815201910190839061008d565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6040519190601f01601f191682016001600160401b038111838210176101bc57604052565b51906001600160a01b03821682036101b75756fe6040608081526004908136101561001557600080fd5b600091823560e01c80631672b0a61461077557806327e45c2c14610733578063512ea840146104a85780635b76c04f14610470578063715018a61461041657806371e6977e146103ed5780637804a5dc146103af57806382bc73dc146101f85780638da5cb5b146101d0578063d782d6471461018d578063d897ba96146101335763f2fde38b146100a557600080fd5b3461012f57602036600319011261012f576100be6107b5565b906100c76108b1565b6001600160a01b03918216928315610119575050600054826001600160601b0360a01b821617600055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a380f35b51631e4fbdf760e01b8152908101849052602490fd5b8280fd5b50503461018957806003193601126101895761014d6107b5565b9060243591821515809303610185576101646108b1565b60018060a01b03168352600560205282209060ff8019835416911617905580f35b8380fd5b5080fd5b5091346101cd5760203660031901126101cd57823592548310156101cd57506101b760209261082f565b905491519160018060a01b039160031b1c168152f35b80fd5b505034610189578160031936011261018957905490516001600160a01b039091168152602090f35b503461012f578160031936011261012f5780359067ffffffffffffffff908183116103ab57366023840112156103ab576024938184013561023881610817565b94610245835196876107f5565b818652602091878388019160051b830101913683116103935788849101915b83831061039b57505050508535938411610397573660238501121561039757838301359361029185610817565b9461029e845196876107f5565b808652878387019160051b83010191368311610393578801905b82821061036f575050506102ca6108b1565b845194845180960361036b57875b8681106102e3578880f35b6102ed818361089d565b5189526002835283892080546001600160a01b038061030c858b61089d565b511681831603610322575b5050506001016102d8565b61032c848a61089d565b5116906001600160601b0360a01b1617815560018091018054918201809211610359575560013880610317565b634e487b7160e01b8b5260118752898bfd5b8780fd5b81356001600160a01b038116810361038e5781529083019083016102b8565b600080fd5b8980fd5b8680fd5b8235815291810191849101610264565b8480fd5b5050346101895760203660031901126101895760209160ff9082906001600160a01b036103da6107b5565b1681526005855220541690519015158152f35b50503461018957816003193601126101895760015490516001600160a01b039091168152602090f35b83346101cd57806003193601126101cd5761042f6108b1565b600080546001600160a01b0319811682556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461012f57602036600319011261012f579181923581526002602052206001808060a01b0382541691015482519182526020820152f35b5091908060031936011261018957823591602480359467ffffffffffffffff95868111610185573660238201121561018557808201358781116103ab5783820191848236920101116103ab573385526020976005895260ff8787205416156107235733865260058952868620805460ff19169055878652600289528686206001546001600160a01b039991908a16803b1561071f57888a518092631df7cc5d60e31b8252348a8301528c8b8301528183816105688c8c604484019161087c565b03925af1801561071557610702575b508054608881901c62ffffff16763d602d80600a3d3981f3363d3d373d3d3d363d7300000017895260781b6effffffffffffffffffffffffffffff19166e5af43d82803e903d91602b57fd5bf3178b5289603760098af016998a156106f2578654680100000000000000008110156106e057908b6105fc836001809695018b5561082f565b909283549160031b92831b921b191617905501549088519289840190848210908211176106cc578952825289820190815288875260038a528787209151825551600190910155863b156103ab579161066d889286948851968795869563439fab9160e01b875286015284019161087c565b038134885af180156106c2576106ae575b50507f2e2b3f61b70d2d131b2a807371103cc98d51adcaa5e9a8f9c32658ad8426e74e838251848152a151908152f35b6106b882916107cb565b6101cd578061067e565b83513d84823e3d90fd5b87604188634e487b7160e01b600052526000fd5b634e487b7160e01b8a5260418852888afd5b89516330be1a3d60e21b81528790fd5b61070e909891986107cb565b9638610577565b8a513d8b823e3d90fd5b8880fd5b865163c19f17a960e01b81528490fd5b505034610189576020366003190112610189579081906001600160a01b036107596107b5565b1681526003602052206001815491015482519182526020820152f35b83346101cd5760203660031901126101cd5761078f6107b5565b6107976108b1565b60018060a01b03166001600160601b0360a01b600154161760015580f35b600435906001600160a01b038216820361038e57565b67ffffffffffffffff81116107df57604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176107df57604052565b67ffffffffffffffff81116107df5760051b60200190565b6004548110156108665760046000527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0190600090565b634e487b7160e01b600052603260045260246000fd5b908060209392818452848401376000828201840152601f01601f1916010190565b80518210156108665760209160051b010190565b6000546001600160a01b031633036108c557565b60405163118cdaa760e01b8152336004820152602490fdfea26469706673582212200c93f950f9de1c1ec365c18fc4ee15d2edd798d987eaf01d88dfa2837f58c9db64736f6c63430008180033000000000000000000000000771b8e1d68a0ec5fea25da1f12c19e87e816d5080000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000039a0c47adc02528f86ebc1554ee5b12ccd944269

Deployed Bytecode

0x6040608081526004908136101561001557600080fd5b600091823560e01c80631672b0a61461077557806327e45c2c14610733578063512ea840146104a85780635b76c04f14610470578063715018a61461041657806371e6977e146103ed5780637804a5dc146103af57806382bc73dc146101f85780638da5cb5b146101d0578063d782d6471461018d578063d897ba96146101335763f2fde38b146100a557600080fd5b3461012f57602036600319011261012f576100be6107b5565b906100c76108b1565b6001600160a01b03918216928315610119575050600054826001600160601b0360a01b821617600055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a380f35b51631e4fbdf760e01b8152908101849052602490fd5b8280fd5b50503461018957806003193601126101895761014d6107b5565b9060243591821515809303610185576101646108b1565b60018060a01b03168352600560205282209060ff8019835416911617905580f35b8380fd5b5080fd5b5091346101cd5760203660031901126101cd57823592548310156101cd57506101b760209261082f565b905491519160018060a01b039160031b1c168152f35b80fd5b505034610189578160031936011261018957905490516001600160a01b039091168152602090f35b503461012f578160031936011261012f5780359067ffffffffffffffff908183116103ab57366023840112156103ab576024938184013561023881610817565b94610245835196876107f5565b818652602091878388019160051b830101913683116103935788849101915b83831061039b57505050508535938411610397573660238501121561039757838301359361029185610817565b9461029e845196876107f5565b808652878387019160051b83010191368311610393578801905b82821061036f575050506102ca6108b1565b845194845180960361036b57875b8681106102e3578880f35b6102ed818361089d565b5189526002835283892080546001600160a01b038061030c858b61089d565b511681831603610322575b5050506001016102d8565b61032c848a61089d565b5116906001600160601b0360a01b1617815560018091018054918201809211610359575560013880610317565b634e487b7160e01b8b5260118752898bfd5b8780fd5b81356001600160a01b038116810361038e5781529083019083016102b8565b600080fd5b8980fd5b8680fd5b8235815291810191849101610264565b8480fd5b5050346101895760203660031901126101895760209160ff9082906001600160a01b036103da6107b5565b1681526005855220541690519015158152f35b50503461018957816003193601126101895760015490516001600160a01b039091168152602090f35b83346101cd57806003193601126101cd5761042f6108b1565b600080546001600160a01b0319811682556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461012f57602036600319011261012f579181923581526002602052206001808060a01b0382541691015482519182526020820152f35b5091908060031936011261018957823591602480359467ffffffffffffffff95868111610185573660238201121561018557808201358781116103ab5783820191848236920101116103ab573385526020976005895260ff8787205416156107235733865260058952868620805460ff19169055878652600289528686206001546001600160a01b039991908a16803b1561071f57888a518092631df7cc5d60e31b8252348a8301528c8b8301528183816105688c8c604484019161087c565b03925af1801561071557610702575b508054608881901c62ffffff16763d602d80600a3d3981f3363d3d373d3d3d363d7300000017895260781b6effffffffffffffffffffffffffffff19166e5af43d82803e903d91602b57fd5bf3178b5289603760098af016998a156106f2578654680100000000000000008110156106e057908b6105fc836001809695018b5561082f565b909283549160031b92831b921b191617905501549088519289840190848210908211176106cc578952825289820190815288875260038a528787209151825551600190910155863b156103ab579161066d889286948851968795869563439fab9160e01b875286015284019161087c565b038134885af180156106c2576106ae575b50507f2e2b3f61b70d2d131b2a807371103cc98d51adcaa5e9a8f9c32658ad8426e74e838251848152a151908152f35b6106b882916107cb565b6101cd578061067e565b83513d84823e3d90fd5b87604188634e487b7160e01b600052526000fd5b634e487b7160e01b8a5260418852888afd5b89516330be1a3d60e21b81528790fd5b61070e909891986107cb565b9638610577565b8a513d8b823e3d90fd5b8880fd5b865163c19f17a960e01b81528490fd5b505034610189576020366003190112610189579081906001600160a01b036107596107b5565b1681526003602052206001815491015482519182526020820152f35b83346101cd5760203660031901126101cd5761078f6107b5565b6107976108b1565b60018060a01b03166001600160601b0360a01b600154161760015580f35b600435906001600160a01b038216820361038e57565b67ffffffffffffffff81116107df57604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176107df57604052565b67ffffffffffffffff81116107df5760051b60200190565b6004548110156108665760046000527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0190600090565b634e487b7160e01b600052603260045260246000fd5b908060209392818452848401376000828201840152601f01601f1916010190565b80518210156108665760209160051b010190565b6000546001600160a01b031633036108c557565b60405163118cdaa760e01b8152336004820152602490fdfea26469706673582212200c93f950f9de1c1ec365c18fc4ee15d2edd798d987eaf01d88dfa2837f58c9db64736f6c63430008180033

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

000000000000000000000000771b8e1d68a0ec5fea25da1f12c19e87e816d5080000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000039a0c47adc02528f86ebc1554ee5b12ccd944269

-----Decoded View---------------
Arg [0] : _validationLogic (address): 0x771b8E1D68a0eC5FEa25dA1f12C19E87E816d508
Arg [1] : implementations (address[]): 0x39A0C47AdC02528F86EbC1554EE5b12CCD944269

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000771b8e1d68a0ec5fea25da1f12c19e87e816d508
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [3] : 00000000000000000000000039a0c47adc02528f86ebc1554ee5b12ccd944269


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.