ETH Price: $3,396.97 (+6.33%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw ETH168359122023-03-15 21:18:11680 days ago1678915091IN
0x6324bF2b...9CF5EbdF0
0 ETH0.0009559131.52638637
Register165706022023-02-06 15:20:35717 days ago1675696835IN
0x6324bF2b...9CF5EbdF0
0.1 ETH0.0006908327.75326949
Recover Token165434722023-02-02 20:23:23721 days ago1675369403IN
0x6324bF2b...9CF5EbdF0
0 ETH0.002332134.43641663
Withdraw ETH165434682023-02-02 20:22:35721 days ago1675369355IN
0x6324bF2b...9CF5EbdF0
0 ETH0.0010931636.05315572
Register165306102023-02-01 1:12:47723 days ago1675213967IN
0x6324bF2b...9CF5EbdF0
0.1 ETH0.0004443417.85095078
Register165225232023-01-30 22:07:47724 days ago1675116467IN
0x6324bF2b...9CF5EbdF0
0.1 ETH0.000717628.8287326
Register164095412023-01-15 3:31:59740 days ago1673753519IN
0x6324bF2b...9CF5EbdF0
0.1 ETH0.0003962215.91794589
Register163723002023-01-09 22:43:59745 days ago1673304239IN
0x6324bF2b...9CF5EbdF0
0.1 ETH0.0007553530.34527732
Register163493022023-01-06 17:42:23748 days ago1673026943IN
0x6324bF2b...9CF5EbdF0
0.1 ETH0.0005928923.81875041
Register163210202023-01-02 18:56:35752 days ago1672685795IN
0x6324bF2b...9CF5EbdF0
0.1 ETH0.0005042620.25827627
Register163163802023-01-02 3:23:59753 days ago1672629839IN
0x6324bF2b...9CF5EbdF0
0.1 ETH0.0003664714.72267887
Register161576522022-12-10 23:40:47775 days ago1670715647IN
0x6324bF2b...9CF5EbdF0
0.1 ETH0.00034413.82009312
Register161343342022-12-07 17:31:59778 days ago1670434319IN
0x6324bF2b...9CF5EbdF0
0.1 ETH0.0004231216.99832552
Register160768672022-11-29 16:33:59786 days ago1669739639IN
0x6324bF2b...9CF5EbdF0
0.1 ETH0.0003537114.21016342
Register160706872022-11-28 19:50:47787 days ago1669665047IN
0x6324bF2b...9CF5EbdF0
0.1 ETH0.0003390613.62128352
Register159776652022-11-15 19:58:11800 days ago1668542291IN
0x6324bF2b...9CF5EbdF0
0.1 ETH0.000398816.02146795
Register159713112022-11-14 22:37:59801 days ago1668465479IN
0x6324bF2b...9CF5EbdF0
0.1 ETH0.0005137220.63816514
Register159480992022-11-11 16:54:59804 days ago1668185699IN
0x6324bF2b...9CF5EbdF0
0.1 ETH0.0007896231.72195151
Register159253642022-11-08 12:38:35807 days ago1667911115IN
0x6324bF2b...9CF5EbdF0
0.1 ETH0.0003224512.95406023
Deploy Proxy159126922022-11-06 18:12:59809 days ago1667758379IN
0x6324bF2b...9CF5EbdF0
0 ETH0.0051404116.79967906
Register158958752022-11-04 9:52:47811 days ago1667555567IN
0x6324bF2b...9CF5EbdF0
0.1 ETH0.0019913680
Register158719132022-11-01 1:26:47815 days ago1667266007IN
0x6324bF2b...9CF5EbdF0
0.1 ETH0.0002911911.69850152
Deploy Proxy158411712022-10-27 18:22:59819 days ago1666894979IN
0x6324bF2b...9CF5EbdF0
0 ETH0.0067464520.30579801
Register158341422022-10-26 18:48:47820 days ago1666810127IN
0x6324bF2b...9CF5EbdF0
0.1 ETH0.000833733.49297935
Register158315852022-10-26 10:15:35820 days ago1666779335IN
0x6324bF2b...9CF5EbdF0
0.1 ETH0.0003665214.72452193
View all transactions

Latest 18 internal transactions

Advanced mode:
Parent Transaction Hash Block
From
To
168359122023-03-15 21:18:11680 days ago1678915091
0x6324bF2b...9CF5EbdF0
0.1 ETH
165434682023-02-02 20:22:35721 days ago1675369355
0x6324bF2b...9CF5EbdF0
2.8 ETH
159126922022-11-06 18:12:59809 days ago1667758379
0x6324bF2b...9CF5EbdF0
 Contract Creation0 ETH
158411712022-10-27 18:22:59819 days ago1666894979
0x6324bF2b...9CF5EbdF0
 Contract Creation0 ETH
158093702022-10-23 7:38:35824 days ago1666510715
0x6324bF2b...9CF5EbdF0
 Contract Creation0 ETH
157430122022-10-14 1:17:11833 days ago1665710231
0x6324bF2b...9CF5EbdF0
 Contract Creation0 ETH
156843752022-10-05 20:45:47841 days ago1665002747
0x6324bF2b...9CF5EbdF0
 Contract Creation0 ETH
156408412022-09-29 18:39:35847 days ago1664476775
0x6324bF2b...9CF5EbdF0
 Contract Creation0 ETH
155905292022-09-22 17:59:59854 days ago1663869599
0x6324bF2b...9CF5EbdF0
 Contract Creation0 ETH
155257242022-09-13 7:40:49864 days ago1663054849
0x6324bF2b...9CF5EbdF0
 Contract Creation0 ETH
155172632022-09-11 22:06:10865 days ago1662933970
0x6324bF2b...9CF5EbdF0
 Contract Creation0 ETH
154984122022-09-08 19:29:18868 days ago1662665358
0x6324bF2b...9CF5EbdF0
 Contract Creation0 ETH
154085692022-08-25 10:24:18882 days ago1661423058
0x6324bF2b...9CF5EbdF0
 Contract Creation0 ETH
153412992022-08-14 18:18:52893 days ago1660501132
0x6324bF2b...9CF5EbdF0
 Contract Creation0 ETH
153369492022-08-14 1:55:07894 days ago1660442107
0x6324bF2b...9CF5EbdF0
 Contract Creation0 ETH
153254472022-08-12 6:31:34896 days ago1660285894
0x6324bF2b...9CF5EbdF0
 Contract Creation0 ETH
153228612022-08-11 20:42:32896 days ago1660250552
0x6324bF2b...9CF5EbdF0
 Contract Creation0 ETH
153171982022-08-10 23:04:35897 days ago1660172675
0x6324bF2b...9CF5EbdF0
 Contract Creation0 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CRFTDRegistry

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 100000 runs

Other Settings:
default evmVersion
File 1 of 7 : CRFTDRegistry.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import {Owned} from "solmate/auth/Owned.sol";
import {ERC20} from "solmate/tokens/ERC20.sol";
import {ERC721} from "solmate/tokens/ERC721.sol";
import {ERC1967Proxy} from "UDS/proxy/ERC1967Proxy.sol";
import {OwnableUDS as Ownable} from "UDS/auth/OwnableUDS.sol";

error IncorrectValue();

//       ___           ___           ___                    _____
//      /  /\         /  /\         /  /\       ___        /  /::\
//     /  /:/        /  /::\       /  /:/_     /__/\      /  /:/\:\
//    /  /:/        /  /:/\:\     /  /:/ /\    \  \:\    /  /:/  \:\
//   /  /:/  ___   /  /::\ \:\   /  /:/ /:/     \__\:\  /__/:/ \__\:|
//  /__/:/  /  /\ /__/:/\:\_\:\ /__/:/ /:/      /  /::\ \  \:\ /  /:/
//  \  \:\ /  /:/ \__\/~|::\/:/ \  \:\/:/      /  /:/\:\ \  \:\  /:/
//   \  \:\  /:/     |  |:|::/   \  \::/      /  /:/__\/  \  \:\/:/
//    \  \:\/:/      |  |:|\/     \  \:\     /__/:/        \  \::/
//     \  \::/       |__|:|        \  \:\    \__\/          \__\/
//      \__\/         \__\|         \__\/

/// @title CRFTDRegistry
/// @author phaze (https://github.com/0xPhaze)
/// @notice CRFTD proxy registry
contract CRFTDRegistry is Owned(msg.sender) {
    event Registered(address indexed user, uint256 fee);

    event ProxyDeployed(address indexed owner, address indexed proxy);

    uint256 public registryFee;
    mapping(address => bool) approvedImplementations;

    constructor(uint256 registryFee_) {
        registryFee = registryFee_;
    }

    /* ------------- external ------------- */

    function register() external payable {
        if (msg.value != registryFee) revert IncorrectValue();

        emit Registered(msg.sender, registryFee);
    }

    function deployProxy(
        address implementation,
        bytes calldata initCalldata,
        bytes[] calldata calls
    ) external returns (address proxy) {
        proxy = address(new ERC1967Proxy(implementation, initCalldata));

        for (uint256 i; i < calls.length; ++i) {
            (bool success, ) = proxy.call(calls[i]);

            if (!success) {
                assembly {
                    returndatacopy(0, 0, returndatasize())
                    revert(0, returndatasize())
                }
            }
        }

        Ownable(proxy).transferOwnership(msg.sender);

        emit ProxyDeployed(msg.sender, proxy);
    }

    /* ------------- owner ------------- */

    function setImplementationAllowed(address implementation, bool allowed) external onlyOwner {
        approvedImplementations[implementation] = allowed;
    }

    function setRegistryFee(uint256 fees) external onlyOwner {
        registryFee = fees;
    }

    function withdrawETH() external onlyOwner {
        (bool success, ) = msg.sender.call{value: address(this).balance}("");
        require(success);
    }

    function recoverToken(ERC20 token) external onlyOwner {
        token.transfer(msg.sender, token.balanceOf(address(this)));
    }

    function recoverNFT(ERC721 token, uint256 id) external onlyOwner {
        token.transferFrom(address(this), msg.sender, id);
    }
}

File 2 of 7 : Owned.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

/// @notice Simple single owner authorization mixin.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/auth/Owned.sol)
abstract contract Owned {
    /*//////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

    event OwnerUpdated(address indexed user, address indexed newOwner);

    /*//////////////////////////////////////////////////////////////
                            OWNERSHIP STORAGE
    //////////////////////////////////////////////////////////////*/

    address public owner;

    modifier onlyOwner() virtual {
        require(msg.sender == owner, "UNAUTHORIZED");

        _;
    }

    /*//////////////////////////////////////////////////////////////
                               CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    constructor(address _owner) {
        owner = _owner;

        emit OwnerUpdated(address(0), _owner);
    }

    /*//////////////////////////////////////////////////////////////
                             OWNERSHIP LOGIC
    //////////////////////////////////////////////////////////////*/

    function setOwner(address newOwner) public virtual onlyOwner {
        owner = newOwner;

        emit OwnerUpdated(msg.sender, newOwner);
    }
}

File 3 of 7 : ERC20.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;

/// @notice Modern and gas efficient ERC20 + EIP-2612 implementation.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC20.sol)
/// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol)
/// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it.
abstract contract ERC20 {
    /*//////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

    event Transfer(address indexed from, address indexed to, uint256 amount);

    event Approval(address indexed owner, address indexed spender, uint256 amount);

    /*//////////////////////////////////////////////////////////////
                            METADATA STORAGE
    //////////////////////////////////////////////////////////////*/

    string public name;

    string public symbol;

    uint8 public immutable decimals;

    /*//////////////////////////////////////////////////////////////
                              ERC20 STORAGE
    //////////////////////////////////////////////////////////////*/

    uint256 public totalSupply;

    mapping(address => uint256) public balanceOf;

    mapping(address => mapping(address => uint256)) public allowance;

    /*//////////////////////////////////////////////////////////////
                            EIP-2612 STORAGE
    //////////////////////////////////////////////////////////////*/

    uint256 internal immutable INITIAL_CHAIN_ID;

    bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR;

    mapping(address => uint256) public nonces;

    /*//////////////////////////////////////////////////////////////
                               CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    constructor(
        string memory _name,
        string memory _symbol,
        uint8 _decimals
    ) {
        name = _name;
        symbol = _symbol;
        decimals = _decimals;

        INITIAL_CHAIN_ID = block.chainid;
        INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator();
    }

    /*//////////////////////////////////////////////////////////////
                               ERC20 LOGIC
    //////////////////////////////////////////////////////////////*/

    function approve(address spender, uint256 amount) public virtual returns (bool) {
        allowance[msg.sender][spender] = amount;

        emit Approval(msg.sender, spender, amount);

        return true;
    }

    function transfer(address to, uint256 amount) public virtual returns (bool) {
        balanceOf[msg.sender] -= amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(msg.sender, to, amount);

        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual returns (bool) {
        uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals.

        if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount;

        balanceOf[from] -= amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(from, to, amount);

        return true;
    }

    /*//////////////////////////////////////////////////////////////
                             EIP-2612 LOGIC
    //////////////////////////////////////////////////////////////*/

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) public virtual {
        require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED");

        // Unchecked because the only math done is incrementing
        // the owner's nonce which cannot realistically overflow.
        unchecked {
            address recoveredAddress = ecrecover(
                keccak256(
                    abi.encodePacked(
                        "\x19\x01",
                        DOMAIN_SEPARATOR(),
                        keccak256(
                            abi.encode(
                                keccak256(
                                    "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"
                                ),
                                owner,
                                spender,
                                value,
                                nonces[owner]++,
                                deadline
                            )
                        )
                    )
                ),
                v,
                r,
                s
            );

            require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER");

            allowance[recoveredAddress][spender] = value;
        }

        emit Approval(owner, spender, value);
    }

    function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {
        return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator();
    }

    function computeDomainSeparator() internal view virtual returns (bytes32) {
        return
            keccak256(
                abi.encode(
                    keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
                    keccak256(bytes(name)),
                    keccak256("1"),
                    block.chainid,
                    address(this)
                )
            );
    }

    /*//////////////////////////////////////////////////////////////
                        INTERNAL MINT/BURN LOGIC
    //////////////////////////////////////////////////////////////*/

    function _mint(address to, uint256 amount) internal virtual {
        totalSupply += amount;

        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[to] += amount;
        }

        emit Transfer(address(0), to, amount);
    }

    function _burn(address from, uint256 amount) internal virtual {
        balanceOf[from] -= amount;

        // Cannot underflow because a user's balance
        // will never be larger than the total supply.
        unchecked {
            totalSupply -= amount;
        }

        emit Transfer(from, address(0), amount);
    }
}

File 4 of 7 : ERC721.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;

/// @notice Modern, minimalist, and gas efficient ERC-721 implementation.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC721.sol)
abstract contract ERC721 {
    /*//////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

    event Transfer(address indexed from, address indexed to, uint256 indexed id);

    event Approval(address indexed owner, address indexed spender, uint256 indexed id);

    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /*//////////////////////////////////////////////////////////////
                         METADATA STORAGE/LOGIC
    //////////////////////////////////////////////////////////////*/

    string public name;

    string public symbol;

    function tokenURI(uint256 id) public view virtual returns (string memory);

    /*//////////////////////////////////////////////////////////////
                      ERC721 BALANCE/OWNER STORAGE
    //////////////////////////////////////////////////////////////*/

    mapping(uint256 => address) internal _ownerOf;

    mapping(address => uint256) internal _balanceOf;

    function ownerOf(uint256 id) public view virtual returns (address owner) {
        require((owner = _ownerOf[id]) != address(0), "NOT_MINTED");
    }

    function balanceOf(address owner) public view virtual returns (uint256) {
        require(owner != address(0), "ZERO_ADDRESS");

        return _balanceOf[owner];
    }

    /*//////////////////////////////////////////////////////////////
                         ERC721 APPROVAL STORAGE
    //////////////////////////////////////////////////////////////*/

    mapping(uint256 => address) public getApproved;

    mapping(address => mapping(address => bool)) public isApprovedForAll;

    /*//////////////////////////////////////////////////////////////
                               CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    constructor(string memory _name, string memory _symbol) {
        name = _name;
        symbol = _symbol;
    }

    /*//////////////////////////////////////////////////////////////
                              ERC721 LOGIC
    //////////////////////////////////////////////////////////////*/

    function approve(address spender, uint256 id) public virtual {
        address owner = _ownerOf[id];

        require(msg.sender == owner || isApprovedForAll[owner][msg.sender], "NOT_AUTHORIZED");

        getApproved[id] = spender;

        emit Approval(owner, spender, id);
    }

    function setApprovalForAll(address operator, bool approved) public virtual {
        isApprovedForAll[msg.sender][operator] = approved;

        emit ApprovalForAll(msg.sender, operator, approved);
    }

    function transferFrom(
        address from,
        address to,
        uint256 id
    ) public virtual {
        require(from == _ownerOf[id], "WRONG_FROM");

        require(to != address(0), "INVALID_RECIPIENT");

        require(
            msg.sender == from || isApprovedForAll[from][msg.sender] || msg.sender == getApproved[id],
            "NOT_AUTHORIZED"
        );

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        unchecked {
            _balanceOf[from]--;

            _balanceOf[to]++;
        }

        _ownerOf[id] = to;

        delete getApproved[id];

        emit Transfer(from, to, id);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id
    ) public virtual {
        transferFrom(from, to, id);

        if (to.code.length != 0)
            require(
                ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, "") ==
                    ERC721TokenReceiver.onERC721Received.selector,
                "UNSAFE_RECIPIENT"
            );
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        bytes calldata data
    ) public virtual {
        transferFrom(from, to, id);

        if (to.code.length != 0)
            require(
                ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, data) ==
                    ERC721TokenReceiver.onERC721Received.selector,
                "UNSAFE_RECIPIENT"
            );
    }

    /*//////////////////////////////////////////////////////////////
                              ERC165 LOGIC
    //////////////////////////////////////////////////////////////*/

    function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {
        return
            interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165
            interfaceId == 0x80ac58cd || // ERC165 Interface ID for ERC721
            interfaceId == 0x5b5e139f; // ERC165 Interface ID for ERC721Metadata
    }

    /*//////////////////////////////////////////////////////////////
                        INTERNAL MINT/BURN LOGIC
    //////////////////////////////////////////////////////////////*/

    function _mint(address to, uint256 id) internal virtual {
        require(to != address(0), "INVALID_RECIPIENT");

        require(_ownerOf[id] == address(0), "ALREADY_MINTED");

        // Counter overflow is incredibly unrealistic.
        unchecked {
            _balanceOf[to]++;
        }

        _ownerOf[id] = to;

        emit Transfer(address(0), to, id);
    }

    function _burn(uint256 id) internal virtual {
        address owner = _ownerOf[id];

        require(owner != address(0), "NOT_MINTED");

        // Ownership check above ensures no underflow.
        unchecked {
            _balanceOf[owner]--;
        }

        delete _ownerOf[id];

        delete getApproved[id];

        emit Transfer(owner, address(0), id);
    }

    /*//////////////////////////////////////////////////////////////
                        INTERNAL SAFE MINT LOGIC
    //////////////////////////////////////////////////////////////*/

    function _safeMint(address to, uint256 id) internal virtual {
        _mint(to, id);

        if (to.code.length != 0)
            require(
                ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, "") ==
                    ERC721TokenReceiver.onERC721Received.selector,
                "UNSAFE_RECIPIENT"
            );
    }

    function _safeMint(
        address to,
        uint256 id,
        bytes memory data
    ) internal virtual {
        _mint(to, id);

        if (to.code.length != 0)
            require(
                ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, data) ==
                    ERC721TokenReceiver.onERC721Received.selector,
                "UNSAFE_RECIPIENT"
            );
    }
}

/// @notice A generic interface for a contract which properly accepts ERC721 tokens.
/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC721.sol)
abstract contract ERC721TokenReceiver {
    function onERC721Received(
        address,
        address,
        uint256,
        bytes calldata
    ) external virtual returns (bytes4) {
        return ERC721TokenReceiver.onERC721Received.selector;
    }
}

File 5 of 7 : ERC1967Proxy.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

// ------------- storage

// keccak256("eip1967.proxy.implementation") - 1 = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
bytes32 constant ERC1967_PROXY_STORAGE_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;

function s() pure returns (ERC1967UpgradeDS storage diamondStorage) {
    assembly { diamondStorage.slot := ERC1967_PROXY_STORAGE_SLOT } // prettier-ignore
}

struct ERC1967UpgradeDS {
    address implementation;
}

// ------------- errors

error InvalidUUID();
error NotAContract();

/// @notice ERC1967
/// @author phaze (https://github.com/0xPhaze/UDS)
abstract contract ERC1967 {
    event Upgraded(address indexed implementation);

    function _upgradeToAndCall(address logic, bytes memory data) internal {
        if (logic.code.length == 0) revert NotAContract();

        if (ERC1822(logic).proxiableUUID() != ERC1967_PROXY_STORAGE_SLOT) revert InvalidUUID();

        if (data.length != 0) {
            (bool success, ) = logic.delegatecall(data);

            if (!success) {
                assembly {
                    returndatacopy(0, 0, returndatasize())
                    revert(0, returndatasize())
                }
            }
        }

        emit Upgraded(logic);

        s().implementation = logic;
    }
}

/// @notice Minimal ERC1967Proxy
/// @author phaze (https://github.com/0xPhaze/UDS)
contract ERC1967Proxy is ERC1967 {
    constructor(address logic, bytes memory data) payable {
        _upgradeToAndCall(logic, data);
    }

    fallback() external payable {
        assembly {
            calldatacopy(0, 0, calldatasize())

            let success := delegatecall(gas(), sload(ERC1967_PROXY_STORAGE_SLOT), 0, calldatasize(), 0, 0)

            returndatacopy(0, 0, returndatasize())

            if success {
                return(0, returndatasize())
            }

            revert(0, returndatasize())
        }
    }
}

/// @notice ERC1822
/// @author phaze (https://github.com/0xPhaze/UDS)
abstract contract ERC1822 {
    function proxiableUUID() external view virtual returns (bytes32);
}

File 6 of 7 : OwnableUDS.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

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

// ------------- storage

bytes32 constant DIAMOND_STORAGE_OWNABLE = keccak256("diamond.storage.ownable");

function s() pure returns (OwnableDS storage diamondStorage) {
    bytes32 slot = DIAMOND_STORAGE_OWNABLE;
    assembly { diamondStorage.slot := slot } // prettier-ignore
}

struct OwnableDS {
    address owner;
}

// ------------- errors

error CallerNotOwner();

/// @title Ownable (Upgradeable Diamond Storage)
/// @author phaze (https://github.com/0xPhaze/UDS)
/// @dev Requires `__Ownable_init` to be called in proxy
abstract contract OwnableUDS is Initializable {
    event OwnerChanged(address oldOwner, address newOwner);

    function __Ownable_init() internal initializer {
        s().owner = msg.sender;
    }

    /* ------------- external ------------- */

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

    function transferOwnership(address newOwner) external onlyOwner {
        s().owner = newOwner;

        emit OwnerChanged(msg.sender, newOwner);
    }

    /* ------------- modifier ------------- */

    modifier onlyOwner() {
        if (msg.sender != s().owner) revert CallerNotOwner();
        _;
    }
}

File 7 of 7 : Initializable.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import {s as erc1967ds} from "../proxy/ERC1967Proxy.sol";

// ------------- errors

error ProxyCallRequired();
error AlreadyInitialized();

/// @title Initializable
/// @author phaze (https://github.com/0xPhaze/UDS)
/// @dev functions using the `initializer` modifier are only callable during proxy deployment
/// @dev functions using the `reinitializer` modifier are only callable through a proxy
/// @dev and only before a proxy upgrade migration has completed
/// @dev (only when `upgradeToAndCall`'s `initCalldata` is being executed)
/// @dev allows re-initialization during upgrades
abstract contract Initializable {
    address private immutable __implementation = address(this);

    /* ------------- modifier ------------- */

    modifier initializer() {
        if (address(this).code.length != 0) revert AlreadyInitialized();
        _;
    }

    modifier reinitializer() {
        if (address(this) == __implementation) revert ProxyCallRequired();
        if (erc1967ds().implementation == __implementation) revert AlreadyInitialized();
        _;
    }
}

Settings
{
  "remappings": [
    "ArrayUtils/=lib/ArrayUtils/src/",
    "CRFTD/=src/",
    "UDS/=lib/UDS/src/",
    "ds-test/=lib/solmate/lib/ds-test/src/",
    "f-utils/=lib/f-utils/src/",
    "forge-std/=lib/forge-std/src/",
    "script/=script/",
    "solmate/=lib/solmate/src/",
    "src/=src/",
    "test/=test/",
    "src/=src/",
    "test/=test/",
    "script/=script/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 100000
  },
  "metadata": {
    "bytecodeHash": "ipfs"
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "london",
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"registryFee_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"IncorrectValue","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"proxy","type":"address"}],"name":"ProxyDeployed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"Registered","type":"event"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bytes","name":"initCalldata","type":"bytes"},{"internalType":"bytes[]","name":"calls","type":"bytes[]"}],"name":"deployProxy","outputs":[{"internalType":"address","name":"proxy","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract ERC721","name":"token","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"recoverNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ERC20","name":"token","type":"address"}],"name":"recoverToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"register","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"registryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"setImplementationAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fees","type":"uint256"}],"name":"setRegistryFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b506040516112b73803806112b783398101604081905261002f91610078565b600080546001600160a01b031916339081178255604051909182917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d76908290a350600155610091565b60006020828403121561008a57600080fd5b5051919050565b611217806100a06000396000f3fe608060405260043610620000bf5760003560e01c8063997b130b1162000071578063be8fd2a91162000054578063be8fd2a914620001e4578063c33949c41462000209578063e086e5ec146200022e57600080fd5b8063997b130b146200019a5780639be65a6014620001bf57600080fd5b80631f750e2e11620000a65780631f750e2e14620000f55780633319a00d14620001205780638da5cb5b146200014557600080fd5b806313af403514620000c45780631aa3a00814620000eb575b600080fd5b348015620000d157600080fd5b50620000e9620000e336600462000aca565b62000246565b005b620000e96200033d565b3480156200010257600080fd5b506200010d60015481565b6040519081526020015b60405180910390f35b3480156200012d57600080fd5b50620000e96200013f36600462000af1565b620003b3565b3480156200015257600080fd5b50600054620001749073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200162000117565b348015620001a757600080fd5b50620000e9620001b936600462000b20565b620004c8565b348015620001cc57600080fd5b50620000e9620001de36600462000aca565b62000550565b348015620001f157600080fd5b50620001746200020336600462000b3a565b62000709565b3480156200021657600080fd5b50620000e96200022836600462000c32565b620008e2565b3480156200023b57600080fd5b50620000e9620009bb565b60005473ffffffffffffffffffffffffffffffffffffffff163314620002cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d769190a350565b600154341462000379576040517fd2ade55600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015460405190815233907f6f3bf3fa84e4763a43b3d23f9d79be242d6d5c834941ff4c1111b67469e1150c9060200160405180910390a2565b60005473ffffffffffffffffffffffffffffffffffffffff16331462000436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401620002c4565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081523060048201523360248201526044810182905273ffffffffffffffffffffffffffffffffffffffff8316906323b872dd90606401600060405180830381600087803b158015620004ab57600080fd5b505af1158015620004c0573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146200054b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401620002c4565b600155565b60005473ffffffffffffffffffffffffffffffffffffffff163314620005d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401620002c4565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff82169063a9059cbb90339083906370a0823190602401602060405180830381865afa15801562000648573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200066e919062000c70565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af1158015620006df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000705919062000c8a565b5050565b60008585856040516200071c9062000a99565b6200072a9392919062000caa565b604051809103906000f08015801562000747573d6000803e3d6000fd5b50905060005b82811015620008145760008273ffffffffffffffffffffffffffffffffffffffff1685858481811062000784576200078462000d14565b905060200281019062000798919062000d43565b604051620007a892919062000db2565b6000604051808303816000865af19150503d8060008114620007e7576040519150601f19603f3d011682016040523d82523d6000602084013e620007ec565b606091505b505090508062000800573d6000803e3d6000fd5b506200080c8162000dc2565b90506200074d565b506040517ff2fde38b00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff82169063f2fde38b90602401600060405180830381600087803b1580156200087d57600080fd5b505af115801562000892573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692503391507f3d2489efb661e8b1c3679865db649ca1de61d76a71184a1234de2e55786a6aad90600090a395945050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331462000965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401620002c4565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260026020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff16331462000a3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401620002c4565b604051600090339047908381818185875af1925050503d806000811462000a82576040519150601f19603f3d011682016040523d82523d6000602084013e62000a87565b606091505b505090508062000a9657600080fd5b50565b6103bf8062000e2383390190565b73ffffffffffffffffffffffffffffffffffffffff8116811462000a9657600080fd5b60006020828403121562000add57600080fd5b813562000aea8162000aa7565b9392505050565b6000806040838503121562000b0557600080fd5b823562000b128162000aa7565b946020939093013593505050565b60006020828403121562000b3357600080fd5b5035919050565b60008060008060006060868803121562000b5357600080fd5b853562000b608162000aa7565b9450602086013567ffffffffffffffff8082111562000b7e57600080fd5b818801915088601f83011262000b9357600080fd5b81358181111562000ba357600080fd5b89602082850101111562000bb657600080fd5b60208301965080955050604088013591508082111562000bd557600080fd5b818801915088601f83011262000bea57600080fd5b81358181111562000bfa57600080fd5b8960208260051b850101111562000c1057600080fd5b9699959850939650602001949392505050565b801515811462000a9657600080fd5b6000806040838503121562000c4657600080fd5b823562000c538162000aa7565b9150602083013562000c658162000c23565b809150509250929050565b60006020828403121562000c8357600080fd5b5051919050565b60006020828403121562000c9d57600080fd5b815162000aea8162000c23565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811262000d7957600080fd5b83018035915067ffffffffffffffff82111562000d9557600080fd5b60200191503681900382131562000dab57600080fd5b9250929050565b8183823760009101908152919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362000e1b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fe60806040526040516103bf3803806103bf83398101604081905261002291610210565b61002c8282610033565b5050610313565b816001600160a01b03163b60000361005e576040516309ee12d560e01b815260040160405180910390fd5b60008051602061039f83398151915260001b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100d291906102de565b146100f0576040516303ed501d60e01b815260040160405180910390fd5b805115610166576000826001600160a01b03168260405161011191906102f7565b600060405180830381855af49150503d806000811461014c576040519150601f19603f3d011682016040523d82523d6000602084013e610151565b606091505b5050905080610164573d6000803e3d6000fd5b505b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25060008051602061039f83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101fb5781810151838201526020016101e3565b8381111561020a576000848401525b50505050565b6000806040838503121561022357600080fd5b82516001600160a01b038116811461023a57600080fd5b60208401519092506001600160401b038082111561025757600080fd5b818501915085601f83011261026b57600080fd5b81518181111561027d5761027d6101ca565b604051601f8201601f19908116603f011681019083821181831017156102a5576102a56101ca565b816040528281528860208487010111156102be57600080fd5b6102cf8360208301602088016101e0565b80955050505050509250929050565b6000602082840312156102f057600080fd5b5051919050565b600082516103098184602087016101e0565b9190910192915050565b607e806103216000396000f3fe608060405236600080376000803660007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545af43d6000803e80156042573d6000f35b503d6000fdfea2646970667358221220ec51e6f089dc36f665bf49468942777e9e5d3f523b0fa7351c1e8a5a1520085164736f6c634300080f0033360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220ad734ecad606b0393c036b92edd0b038a1bfc2975598c8969f796cd4dccb226c64736f6c634300080f0033000000000000000000000000000000000000000000000000016345785d8a0000

Deployed Bytecode

0x608060405260043610620000bf5760003560e01c8063997b130b1162000071578063be8fd2a91162000054578063be8fd2a914620001e4578063c33949c41462000209578063e086e5ec146200022e57600080fd5b8063997b130b146200019a5780639be65a6014620001bf57600080fd5b80631f750e2e11620000a65780631f750e2e14620000f55780633319a00d14620001205780638da5cb5b146200014557600080fd5b806313af403514620000c45780631aa3a00814620000eb575b600080fd5b348015620000d157600080fd5b50620000e9620000e336600462000aca565b62000246565b005b620000e96200033d565b3480156200010257600080fd5b506200010d60015481565b6040519081526020015b60405180910390f35b3480156200012d57600080fd5b50620000e96200013f36600462000af1565b620003b3565b3480156200015257600080fd5b50600054620001749073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200162000117565b348015620001a757600080fd5b50620000e9620001b936600462000b20565b620004c8565b348015620001cc57600080fd5b50620000e9620001de36600462000aca565b62000550565b348015620001f157600080fd5b50620001746200020336600462000b3a565b62000709565b3480156200021657600080fd5b50620000e96200022836600462000c32565b620008e2565b3480156200023b57600080fd5b50620000e9620009bb565b60005473ffffffffffffffffffffffffffffffffffffffff163314620002cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064015b60405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d769190a350565b600154341462000379576040517fd2ade55600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015460405190815233907f6f3bf3fa84e4763a43b3d23f9d79be242d6d5c834941ff4c1111b67469e1150c9060200160405180910390a2565b60005473ffffffffffffffffffffffffffffffffffffffff16331462000436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401620002c4565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081523060048201523360248201526044810182905273ffffffffffffffffffffffffffffffffffffffff8316906323b872dd90606401600060405180830381600087803b158015620004ab57600080fd5b505af1158015620004c0573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146200054b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401620002c4565b600155565b60005473ffffffffffffffffffffffffffffffffffffffff163314620005d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401620002c4565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff82169063a9059cbb90339083906370a0823190602401602060405180830381865afa15801562000648573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200066e919062000c70565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af1158015620006df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000705919062000c8a565b5050565b60008585856040516200071c9062000a99565b6200072a9392919062000caa565b604051809103906000f08015801562000747573d6000803e3d6000fd5b50905060005b82811015620008145760008273ffffffffffffffffffffffffffffffffffffffff1685858481811062000784576200078462000d14565b905060200281019062000798919062000d43565b604051620007a892919062000db2565b6000604051808303816000865af19150503d8060008114620007e7576040519150601f19603f3d011682016040523d82523d6000602084013e620007ec565b606091505b505090508062000800573d6000803e3d6000fd5b506200080c8162000dc2565b90506200074d565b506040517ff2fde38b00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff82169063f2fde38b90602401600060405180830381600087803b1580156200087d57600080fd5b505af115801562000892573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff841692503391507f3d2489efb661e8b1c3679865db649ca1de61d76a71184a1234de2e55786a6aad90600090a395945050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331462000965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401620002c4565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260026020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff16331462000a3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401620002c4565b604051600090339047908381818185875af1925050503d806000811462000a82576040519150601f19603f3d011682016040523d82523d6000602084013e62000a87565b606091505b505090508062000a9657600080fd5b50565b6103bf8062000e2383390190565b73ffffffffffffffffffffffffffffffffffffffff8116811462000a9657600080fd5b60006020828403121562000add57600080fd5b813562000aea8162000aa7565b9392505050565b6000806040838503121562000b0557600080fd5b823562000b128162000aa7565b946020939093013593505050565b60006020828403121562000b3357600080fd5b5035919050565b60008060008060006060868803121562000b5357600080fd5b853562000b608162000aa7565b9450602086013567ffffffffffffffff8082111562000b7e57600080fd5b818801915088601f83011262000b9357600080fd5b81358181111562000ba357600080fd5b89602082850101111562000bb657600080fd5b60208301965080955050604088013591508082111562000bd557600080fd5b818801915088601f83011262000bea57600080fd5b81358181111562000bfa57600080fd5b8960208260051b850101111562000c1057600080fd5b9699959850939650602001949392505050565b801515811462000a9657600080fd5b6000806040838503121562000c4657600080fd5b823562000c538162000aa7565b9150602083013562000c658162000c23565b809150509250929050565b60006020828403121562000c8357600080fd5b5051919050565b60006020828403121562000c9d57600080fd5b815162000aea8162000c23565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301376000818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811262000d7957600080fd5b83018035915067ffffffffffffffff82111562000d9557600080fd5b60200191503681900382131562000dab57600080fd5b9250929050565b8183823760009101908152919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362000e1b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fe60806040526040516103bf3803806103bf83398101604081905261002291610210565b61002c8282610033565b5050610313565b816001600160a01b03163b60000361005e576040516309ee12d560e01b815260040160405180910390fd5b60008051602061039f83398151915260001b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100d291906102de565b146100f0576040516303ed501d60e01b815260040160405180910390fd5b805115610166576000826001600160a01b03168260405161011191906102f7565b600060405180830381855af49150503d806000811461014c576040519150601f19603f3d011682016040523d82523d6000602084013e610151565b606091505b5050905080610164573d6000803e3d6000fd5b505b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25060008051602061039f83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101fb5781810151838201526020016101e3565b8381111561020a576000848401525b50505050565b6000806040838503121561022357600080fd5b82516001600160a01b038116811461023a57600080fd5b60208401519092506001600160401b038082111561025757600080fd5b818501915085601f83011261026b57600080fd5b81518181111561027d5761027d6101ca565b604051601f8201601f19908116603f011681019083821181831017156102a5576102a56101ca565b816040528281528860208487010111156102be57600080fd5b6102cf8360208301602088016101e0565b80955050505050509250929050565b6000602082840312156102f057600080fd5b5051919050565b600082516103098184602087016101e0565b9190910192915050565b607e806103216000396000f3fe608060405236600080376000803660007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545af43d6000803e80156042573d6000f35b503d6000fdfea2646970667358221220ec51e6f089dc36f665bf49468942777e9e5d3f523b0fa7351c1e8a5a1520085164736f6c634300080f0033360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220ad734ecad606b0393c036b92edd0b038a1bfc2975598c8969f796cd4dccb226c64736f6c634300080f0033

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

000000000000000000000000000000000000000000000000016345785d8a0000

-----Decoded View---------------
Arg [0] : registryFee_ (uint256): 100000000000000000

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000016345785d8a0000


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.