More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 52 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw ETH | 16835912 | 680 days ago | IN | 0 ETH | 0.00095591 | ||||
Register | 16570602 | 717 days ago | IN | 0.1 ETH | 0.00069083 | ||||
Recover Token | 16543472 | 721 days ago | IN | 0 ETH | 0.0023321 | ||||
Withdraw ETH | 16543468 | 721 days ago | IN | 0 ETH | 0.00109316 | ||||
Register | 16530610 | 723 days ago | IN | 0.1 ETH | 0.00044434 | ||||
Register | 16522523 | 724 days ago | IN | 0.1 ETH | 0.0007176 | ||||
Register | 16409541 | 740 days ago | IN | 0.1 ETH | 0.00039622 | ||||
Register | 16372300 | 745 days ago | IN | 0.1 ETH | 0.00075535 | ||||
Register | 16349302 | 748 days ago | IN | 0.1 ETH | 0.00059289 | ||||
Register | 16321020 | 752 days ago | IN | 0.1 ETH | 0.00050426 | ||||
Register | 16316380 | 753 days ago | IN | 0.1 ETH | 0.00036647 | ||||
Register | 16157652 | 775 days ago | IN | 0.1 ETH | 0.000344 | ||||
Register | 16134334 | 778 days ago | IN | 0.1 ETH | 0.00042312 | ||||
Register | 16076867 | 786 days ago | IN | 0.1 ETH | 0.00035371 | ||||
Register | 16070687 | 787 days ago | IN | 0.1 ETH | 0.00033906 | ||||
Register | 15977665 | 800 days ago | IN | 0.1 ETH | 0.0003988 | ||||
Register | 15971311 | 801 days ago | IN | 0.1 ETH | 0.00051372 | ||||
Register | 15948099 | 804 days ago | IN | 0.1 ETH | 0.00078962 | ||||
Register | 15925364 | 807 days ago | IN | 0.1 ETH | 0.00032245 | ||||
Deploy Proxy | 15912692 | 809 days ago | IN | 0 ETH | 0.00514041 | ||||
Register | 15895875 | 811 days ago | IN | 0.1 ETH | 0.00199136 | ||||
Register | 15871913 | 815 days ago | IN | 0.1 ETH | 0.00029119 | ||||
Deploy Proxy | 15841171 | 819 days ago | IN | 0 ETH | 0.00674645 | ||||
Register | 15834142 | 820 days ago | IN | 0.1 ETH | 0.0008337 | ||||
Register | 15831585 | 820 days ago | IN | 0.1 ETH | 0.00036652 |
Latest 18 internal transactions
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
16835912 | 680 days ago | 0.1 ETH | ||||
16543468 | 721 days ago | 2.8 ETH | ||||
15912692 | 809 days ago | Contract Creation | 0 ETH | |||
15841171 | 819 days ago | Contract Creation | 0 ETH | |||
15809370 | 824 days ago | Contract Creation | 0 ETH | |||
15743012 | 833 days ago | Contract Creation | 0 ETH | |||
15684375 | 841 days ago | Contract Creation | 0 ETH | |||
15640841 | 847 days ago | Contract Creation | 0 ETH | |||
15590529 | 854 days ago | Contract Creation | 0 ETH | |||
15525724 | 864 days ago | Contract Creation | 0 ETH | |||
15517263 | 865 days ago | Contract Creation | 0 ETH | |||
15498412 | 868 days ago | Contract Creation | 0 ETH | |||
15408569 | 882 days ago | Contract Creation | 0 ETH | |||
15341299 | 893 days ago | Contract Creation | 0 ETH | |||
15336949 | 894 days ago | Contract Creation | 0 ETH | |||
15325447 | 896 days ago | Contract Creation | 0 ETH | |||
15322861 | 896 days ago | Contract Creation | 0 ETH | |||
15317198 | 897 days ago | Contract Creation | 0 ETH |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
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
Contract Source Code (Solidity Standard Json-Input format)
// 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); } }
// 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); } }
// 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); } }
// 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; } }
// 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); }
// 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(); _; } }
// 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(); _; } }
{ "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
- No Contract Security Audit Submitted- Submit Audit Here
[{"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"}]
Contract Creation Code
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
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.