Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 2 internal transactions
Advanced mode:
Parent Transaction Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
20161704 | 4 days ago | 5 ETH | ||||
20161704 | 4 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:
Factory
Compiler Version
v0.8.24+commit.e11b9ed9
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: None pragma solidity ^0.8.24; import "@openzeppelin/contracts/proxy/Clones.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; interface IToken { function initialize(bytes calldata params) external payable; } interface IValidationLogic { function validate(uint256 ethAmt, bytes calldata params) external; } contract Factory is Ownable { struct ImplementationData { address addr; uint256 version; } struct UserToken { uint256 tokenType; uint256 version; } IValidationLogic public validationLogic; mapping(uint256 => ImplementationData) public tokenImplementations; mapping(address => UserToken) public tokenData; address[] public createdTokens; mapping(address => bool) public canCreate; event TokenCreated(address _address); error NotApproved(); constructor(address _validationLogic, address[] memory implementations) Ownable(msg.sender) { validationLogic = IValidationLogic(_validationLogic); uint256 len = implementations.length; for (uint256 i; i < len; i++) { tokenImplementations[i] = ImplementationData({addr: implementations[i], version: 1}); } } function createToken(uint256 tokenID, bytes calldata params) external payable returns (address newToken) { if (!canCreate[msg.sender]) { revert NotApproved(); } canCreate[msg.sender] = false; ImplementationData storage tokenInfo = tokenImplementations[tokenID]; validationLogic.validate(msg.value, params); newToken = Clones.clone(tokenInfo.addr); createdTokens.push(newToken); tokenData[newToken] = UserToken({tokenType: tokenID, version: tokenInfo.version}); IToken(newToken).initialize{value: msg.value}(params); emit TokenCreated(newToken); } function approveCreator(address creator, bool approved) external onlyOwner { canCreate[creator] = approved; } function setImplementations(uint256[] memory ids, address[] memory implementations) external onlyOwner { if (ids.length != implementations.length) { revert(); } uint256 len = implementations.length; for (uint256 i; i < len; i++) { ImplementationData storage currImplementation = tokenImplementations[ids[i]]; if (currImplementation.addr != implementations[i]) { currImplementation.addr = implementations[i]; currImplementation.version += 1; } } } function setValidationLogic(address vLogic) external onlyOwner { validationLogic = IValidationLogic(vLogic); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; import {Context} from "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * The initial owner is set to the address provided by the deployer. This can * later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// 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: MIT // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } }
{ "optimizer": { "enabled": true, "runs": 200, "details": { "yul": true } }, "viaIR": true, "evmVersion": "paris", "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_validationLogic","type":"address"},{"internalType":"address[]","name":"implementations","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ERC1167FailedCreateClone","type":"error"},{"inputs":[],"name":"NotApproved","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"}],"name":"TokenCreated","type":"event"},{"inputs":[{"internalType":"address","name":"creator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"approveCreator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"canCreate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"createToken","outputs":[{"internalType":"address","name":"newToken","type":"address"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"createdTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"address[]","name":"implementations","type":"address[]"}],"name":"setImplementations","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vLogic","type":"address"}],"name":"setValidationLogic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenData","outputs":[{"internalType":"uint256","name":"tokenType","type":"uint256"},{"internalType":"uint256","name":"version","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenImplementations","outputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"version","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"validationLogic","outputs":[{"internalType":"contract IValidationLogic","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
604060808152346101b757610b1f8038038061001a816101d2565b928339810182828203126101b757610031826101f7565b6020838101516001600160401b0394929391928582116101b757019181601f840112156101b7578251918583116101bc576005938360051b9083806100778185016101d2565b8097815201928201019283116101b75783809101915b83831061019f5750505050331561018757600080546001600160a01b0319808216339081178455929490926001600160a01b039283167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08780a38160019716836001541617600155805195855b87811061010f578a51610913908161020c8239f35b825181101561017357838682841b85010151168b51908c82018281108d82111761015f578d5281528681018a8152828952600288528c892091518254881690871617825551908a015588016100fa565b634e487b7160e01b8a52604160045260248afd5b634e487b7160e01b87526032600452602487fd5b8551631e4fbdf760e01b815260006004820152602490fd5b81906101aa846101f7565b815201910190839061008d565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6040519190601f01601f191682016001600160401b038111838210176101bc57604052565b51906001600160a01b03821682036101b75756fe6040608081526004908136101561001557600080fd5b600091823560e01c80631672b0a61461077557806327e45c2c14610733578063512ea840146104a85780635b76c04f14610470578063715018a61461041657806371e6977e146103ed5780637804a5dc146103af57806382bc73dc146101f85780638da5cb5b146101d0578063d782d6471461018d578063d897ba96146101335763f2fde38b146100a557600080fd5b3461012f57602036600319011261012f576100be6107b5565b906100c76108b1565b6001600160a01b03918216928315610119575050600054826001600160601b0360a01b821617600055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a380f35b51631e4fbdf760e01b8152908101849052602490fd5b8280fd5b50503461018957806003193601126101895761014d6107b5565b9060243591821515809303610185576101646108b1565b60018060a01b03168352600560205282209060ff8019835416911617905580f35b8380fd5b5080fd5b5091346101cd5760203660031901126101cd57823592548310156101cd57506101b760209261082f565b905491519160018060a01b039160031b1c168152f35b80fd5b505034610189578160031936011261018957905490516001600160a01b039091168152602090f35b503461012f578160031936011261012f5780359067ffffffffffffffff908183116103ab57366023840112156103ab576024938184013561023881610817565b94610245835196876107f5565b818652602091878388019160051b830101913683116103935788849101915b83831061039b57505050508535938411610397573660238501121561039757838301359361029185610817565b9461029e845196876107f5565b808652878387019160051b83010191368311610393578801905b82821061036f575050506102ca6108b1565b845194845180960361036b57875b8681106102e3578880f35b6102ed818361089d565b5189526002835283892080546001600160a01b038061030c858b61089d565b511681831603610322575b5050506001016102d8565b61032c848a61089d565b5116906001600160601b0360a01b1617815560018091018054918201809211610359575560013880610317565b634e487b7160e01b8b5260118752898bfd5b8780fd5b81356001600160a01b038116810361038e5781529083019083016102b8565b600080fd5b8980fd5b8680fd5b8235815291810191849101610264565b8480fd5b5050346101895760203660031901126101895760209160ff9082906001600160a01b036103da6107b5565b1681526005855220541690519015158152f35b50503461018957816003193601126101895760015490516001600160a01b039091168152602090f35b83346101cd57806003193601126101cd5761042f6108b1565b600080546001600160a01b0319811682556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461012f57602036600319011261012f579181923581526002602052206001808060a01b0382541691015482519182526020820152f35b5091908060031936011261018957823591602480359467ffffffffffffffff95868111610185573660238201121561018557808201358781116103ab5783820191848236920101116103ab573385526020976005895260ff8787205416156107235733865260058952868620805460ff19169055878652600289528686206001546001600160a01b039991908a16803b1561071f57888a518092631df7cc5d60e31b8252348a8301528c8b8301528183816105688c8c604484019161087c565b03925af1801561071557610702575b508054608881901c62ffffff16763d602d80600a3d3981f3363d3d373d3d3d363d7300000017895260781b6effffffffffffffffffffffffffffff19166e5af43d82803e903d91602b57fd5bf3178b5289603760098af016998a156106f2578654680100000000000000008110156106e057908b6105fc836001809695018b5561082f565b909283549160031b92831b921b191617905501549088519289840190848210908211176106cc578952825289820190815288875260038a528787209151825551600190910155863b156103ab579161066d889286948851968795869563439fab9160e01b875286015284019161087c565b038134885af180156106c2576106ae575b50507f2e2b3f61b70d2d131b2a807371103cc98d51adcaa5e9a8f9c32658ad8426e74e838251848152a151908152f35b6106b882916107cb565b6101cd578061067e565b83513d84823e3d90fd5b87604188634e487b7160e01b600052526000fd5b634e487b7160e01b8a5260418852888afd5b89516330be1a3d60e21b81528790fd5b61070e909891986107cb565b9638610577565b8a513d8b823e3d90fd5b8880fd5b865163c19f17a960e01b81528490fd5b505034610189576020366003190112610189579081906001600160a01b036107596107b5565b1681526003602052206001815491015482519182526020820152f35b83346101cd5760203660031901126101cd5761078f6107b5565b6107976108b1565b60018060a01b03166001600160601b0360a01b600154161760015580f35b600435906001600160a01b038216820361038e57565b67ffffffffffffffff81116107df57604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176107df57604052565b67ffffffffffffffff81116107df5760051b60200190565b6004548110156108665760046000527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0190600090565b634e487b7160e01b600052603260045260246000fd5b908060209392818452848401376000828201840152601f01601f1916010190565b80518210156108665760209160051b010190565b6000546001600160a01b031633036108c557565b60405163118cdaa760e01b8152336004820152602490fdfea26469706673582212200c93f950f9de1c1ec365c18fc4ee15d2edd798d987eaf01d88dfa2837f58c9db64736f6c63430008180033000000000000000000000000771b8e1d68a0ec5fea25da1f12c19e87e816d5080000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000039a0c47adc02528f86ebc1554ee5b12ccd944269
Deployed Bytecode
0x6040608081526004908136101561001557600080fd5b600091823560e01c80631672b0a61461077557806327e45c2c14610733578063512ea840146104a85780635b76c04f14610470578063715018a61461041657806371e6977e146103ed5780637804a5dc146103af57806382bc73dc146101f85780638da5cb5b146101d0578063d782d6471461018d578063d897ba96146101335763f2fde38b146100a557600080fd5b3461012f57602036600319011261012f576100be6107b5565b906100c76108b1565b6001600160a01b03918216928315610119575050600054826001600160601b0360a01b821617600055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a380f35b51631e4fbdf760e01b8152908101849052602490fd5b8280fd5b50503461018957806003193601126101895761014d6107b5565b9060243591821515809303610185576101646108b1565b60018060a01b03168352600560205282209060ff8019835416911617905580f35b8380fd5b5080fd5b5091346101cd5760203660031901126101cd57823592548310156101cd57506101b760209261082f565b905491519160018060a01b039160031b1c168152f35b80fd5b505034610189578160031936011261018957905490516001600160a01b039091168152602090f35b503461012f578160031936011261012f5780359067ffffffffffffffff908183116103ab57366023840112156103ab576024938184013561023881610817565b94610245835196876107f5565b818652602091878388019160051b830101913683116103935788849101915b83831061039b57505050508535938411610397573660238501121561039757838301359361029185610817565b9461029e845196876107f5565b808652878387019160051b83010191368311610393578801905b82821061036f575050506102ca6108b1565b845194845180960361036b57875b8681106102e3578880f35b6102ed818361089d565b5189526002835283892080546001600160a01b038061030c858b61089d565b511681831603610322575b5050506001016102d8565b61032c848a61089d565b5116906001600160601b0360a01b1617815560018091018054918201809211610359575560013880610317565b634e487b7160e01b8b5260118752898bfd5b8780fd5b81356001600160a01b038116810361038e5781529083019083016102b8565b600080fd5b8980fd5b8680fd5b8235815291810191849101610264565b8480fd5b5050346101895760203660031901126101895760209160ff9082906001600160a01b036103da6107b5565b1681526005855220541690519015158152f35b50503461018957816003193601126101895760015490516001600160a01b039091168152602090f35b83346101cd57806003193601126101cd5761042f6108b1565b600080546001600160a01b0319811682556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461012f57602036600319011261012f579181923581526002602052206001808060a01b0382541691015482519182526020820152f35b5091908060031936011261018957823591602480359467ffffffffffffffff95868111610185573660238201121561018557808201358781116103ab5783820191848236920101116103ab573385526020976005895260ff8787205416156107235733865260058952868620805460ff19169055878652600289528686206001546001600160a01b039991908a16803b1561071f57888a518092631df7cc5d60e31b8252348a8301528c8b8301528183816105688c8c604484019161087c565b03925af1801561071557610702575b508054608881901c62ffffff16763d602d80600a3d3981f3363d3d373d3d3d363d7300000017895260781b6effffffffffffffffffffffffffffff19166e5af43d82803e903d91602b57fd5bf3178b5289603760098af016998a156106f2578654680100000000000000008110156106e057908b6105fc836001809695018b5561082f565b909283549160031b92831b921b191617905501549088519289840190848210908211176106cc578952825289820190815288875260038a528787209151825551600190910155863b156103ab579161066d889286948851968795869563439fab9160e01b875286015284019161087c565b038134885af180156106c2576106ae575b50507f2e2b3f61b70d2d131b2a807371103cc98d51adcaa5e9a8f9c32658ad8426e74e838251848152a151908152f35b6106b882916107cb565b6101cd578061067e565b83513d84823e3d90fd5b87604188634e487b7160e01b600052526000fd5b634e487b7160e01b8a5260418852888afd5b89516330be1a3d60e21b81528790fd5b61070e909891986107cb565b9638610577565b8a513d8b823e3d90fd5b8880fd5b865163c19f17a960e01b81528490fd5b505034610189576020366003190112610189579081906001600160a01b036107596107b5565b1681526003602052206001815491015482519182526020820152f35b83346101cd5760203660031901126101cd5761078f6107b5565b6107976108b1565b60018060a01b03166001600160601b0360a01b600154161760015580f35b600435906001600160a01b038216820361038e57565b67ffffffffffffffff81116107df57604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff8211176107df57604052565b67ffffffffffffffff81116107df5760051b60200190565b6004548110156108665760046000527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0190600090565b634e487b7160e01b600052603260045260246000fd5b908060209392818452848401376000828201840152601f01601f1916010190565b80518210156108665760209160051b010190565b6000546001600160a01b031633036108c557565b60405163118cdaa760e01b8152336004820152602490fdfea26469706673582212200c93f950f9de1c1ec365c18fc4ee15d2edd798d987eaf01d88dfa2837f58c9db64736f6c63430008180033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000771b8e1d68a0ec5fea25da1f12c19e87e816d5080000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000039a0c47adc02528f86ebc1554ee5b12ccd944269
-----Decoded View---------------
Arg [0] : _validationLogic (address): 0x771b8E1D68a0eC5FEa25dA1f12C19E87E816d508
Arg [1] : implementations (address[]): 0x39A0C47AdC02528F86EbC1554EE5b12CCD944269
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000771b8e1d68a0ec5fea25da1f12c19e87e816d508
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [3] : 00000000000000000000000039a0c47adc02528f86ebc1554ee5b12ccd944269
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 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.