Overview
S Balance
S Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 13 from a total of 13 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Add Implementati... | 14470850 | 7 days ago | IN | 0 S | 0.00310285 | ||||
Add Implementati... | 14458645 | 7 days ago | IN | 0 S | 0.0061855 | ||||
Add Implementati... | 7519934 | 41 days ago | IN | 0 S | 0.00311165 | ||||
Add Implementati... | 7460795 | 42 days ago | IN | 0 S | 0.0061926 | ||||
Add Implementati... | 7454928 | 42 days ago | IN | 0 S | 0.0061943 | ||||
Add Implementati... | 7058141 | 45 days ago | IN | 0 S | 0.0061921 | ||||
Add Implementati... | 6792773 | 47 days ago | IN | 0 S | 0.0061921 | ||||
Add Implementati... | 5713030 | 56 days ago | IN | 0 S | 0.0061822 | ||||
Add Implementati... | 5631197 | 57 days ago | IN | 0 S | 0.0064245 | ||||
Add Implementati... | 5631197 | 57 days ago | IN | 0 S | 0.0064108 | ||||
Add Implementati... | 5631197 | 57 days ago | IN | 0 S | 0.00641675 | ||||
Add Implementati... | 5631197 | 57 days ago | IN | 0 S | 0.0064108 | ||||
Add Implementati... | 5631197 | 57 days ago | IN | 0 S | 0.00730745 |
Latest 25 internal transactions (View All)
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:
CoboFactory
Compiler Version
v0.8.26+commit.8a97fa7a
Optimization Enabled:
Yes with 200 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: LGPL-3.0-only pragma solidity ^0.8.19; import "@openzeppelin/contracts/proxy/Clones.sol"; import "./base/BaseOwnable.sol"; /// @title CoboFactory - A contract factory referenced by bytes32 name. /// @author Cobo Safe Dev Team https://www.cobo.com/ /// @notice Mostly used to manage proxy logic contract. But also ok to manage non-proxy contracts. /// @dev Contracts to add should extend IVersion interface and implement the `NAME()` function. contract CoboFactory is BaseOwnable { bytes32 public constant NAME = "CoboFactory"; uint256 public constant VERSION = 1; bytes32[] public names; // The last one added. mapping(bytes32 => address) public latestImplementations; // Name => All added contracts. mapping(bytes32 => address[]) public implementations; // deployer => name => proxy contract list // This is expensive. Query ProxyCreated event in SubGraph is a better solution. mapping(address => mapping(bytes32 => address[])) public records; event ProxyCreated(address indexed deployer, bytes32 indexed name, address indexed implementation, address proxy); event ImplementationAdded(bytes32 indexed name, address indexed implementation); constructor(address _owner) BaseOwnable(_owner) {} function _getLatestImplStrict(bytes32 name) internal view returns (address impl) { impl = getLatestImplementation(name); require(impl != address(0), "No implementation"); } /// View functions. function getLatestImplementation(bytes32 name) public view returns (address impl) { impl = latestImplementations[name]; } function getAllImplementations(bytes32 name) external view returns (address[] memory impls) { impls = implementations[name]; } function getAllNames() external view returns (bytes32[] memory _names) { _names = names; } /// @dev For etherscan view. function getNameString(uint i) public view returns (string memory _name) { _name = string(abi.encodePacked(names[i])); } function getAllNameStrings() external view returns (string[] memory _names) { _names = new string[](names.length); for (uint i = 0; i < names.length; ++i) { _names[i] = getNameString(i); } } function getLastRecord(address deployer, bytes32 name) external view returns (address proxy) { address[] storage record = records[deployer][name]; if (record.length == 0) return address(0); proxy = record[record.length - 1]; } function getRecordSize(address deployer, bytes32 name) external view returns (uint256 size) { address[] storage record = records[deployer][name]; size = record.length; } function getAllRecord(address deployer, bytes32 name) external view returns (address[] memory proxies) { return records[deployer][name]; } function getRecords( address deployer, bytes32 name, uint256 start, uint256 end ) external view returns (address[] memory proxies) { address[] storage record = records[deployer][name]; uint256 size = record.length; if (end > size) end = size; require(end > start, "end > start"); proxies = new address[](end - start); for (uint i = start; i < end; ++i) { proxies[i - start] = record[i]; } } function getCreate2Address(address creator, bytes32 name, bytes32 salt) external view returns (address instance) { address implementation = getLatestImplementation(name); if (implementation == address(0)) return address(0); salt = keccak256(abi.encode(creator, salt)); return Clones.predictDeterministicAddress(implementation, salt); } /// External functions. /// @dev Create EIP 1167 proxy. function create(bytes32 name) public returns (address instance) { address implementation = _getLatestImplStrict(name); instance = Clones.clone(implementation); emit ProxyCreated(msg.sender, name, implementation, instance); } /// @dev Create EIP 1167 proxy with create2. function create2(bytes32 name, bytes32 salt) public returns (address instance) { address implementation = _getLatestImplStrict(name); // Add msg.sender to the salt so no address collissions will occur between different users. salt = keccak256(abi.encode(msg.sender, salt)); instance = Clones.cloneDeterministic(implementation, salt); emit ProxyCreated(msg.sender, name, implementation, instance); } /// @notice Create and record the creation in the contract. function createAndRecord(bytes32 name) external returns (address instance) { instance = create(name); records[msg.sender][name].push(instance); } function create2AndRecord(bytes32 name, bytes32 salt) public returns (address instance) { instance = create2(name, salt); records[msg.sender][name].push(instance); } /// @notice Register a logic contract to the factory. Only the owner is allowed. function addImplementation(address impl) external onlyOwner { bytes32 name = IVersion(impl).NAME(); // If new name found, add to `names`. if (latestImplementations[name] == address(0)) { names.push(name); } latestImplementations[name] = impl; implementations[name].push(impl); emit ImplementationAdded(name, impl); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (proxy/Clones.sol) pragma solidity ^0.8.20; /** * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for * deploying minimal proxy contracts, also known as "clones". * * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies * > a minimal bytecode implementation that delegates all calls to a known, fixed address. * * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2` * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the * deterministic method. */ library Clones { /** * @dev A clone instance deployment failed. */ error ERC1167FailedCreateClone(); /** * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`. * * This function uses the create opcode, which should never revert. */ function clone(address implementation) internal returns (address instance) { /// @solidity memory-safe-assembly assembly { // Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes // of the `implementation` address with the bytecode before the address. mstore(0x00, or(shr(0xe8, shl(0x60, implementation)), 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000)) // Packs the remaining 17 bytes of `implementation` with the bytecode after the address. mstore(0x20, or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3)) instance := create(0, 0x09, 0x37) } if (instance == address(0)) { revert ERC1167FailedCreateClone(); } } /** * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`. * * This function uses the create2 opcode and a `salt` to deterministically deploy * the clone. Using the same `implementation` and `salt` multiple time will revert, since * the clones cannot be deployed twice at the same address. */ function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) { /// @solidity memory-safe-assembly assembly { // Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes // of the `implementation` address with the bytecode before the address. mstore(0x00, or(shr(0xe8, shl(0x60, implementation)), 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000)) // Packs the remaining 17 bytes of `implementation` with the bytecode after the address. mstore(0x20, or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3)) instance := create2(0, 0x09, 0x37, salt) } if (instance == address(0)) { revert ERC1167FailedCreateClone(); } } /** * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}. */ function predictDeterministicAddress( address implementation, bytes32 salt, address deployer ) internal pure returns (address predicted) { /// @solidity memory-safe-assembly assembly { let ptr := mload(0x40) mstore(add(ptr, 0x38), deployer) mstore(add(ptr, 0x24), 0x5af43d82803e903d91602b57fd5bf3ff) mstore(add(ptr, 0x14), implementation) mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73) mstore(add(ptr, 0x58), salt) mstore(add(ptr, 0x78), keccak256(add(ptr, 0x0c), 0x37)) predicted := keccak256(add(ptr, 0x43), 0x55) } } /** * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}. */ function predictDeterministicAddress( address implementation, bytes32 salt ) internal view returns (address predicted) { return predictDeterministicAddress(implementation, salt, address(this)); } }
// SPDX-License-Identifier: LGPL-3.0-only pragma solidity ^0.8.19; import "../Errors.sol"; import "./BaseVersion.sol"; /// @title BaseOwnable - Simple ownership access control contract. /// @author Cobo Safe Dev Team https://www.cobo.com/ /// @dev Can be used in both proxy and non-proxy mode. abstract contract BaseOwnable is BaseVersion { address public owner; address public pendingOwner; bool private initialized = false; event PendingOwnerSet(address indexed to); event NewOwnerSet(address indexed owner); modifier onlyOwner() { require(owner == msg.sender, Errors.CALLER_IS_NOT_OWNER); _; } /// @dev `owner` is set by argument, thus the owner can any address. /// When used in non-proxy mode, `initialize` can not be called /// after deployment. constructor(address _owner) { initialize(_owner); } /// @dev When used in proxy mode, `initialize` can be called by anyone /// to claim the ownership. /// This function can be called only once. function initialize(address _owner) public { require(!initialized, "Already initialized"); _setOwner(_owner); initialized = true; } /// @notice User should ensure the corrent owner address set, or the /// ownership may be transferred to blackhole. It is recommended to /// take a safer way with setPendingOwner() + acceptOwner(). function transferOwnership(address newOwner) external onlyOwner { require(newOwner != address(0), "New Owner is zero"); _setOwner(newOwner); } /// @notice The original owner calls `setPendingOwner(newOwner)` and the new /// owner calls `acceptOwner()` to take the ownership. function setPendingOwner(address to) external onlyOwner { pendingOwner = to; emit PendingOwnerSet(pendingOwner); } function acceptOwner() external { require(msg.sender == pendingOwner); _setOwner(pendingOwner); } /// @notice Make the contract immutable. function renounceOwnership() external onlyOwner { _setOwner(address(0)); } // Internal functions /// @dev Clear pendingOwner to prevent from reclaiming the ownership. function _setOwner(address _owner) internal { owner = _owner; pendingOwner = address(0); emit NewOwnerSet(owner); } }
// SPDX-License-Identifier: LGPL-3.0-only pragma solidity ^0.8.19; /// @dev Common errors. This helps reducing the contract size. library Errors { // "E1"; // Call/Static-call failed. string constant CALL_FAILED = "E2"; // Argument's type not supported in View Variant. string constant INVALID_VIEW_ARG_SOL_TYPE = "E3"; // Invalid length for variant raw data. string constant INVALID_VARIANT_RAW_DATA = "E4"; // "E5"; // Invalid variant type. string constant INVALID_VAR_TYPE = "E6"; // Rule not exists string constant RULE_NOT_EXISTS = "E7"; // Variant name not found. string constant VAR_NAME_NOT_FOUND = "E8"; // Rule: v1/v2 solType mismatch string constant SOL_TYPE_MISMATCH = "E9"; // "E10"; // Invalid rule OP. string constant INVALID_RULE_OP = "E11"; // "E12"; // "E13"; // "E14"; // "E15"; // "E16"; // "E17"; // "E18"; // "E19"; // "E20"; // checkCmpOp: OP not support string constant CMP_OP_NOT_SUPPORT = "E21"; // checkBySolType: Invalid op for bool string constant INVALID_BOOL_OP = "E22"; // checkBySolType: Invalid op string constant CHECK_INVALID_OP = "E23"; // Invalid solidity type. string constant INVALID_SOL_TYPE = "E24"; // computeBySolType: invalid vm op string constant INVALID_VM_BOOL_OP = "E25"; // computeBySolType: invalid vm arith op string constant INVALID_VM_ARITH_OP = "E26"; // onlyCaller: Invalid caller string constant INVALID_CALLER = "E27"; // "E28"; // Side-effect is not allowed here. string constant SIDE_EFFECT_NOT_ALLOWED = "E29"; // Invalid variant count for the rule op. string constant INVALID_VAR_COUNT = "E30"; // extractCallData: Invalid op. string constant INVALID_EXTRACTOR_OP = "E31"; // extractCallData: Invalid array index. string constant INVALID_ARRAY_INDEX = "E32"; // extractCallData: No extract op. string constant NO_EXTRACT_OP = "E33"; // extractCallData: No extract path. string constant NO_EXTRACT_PATH = "E34"; // BaseOwnable: caller is not owner string constant CALLER_IS_NOT_OWNER = "E35"; // BaseOwnable: Already initialized string constant ALREADY_INITIALIZED = "E36"; // "E37"; // "E38"; // BaseACL: ACL check method should not return anything. string constant ACL_FUNC_RETURNS_NON_EMPTY = "E39"; // "E40"; // BaseAccount: Invalid delegate. string constant INVALID_DELEGATE = "E41"; // RootAuthorizer: delegateCallAuthorizer not set string constant DELEGATE_CALL_AUTH_NOT_SET = "E42"; // RootAuthorizer: callAuthorizer not set. string constant CALL_AUTH_NOT_SET = "E43"; // BaseAccount: Authorizer not set. string constant AUTHORIZER_NOT_SET = "E44"; // BaseAccount: Invalid authorizer flag. string constant INVALID_AUTHORIZER_FLAG = "E45"; // BaseAuthorizer: Authorizer paused. string constant AUTHORIZER_PAUSED = "E46"; // Authorizer set: Invalid hint. string constant INVALID_HINT = "E47"; // Authorizer set: All auth deny. string constant ALL_AUTH_FAILED = "E48"; // BaseACL: Method not allow. string constant METHOD_NOT_ALLOW = "E49"; // AuthorizerUnionSet: Invalid hint collected. string constant INVALID_HINT_COLLECTED = "E50"; // AuthorizerSet: Empty auth set string constant EMPTY_AUTH_SET = "E51"; // AuthorizerSet: hint not implement. string constant HINT_NOT_IMPLEMENT = "E52"; // RoleAuthorizer: Empty role set string constant EMPTY_ROLE_SET = "E53"; // RoleAuthorizer: No auth for the role string constant NO_AUTH_FOR_THE_ROLE = "E54"; // BaseACL: No in contract white list. string constant NOT_IN_CONTRACT_LIST = "E55"; // BaseACL: Same process not allowed to install twice. string constant SAME_PROCESS_TWICE = "E56"; // BaseAuthorizer: Account not set (then can not find roleManger) string constant ACCOUNT_NOT_SET = "E57"; // BaseAuthorizer: roleManger not set string constant ROLE_MANAGER_NOT_SET = "E58"; }
// SPDX-License-Identifier: LGPL-3.0-only pragma solidity ^0.8.19; import "../../interfaces/IVersion.sol"; /// @title BaseVersion - Provides version information /// @author Cobo Safe Dev Team https://www.cobo.com/ /// @dev /// Implement NAME() and VERSION() methods according to IVersion interface. /// /// Or just: /// bytes32 public constant NAME = "<Your contract name>"; /// uint256 public constant VERSION = <Your contract version>; /// /// Change the NAME when writing new kind of contract. /// Change the VERSION when upgrading existing contract. abstract contract BaseVersion is IVersion { /// @dev Convert to `string` which looks prettier on Etherscan viewer. function _NAME() external view virtual returns (string memory) { return string(abi.encodePacked(this.NAME())); } }
// SPDX-License-Identifier: LGPL-3.0-only pragma solidity ^0.8.19; interface IVersion { function NAME() external view returns (bytes32 name); function VERSION() external view returns (uint256 version); }
{ "remappings": [ "openzeppelin/=lib/openzeppelin-contracts/", "forge-std/=lib/forge-std/src/", "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", "ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/", "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/", "openzeppelin-contracts/=lib/openzeppelin-contracts/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "cancun", "viaIR": true, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ERC1167FailedCreateClone","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"name","type":"bytes32"},{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"ImplementationAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"NewOwnerSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"PendingOwnerSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"deployer","type":"address"},{"indexed":true,"internalType":"bytes32","name":"name","type":"bytes32"},{"indexed":true,"internalType":"address","name":"implementation","type":"address"},{"indexed":false,"internalType":"address","name":"proxy","type":"address"}],"name":"ProxyCreated","type":"event"},{"inputs":[],"name":"NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VERSION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_NAME","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"impl","type":"address"}],"name":"addImplementation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"name","type":"bytes32"}],"name":"create","outputs":[{"internalType":"address","name":"instance","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"name","type":"bytes32"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"create2","outputs":[{"internalType":"address","name":"instance","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"name","type":"bytes32"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"create2AndRecord","outputs":[{"internalType":"address","name":"instance","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"name","type":"bytes32"}],"name":"createAndRecord","outputs":[{"internalType":"address","name":"instance","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"name","type":"bytes32"}],"name":"getAllImplementations","outputs":[{"internalType":"address[]","name":"impls","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllNameStrings","outputs":[{"internalType":"string[]","name":"_names","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllNames","outputs":[{"internalType":"bytes32[]","name":"_names","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"deployer","type":"address"},{"internalType":"bytes32","name":"name","type":"bytes32"}],"name":"getAllRecord","outputs":[{"internalType":"address[]","name":"proxies","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"creator","type":"address"},{"internalType":"bytes32","name":"name","type":"bytes32"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"getCreate2Address","outputs":[{"internalType":"address","name":"instance","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"deployer","type":"address"},{"internalType":"bytes32","name":"name","type":"bytes32"}],"name":"getLastRecord","outputs":[{"internalType":"address","name":"proxy","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"name","type":"bytes32"}],"name":"getLatestImplementation","outputs":[{"internalType":"address","name":"impl","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"i","type":"uint256"}],"name":"getNameString","outputs":[{"internalType":"string","name":"_name","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"deployer","type":"address"},{"internalType":"bytes32","name":"name","type":"bytes32"}],"name":"getRecordSize","outputs":[{"internalType":"uint256","name":"size","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"deployer","type":"address"},{"internalType":"bytes32","name":"name","type":"bytes32"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"getRecords","outputs":[{"internalType":"address[]","name":"proxies","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"implementations","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"latestImplementations","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"names","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"records","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"setPendingOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60803460a957601f61124638819003918201601f19168301916001600160401b0383118484101760ad5780849260209460405283398101031260a957516001600160a01b0381169081900360a9576001545f80546001600160a01b0319168317815560405192907f038720101b9ced74445432ced46c7e5e4c80202669153dd67d226c66a0aa477b9080a26001600160a81b031916600160a01b1760015561118490816100c28239f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c80630383eddc14610c0657806308dbebf614610b6f578063271a799c14610a815780632c1b79d614610a3d578063300a62bc14610a1e5780633054b76e146109e757806344ab6680146109645780634622ab03146109af578063523d53241461099657806352b347aa14610964578063715018a6146108f45780637368a8ce146108d65780637662f1121461086c578063772fa9da146108335780638da5cb5b1461080c5780639815121314610785578063a3f4df7e1461075c578063c42069ec146106e7578063c4d66de814610668578063c516bd48146105ef578063c6e2a40014610488578063d9eac8b414610461578063dcebb2001461034a578063e30c397814610322578063ebbc4965146102f5578063eff95b3e146102b8578063f2fde38b1461022d578063fb825e5f146101775763ffa1ad7414610158575f80fd5b34610173575f36600319011261017357602060405160018152f35b5f80fd5b34610173575f366003190112610173576040518060206002549283815201809260025f527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace905f5b81811061021757505050816101d5910382610cf8565b604051918291602083019060208452518091526040830191905f5b8181106101fe575050500390f35b82518452859450602093840193909201916001016101f0565b82548452602090930192600192830192016101bf565b3461017357602036600319011261017357610246610c49565b5f54610265906001600160a01b031661025d610e8b565b903314610ebb565b6001600160a01b0381161561027f5761027d906110fc565b005b60405162461bcd60e51b81526020600482015260116024820152704e6577204f776e6572206973207a65726f60781b6044820152606490fd5b346101735760603660031901126101735760206102e36102d6610c49565b6044359060243590610ffa565b6040516001600160a01b039091168152f35b34610173575f366003190112610173576001546001600160a01b0316338190036101735761027d906110fc565b34610173575f366003190112610173576001546040516001600160a01b039091168152602090f35b3461017357608036600319011261017357610363610c49565b604435906064359060018060a01b03165f52600560205260405f206024355f5260205260405f20918254808311610459575b5080821115610426576103a88183610f85565b926103b284610d45565b936103c06040519586610cf8565b8085526103cf601f1991610d45565b01366020860137815b8381106103f157604051806103ed8782610cb6565b0390f35b806103fe60019284610c8b565b838060a01b0391549060031b1c1661041f6104198684610f85565b88610d5d565b52016103d8565b60405162461bcd60e51b815260206004820152600b60248201526a195b99080f881cdd185c9d60aa1b6044820152606490fd5b915083610395565b346101735760403660031901126101735760206102e361047f610c49565b60243590610fa6565b34610173576020366003190112610173576104a1610c49565b5f546104b8906001600160a01b031661025d610e8b565b6040516351fa6fbf60e11b81526001600160a01b03821691602082600481865afa9182156105e4575f926105b0575b505f828152600360205260409020546001600160a01b03161561055e575b61053890825f52600360205260405f20846001600160601b0360a01b825416179055825f52600460205260405f20610d71565b7fd58fcbf380bae0241f359d0f293ee1c39cdcc598a96dfa5339ecad21560b4db65f80a3005b60025490600160401b82101561059c576105818260016105389401600255610c5f565b81549060031b9085821b915f19901b19161790559050610505565b634e487b7160e01b5f52604160045260245ffd5b9091506020813d6020116105dc575b816105cc60209383610cf8565b81010312610173575190836104e7565b3d91506105bf565b6040513d5f823e3d90fd5b34610173576020366003190112610173576004355f52600460205260405f206040519081602082549182815201915f5260205f20905f5b818110610649576103ed8561063d81870382610cf8565b60405191829182610cb6565b82546001600160a01b0316845260209093019260019283019201610626565b3461017357602036600319011261017357610681610c49565b60ff60015460a01c166106ac57610697906110fc565b6001805460ff60a01b1916600160a01b179055005b60405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b3461017357602036600319011261017357610700610c49565b5f54610717906001600160a01b031661025d610e8b565b600180546001600160a01b0319166001600160a01b039290921691821790557f68f49b346b94582a8b5f9d10e3fe3365318fe8f191ff8dce7c59c6cad06b02f55f80a2005b34610173575f366003190112610173576040516a436f626f466163746f727960a81b8152602090f35b34610173576040366003190112610173576001600160a01b036107a6610c49565b165f52600560205260405f206024355f5260205260405f206040519081602082549182815201915f5260205f20905f5b8181106107ed576103ed8561063d81870382610cf8565b82546001600160a01b03168452602090930192600192830192016107d6565b34610173575f366003190112610173575f546040516001600160a01b039091168152602090f35b3461017357602061084e61084636610ca0565b819291610db2565b90335f526005835260405f20905f5282526102e38160405f20610d71565b3461017357606036600319011261017357610885610c49565b6044359060018060a01b03165f52600560205260405f206024355f5260205260405f208054821015610173576020916108bd91610c8b565b905460405160039290921b1c6001600160a01b03168152f35b346101735760203660031901126101735760206102e3600435610eeb565b34610173575f366003190112610173575f5461091b906001600160a01b031661025d610e8b565b6001600160601b0360a01b5f54165f556001600160601b0360a01b600154166001555f7f038720101b9ced74445432ced46c7e5e4c80202669153dd67d226c66a0aa477b8180a2005b34610173576020366003190112610173576004355f526003602052602060018060a01b0360405f205416604051908152f35b346101735760206102e36109a936610ca0565b90610db2565b3461017357602036600319011261017357600435600254811015610173576109d8602091610c5f565b90549060031b1c604051908152f35b34610173576040366003190112610173576024356004355f52600460205260405f208054821015610173576020916108bd91610c8b565b3461017357602036600319011261017357602060043561084e81610eeb565b34610173576040366003190112610173576001600160a01b03610a5e610c49565b165f52600560205260405f206024355f52602052602060405f2054604051908152f35b34610173575f36600319011261017357600254610a9d81610d45565b90610aab6040519283610cf8565b808252601f19610aba82610d45565b015f5b818110610b5e5750505f5b818110610b3657826040518091602082016020835281518091526040830190602060408260051b8601019301915f905b828210610b0757505050500390f35b91936001919395506020610b268192603f198a82030186528851610c25565b9601920192018594939192610af8565b80610b42600192610d1a565b610b4c8286610d5d565b52610b578185610d5d565b5001610ac8565b806060602080938701015201610abd565b34610173575f366003190112610173576040516351fa6fbf60e11b8152602081600481305afa80156105e4575f90610bd2575b6103ed9060405190602082015260208152610bbe604082610cf8565b604051918291602083526020830190610c25565b506020813d602011610bfe575b81610bec60209383610cf8565b81010312610173576103ed9051610ba2565b3d9150610bdf565b34610173576020366003190112610173576103ed610bbe600435610d1a565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361017357565b600254811015610c775760025f5260205f2001905f90565b634e487b7160e01b5f52603260045260245ffd5b8054821015610c77575f5260205f2001905f90565b6040906003190112610173576004359060243590565b60206040818301928281528451809452019201905f5b818110610cd95750505090565b82516001600160a01b0316845260209384019390920191600101610ccc565b90601f8019910116810190811067ffffffffffffffff82111761059c57604052565b610d2390610c5f565b90549060031b1c60405190602082015260208152610d42604082610cf8565b90565b67ffffffffffffffff811161059c5760051b60200190565b8051821015610c775760209160051b010190565b8054600160401b81101561059c57610d8e91600182018155610c8b565b81546001600160a01b0393841660039290921b91821b9390911b1916919091179055565b919091610dbe816110a3565b604080513360208201908152918101959095529093610dea81606081015b03601f198101835282610cf8565b519020763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff8560881c16175f526e5af43d82803e903d91602b57fd5bf38460781b17602052603760095ff56001600160a01b03811691908215610e7c57604051928352936001600160a01b03169133907f532cf4635ae9ff4e1e42ba14917e825d00f602f28297cc654fa3b414b911232b90602090a4565b6330be1a3d60e21b5f5260045ffd5b604051906040820182811067ffffffffffffffff82111761059c57604052600382526245333560e81b6020830152565b15610ec35750565b60405162461bcd60e51b815260206004820152908190610ee7906024830190610c25565b0390fd5b90610ef5826110a3565b91763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff8460881c16175f526e5af43d82803e903d91602b57fd5bf38360781b17602052603760095ff06001600160a01b03811691908215610e7c57604051928352936001600160a01b03169133907f532cf4635ae9ff4e1e42ba14917e825d00f602f28297cc654fa3b414b911232b90602090a4565b91908203918211610f9257565b634e487b7160e01b5f52601160045260245ffd5b60018060a01b03165f52600560205260405f20905f5260205260405f2080548015610ff4575f198101908111610f9257610fdf91610c8b565b905460039190911b1c6001600160a01b031690565b50505f90565b91905f52600360205260018060a01b0360405f205416801561109c57604080516001600160a01b039094166020850190815290840192909252605592604392906110478160608101610ddc565b519020604051913060388401526f5af43d82803e903d91602b57fd5bf3ff60248401526014830152733d602d80600a3d3981f3363d3d373d3d3d363d73825260588201526037600c8201206078820152012090565b5050505f90565b5f908152600360205260409020546001600160a01b03169081156110c357565b60405162461bcd60e51b815260206004820152601160248201527027379034b6b83632b6b2b73a30ba34b7b760791b6044820152606490fd5b60018060a01b0316806001600160601b0360a01b5f5416175f556001600160601b0360a01b600154166001557f038720101b9ced74445432ced46c7e5e4c80202669153dd67d226c66a0aa477b5f80a256fea2646970667358221220fe9cea6e5aa7930266437635c93938eb2299e3c4d539e4e317f943c18df7754364736f6c634300081a0033000000000000000000000000dd006633a161deb07661b7e73ecf1fe3dde3b1ff
Deployed Bytecode
0x60806040526004361015610011575f80fd5b5f3560e01c80630383eddc14610c0657806308dbebf614610b6f578063271a799c14610a815780632c1b79d614610a3d578063300a62bc14610a1e5780633054b76e146109e757806344ab6680146109645780634622ab03146109af578063523d53241461099657806352b347aa14610964578063715018a6146108f45780637368a8ce146108d65780637662f1121461086c578063772fa9da146108335780638da5cb5b1461080c5780639815121314610785578063a3f4df7e1461075c578063c42069ec146106e7578063c4d66de814610668578063c516bd48146105ef578063c6e2a40014610488578063d9eac8b414610461578063dcebb2001461034a578063e30c397814610322578063ebbc4965146102f5578063eff95b3e146102b8578063f2fde38b1461022d578063fb825e5f146101775763ffa1ad7414610158575f80fd5b34610173575f36600319011261017357602060405160018152f35b5f80fd5b34610173575f366003190112610173576040518060206002549283815201809260025f527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace905f5b81811061021757505050816101d5910382610cf8565b604051918291602083019060208452518091526040830191905f5b8181106101fe575050500390f35b82518452859450602093840193909201916001016101f0565b82548452602090930192600192830192016101bf565b3461017357602036600319011261017357610246610c49565b5f54610265906001600160a01b031661025d610e8b565b903314610ebb565b6001600160a01b0381161561027f5761027d906110fc565b005b60405162461bcd60e51b81526020600482015260116024820152704e6577204f776e6572206973207a65726f60781b6044820152606490fd5b346101735760603660031901126101735760206102e36102d6610c49565b6044359060243590610ffa565b6040516001600160a01b039091168152f35b34610173575f366003190112610173576001546001600160a01b0316338190036101735761027d906110fc565b34610173575f366003190112610173576001546040516001600160a01b039091168152602090f35b3461017357608036600319011261017357610363610c49565b604435906064359060018060a01b03165f52600560205260405f206024355f5260205260405f20918254808311610459575b5080821115610426576103a88183610f85565b926103b284610d45565b936103c06040519586610cf8565b8085526103cf601f1991610d45565b01366020860137815b8381106103f157604051806103ed8782610cb6565b0390f35b806103fe60019284610c8b565b838060a01b0391549060031b1c1661041f6104198684610f85565b88610d5d565b52016103d8565b60405162461bcd60e51b815260206004820152600b60248201526a195b99080f881cdd185c9d60aa1b6044820152606490fd5b915083610395565b346101735760403660031901126101735760206102e361047f610c49565b60243590610fa6565b34610173576020366003190112610173576104a1610c49565b5f546104b8906001600160a01b031661025d610e8b565b6040516351fa6fbf60e11b81526001600160a01b03821691602082600481865afa9182156105e4575f926105b0575b505f828152600360205260409020546001600160a01b03161561055e575b61053890825f52600360205260405f20846001600160601b0360a01b825416179055825f52600460205260405f20610d71565b7fd58fcbf380bae0241f359d0f293ee1c39cdcc598a96dfa5339ecad21560b4db65f80a3005b60025490600160401b82101561059c576105818260016105389401600255610c5f565b81549060031b9085821b915f19901b19161790559050610505565b634e487b7160e01b5f52604160045260245ffd5b9091506020813d6020116105dc575b816105cc60209383610cf8565b81010312610173575190836104e7565b3d91506105bf565b6040513d5f823e3d90fd5b34610173576020366003190112610173576004355f52600460205260405f206040519081602082549182815201915f5260205f20905f5b818110610649576103ed8561063d81870382610cf8565b60405191829182610cb6565b82546001600160a01b0316845260209093019260019283019201610626565b3461017357602036600319011261017357610681610c49565b60ff60015460a01c166106ac57610697906110fc565b6001805460ff60a01b1916600160a01b179055005b60405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b3461017357602036600319011261017357610700610c49565b5f54610717906001600160a01b031661025d610e8b565b600180546001600160a01b0319166001600160a01b039290921691821790557f68f49b346b94582a8b5f9d10e3fe3365318fe8f191ff8dce7c59c6cad06b02f55f80a2005b34610173575f366003190112610173576040516a436f626f466163746f727960a81b8152602090f35b34610173576040366003190112610173576001600160a01b036107a6610c49565b165f52600560205260405f206024355f5260205260405f206040519081602082549182815201915f5260205f20905f5b8181106107ed576103ed8561063d81870382610cf8565b82546001600160a01b03168452602090930192600192830192016107d6565b34610173575f366003190112610173575f546040516001600160a01b039091168152602090f35b3461017357602061084e61084636610ca0565b819291610db2565b90335f526005835260405f20905f5282526102e38160405f20610d71565b3461017357606036600319011261017357610885610c49565b6044359060018060a01b03165f52600560205260405f206024355f5260205260405f208054821015610173576020916108bd91610c8b565b905460405160039290921b1c6001600160a01b03168152f35b346101735760203660031901126101735760206102e3600435610eeb565b34610173575f366003190112610173575f5461091b906001600160a01b031661025d610e8b565b6001600160601b0360a01b5f54165f556001600160601b0360a01b600154166001555f7f038720101b9ced74445432ced46c7e5e4c80202669153dd67d226c66a0aa477b8180a2005b34610173576020366003190112610173576004355f526003602052602060018060a01b0360405f205416604051908152f35b346101735760206102e36109a936610ca0565b90610db2565b3461017357602036600319011261017357600435600254811015610173576109d8602091610c5f565b90549060031b1c604051908152f35b34610173576040366003190112610173576024356004355f52600460205260405f208054821015610173576020916108bd91610c8b565b3461017357602036600319011261017357602060043561084e81610eeb565b34610173576040366003190112610173576001600160a01b03610a5e610c49565b165f52600560205260405f206024355f52602052602060405f2054604051908152f35b34610173575f36600319011261017357600254610a9d81610d45565b90610aab6040519283610cf8565b808252601f19610aba82610d45565b015f5b818110610b5e5750505f5b818110610b3657826040518091602082016020835281518091526040830190602060408260051b8601019301915f905b828210610b0757505050500390f35b91936001919395506020610b268192603f198a82030186528851610c25565b9601920192018594939192610af8565b80610b42600192610d1a565b610b4c8286610d5d565b52610b578185610d5d565b5001610ac8565b806060602080938701015201610abd565b34610173575f366003190112610173576040516351fa6fbf60e11b8152602081600481305afa80156105e4575f90610bd2575b6103ed9060405190602082015260208152610bbe604082610cf8565b604051918291602083526020830190610c25565b506020813d602011610bfe575b81610bec60209383610cf8565b81010312610173576103ed9051610ba2565b3d9150610bdf565b34610173576020366003190112610173576103ed610bbe600435610d1a565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361017357565b600254811015610c775760025f5260205f2001905f90565b634e487b7160e01b5f52603260045260245ffd5b8054821015610c77575f5260205f2001905f90565b6040906003190112610173576004359060243590565b60206040818301928281528451809452019201905f5b818110610cd95750505090565b82516001600160a01b0316845260209384019390920191600101610ccc565b90601f8019910116810190811067ffffffffffffffff82111761059c57604052565b610d2390610c5f565b90549060031b1c60405190602082015260208152610d42604082610cf8565b90565b67ffffffffffffffff811161059c5760051b60200190565b8051821015610c775760209160051b010190565b8054600160401b81101561059c57610d8e91600182018155610c8b565b81546001600160a01b0393841660039290921b91821b9390911b1916919091179055565b919091610dbe816110a3565b604080513360208201908152918101959095529093610dea81606081015b03601f198101835282610cf8565b519020763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff8560881c16175f526e5af43d82803e903d91602b57fd5bf38460781b17602052603760095ff56001600160a01b03811691908215610e7c57604051928352936001600160a01b03169133907f532cf4635ae9ff4e1e42ba14917e825d00f602f28297cc654fa3b414b911232b90602090a4565b6330be1a3d60e21b5f5260045ffd5b604051906040820182811067ffffffffffffffff82111761059c57604052600382526245333560e81b6020830152565b15610ec35750565b60405162461bcd60e51b815260206004820152908190610ee7906024830190610c25565b0390fd5b90610ef5826110a3565b91763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff8460881c16175f526e5af43d82803e903d91602b57fd5bf38360781b17602052603760095ff06001600160a01b03811691908215610e7c57604051928352936001600160a01b03169133907f532cf4635ae9ff4e1e42ba14917e825d00f602f28297cc654fa3b414b911232b90602090a4565b91908203918211610f9257565b634e487b7160e01b5f52601160045260245ffd5b60018060a01b03165f52600560205260405f20905f5260205260405f2080548015610ff4575f198101908111610f9257610fdf91610c8b565b905460039190911b1c6001600160a01b031690565b50505f90565b91905f52600360205260018060a01b0360405f205416801561109c57604080516001600160a01b039094166020850190815290840192909252605592604392906110478160608101610ddc565b519020604051913060388401526f5af43d82803e903d91602b57fd5bf3ff60248401526014830152733d602d80600a3d3981f3363d3d373d3d3d363d73825260588201526037600c8201206078820152012090565b5050505f90565b5f908152600360205260409020546001600160a01b03169081156110c357565b60405162461bcd60e51b815260206004820152601160248201527027379034b6b83632b6b2b73a30ba34b7b760791b6044820152606490fd5b60018060a01b0316806001600160601b0360a01b5f5416175f556001600160601b0360a01b600154166001557f038720101b9ced74445432ced46c7e5e4c80202669153dd67d226c66a0aa477b5f80a256fea2646970667358221220fe9cea6e5aa7930266437635c93938eb2299e3c4d539e4e317f943c18df7754364736f6c634300081a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000dd006633a161deb07661b7e73ecf1fe3dde3b1ff
-----Decoded View---------------
Arg [0] : _owner (address): 0xDd006633A161deb07661B7e73eCf1fe3DdE3B1ff
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000dd006633a161deb07661b7e73ecf1fe3dde3b1ff
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
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.